#include <stdio.h>
#include <reg52.h>
#include <intrins.h>
#include <string.h>
#define uchar unsigned char
#define uint unsigned int
#define AddWr 0xae //写数据地址,需要参考24c02芯片文档
#define AddRd 0xaf //读数据地址
unsigned char Number[3];
unsigned char Number1[5];
unsigned char Number2[1];
unsigned char Number3[25];
unsigned char Number4[25];
unsigned char Number5[1];
////////#define fous 11059200
////////#define band 9600
uchar code table[]={"星期一""星期二""星期三""星期四""星期五""星期六""星期日"};
sbit led=P1^4;
sbit key1=P3^0;
sbit key2=P3^1;
sbit key3=P3^2;
sbit key4=P3^3;
uchar code LCD_data1[];
uchar code LCD_data2[];
uchar code LCD_picture1[];
uchar code LCD_picture2[];
//uchar code menu_pic[6][96];
uchar code mode_2num[11][64];
uchar code mode_3num[10][32];
uchar code mode_1num[32];
sbit Sda=P1^2; //定义总线连接端口
sbit Scl=P1^1;
sbit WP=P1^0; //写保护,这里不使用
void lcm_w_word(unsigned char *str);
void keyscan();
void keyscan1();
void keyscanshizhong();
void display();
void display1();
void display2();
void displayriqi();
void displayxingqi();
void displaykey2time();
void stopp();
void zhongzhuan();
void displaycaidan();
void displayshizhong();
void displayshizhongduoge();
void displayshi();
void displaynaozhong();
void displaymiaobiao();
void keyscanhui();
void keyscanriqi();
void fanhui();
void jianxie();
void shezhi();
sbit RS = P2^4;
sbit RW = P2^5;
sbit EN = P2^6;
sbit PSB = P2^1;
sbit RES = P2^3;
sbit Dataport = P0;
sbit Busyport = P0^7;
bit flag,flagde,flagfe,flagee,flagwe,flagre,flagyong;
uchar d,key1Save,key1Check,key1Times,day,yue,xianshi,key2time,jiyikey2time;
uchar nian1,nian2,num6,num7,num8,xiaomiao,miaomiao,damiao;
uchar d1,d2,d3,d4,d5,d6,num3,num4,num5,num,num1,num2,aa,count,count1,count2,num6;
uchar num6,num7,num8;
void delay(unsigned int m) //1US延时程序
{
unsigned int i,j;
for(i=0;i<m;i++)
for(j=0;j<100;j++);
}
void delay_us(unsigned int temp)
{
while(temp--);
}
///////////////////////////////////////////////////////////////
//判LCM忙子函数
void check_LCD_busy (void)
{
Dataport = 0xff;
RS = 0;
RW = 1;
EN = 1;
while (Busyport);
EN = 0;
}
///////////////////////////////////////////////////////////////
//写命令子函数
void write_com(uchar Command)
{
check_LCD_busy();
RW=0;
RS=0;
P0=Command;
EN=1;
delay_us(15);
EN=0;
}
////////////////////////////////////////////////////////////////
//写数据子函数
void write_data(uchar Data)
{
check_LCD_busy();
RW=0;
RS=1;
delay_us(15);
P0=Data;
EN=1;
delay_us(15);
EN=0;
}
void lcm_w_word(unsigned char *str)
{
while(*str != '\0')
{
write_data(*str++);
}
*str = 0;
}
/////////////////////////////////////////////////////////////////
//LCM清屏函数
void lcdClear (void)
{
write_com(0x01);
}
////////////////////////////////////////////////////////////////
//LCM复位函数
void reset ()
{
RES=0; //复位
delay(1); //延时
RES=1; //复位置高
delay(10);
}
void Start(void)
{
Sda=1;
_nop_();_nop_();
Scl=1;
_nop_();_nop_();_nop_();_nop_();_nop_();
Sda=0;
_nop_();_nop_();_nop_();_nop_();_nop_();
Scl=0;
}
/*------------------------------------------------
停止IIC总线
------------------------------------------------*/
void Stop(void)
{
Sda=0;
_nop_();
Scl=1;
_nop_();_nop_();_nop_();_nop_();_nop_();
Sda=1;
_nop_();_nop_();_nop_();_nop_();_nop_();
Scl=0;
}
/*------------------------------------------------
应答IIC总线
------------------------------------------------*/
void Ack(void)
{
// Sda=0;
_nop_();_nop_();_nop_();
Scl=1;
_nop_();_nop_();_nop_();_nop_();_nop_();
Scl=0;
_nop_();_nop_();
}
/*------------------------------------------------
非应答IIC总线
------------------------------------------------*/
void NoAck(void)
{
// Sda=1;
_nop_();_nop_();_nop_();
Scl=1;
_nop_();_nop_();_nop_();_nop_();_nop_();
Scl=0;
_nop_();_nop_();
}
/*------------------------------------------------
发送一个字节
------------------------------------------------*/
void Send(unsigned char Data)
{
unsigned char BitCounter=8;
unsigned char temp;
do
{
temp=Data;
Scl=0;
_nop_();_nop_();_nop_();_nop_();_nop_();
if((temp&0x80)==0x80)
Sda=1;
else
Sda=0;
Scl=1;
temp=Data<<1;
Data=temp;
BitCounter--;
}
while(BitCounter);
Scl=0;
}
/*------------------------------------------------
读入一个字节并返回
------------------------------------------------*/
unsigned int Read(void)
{
unsigned char temp=0;
unsigned char temp1=0;
unsigned char BitCounter=8;
Sda=1;
do
{
Scl=0;
_nop_();_nop_();_nop_();_nop_();_nop_();
Scl=1;
_nop_();_nop_();_nop_();_nop_();_nop_();
if(Sda)
temp=temp|0x01;
else
temp=temp&0xfe;
if(BitCounter-1)
{
temp1=temp<<1;
temp=temp1;
}
BitCounter--;
}
while(BitCounter);
return(temp);
}
/*------------------------------------------------
写入数据
------------------------------------------------*/
void WrToROM(unsigned char Data[],unsigned char Address,unsigned char Num)
{
unsigned char i;
unsigned char *PData;
PData=Data;
for(i=0;i<Num;i++)
{
Start();
Send(AddWr); //写入芯片地址
Ack();
Send(Address+i);//写入存储地址
Ack();
Send(*(PData+i));//写数据
Ack();
Stop();
delay(20);
}
}
/*------------------------------------------------
读出数据
------------------------------------------------*/
void RdFromROM(unsigned char Data[],unsigned char Address,unsigned char Num)
{
unsigned char i;
unsigned char *PData;
PData=Data;
for(i=0;i<Num;i++)
{
Start(); //写入芯片地址
Send(AddWr);
Ack();
Send(Address+i);//写入存储地址
Ack();
Start();
Send(AddRd); //读入地址
Ack();
*(PData+i)=Read();//读数据
Scl=0;
NoAck();
Stop();
}
}
void num2_asc_dis(uchar num,uchar x_0)
{
uchar i,y_0=0x90;
for(i=0;i<32;i++) // 十位个位一起读入
{
write_com(0x36);
write_com(y_0++);
write_com(x_0);
write_com(0x30);
write_data(mode_2num[num][i*2]);
write_data(mode_2num[num][i*2+1]);
if(i==15)
{
x_0+=8;
y_0=0x80;
}
}
write_com(0x36);
}
void num3_asc_dis(uchar num,uchar x_0)
{
uchar i,y_0=0x88; //不明白 待考证明 验证
for(i=0;i<16;i++)
{
write_com(0x36);
write_com(y_0++);
write_com(x_0);
write_com(0x30);
write_data(mode_3num[num][i*2]);
write_data(mode_3num[num][i*2+1]);
}
write_com(0x36);
}
void num1_asc_dis(uchar x_0)
{
uchar i,y_0=0x80;
for(i=0;i<16;i++)
{
write_com(0x34);
write_com(y_0++);
write_com(x_0);
write_com(0x30);
write_data(mode_1num[i*2]);
write_data(mode_1num[i*2+1]);
}
write_com(0x36);
}
void con_disp (uchar data1,uchar data2,uchar x0,uchar y0,uchar xl,uchar yl)//泛白
{
u