用51写的带键控带温度的万年历在LCD12864上显示
//---------------------------------------------------------
void Wr_Command(uchar wrcommand,busyc) //写指令
{
if(busyc)
RDbf();
RS=0;
RW=0;
E=1;
LCMdata=wrcommand;
E=0;
}
//----------------------------------------------------------
void Wr_Word(uchar *s)
{
while(*s!= )
{
Wr_Data(*s++);
} *s=0;
}
//----------------------------------------------------------
void Display_String(uchar line,uchar Y,uchar *string)//显示字符串
{
uchar addr,post;
if(line==1)
addr=0x80;
else if(line==2)
addr=0x90;
else if(line==3)
addr=0x88;
else if(line==4)
addr=0x98;
post=addr+Y;
Wr_Command(post,1);
while(*string!= )
{
Wr_Data(*string++);
}
//*string = 0;
}
//-----------------------------------------------------------
void Lcm_Init(void)
{
Delay_Ms(40);
Delay5Ms();
PSB=1;
Delay5Ms();
REST=1;
REST=0;
REST=1;
Wr_Command(0x30,0);
Delay5Ms();
Wr_Command(0x30,0); //2次显示模式设置,不用判忙
Delay5Ms();
Wr_Command(0x0c,1); //开显示及光标设置
Delay5Ms();
Wr_Command(0x01,1); //显示清屏
Delay5Ms();
Wr_Command(0x02,1);//光标归位
//Delay5Ms();
//Wr_Command(0x14,1);//光标向右移动
Delay5Ms();
Wr_Command(0x06,1); //显示光标移动设置
Delay5Ms();
}
//-----------------------------------------------------------
//-----------------------------------------------------------
void buz(void)
{
uint i;
for(i=200;i>0;i--)
{
Buz=1;
Delay_Us(120);
Buz=0;
}
Buz=0x00;
}
//----------------------------------------------------------
void Key_Scan()
{
P1=0x30;
if(Key_1==0)
{
Delay_Ms(20);
if(Key_1==0)
{
Key_Select++;
if (Key_Select==1)
{
Wr_Command(0x0f,1);
Wr_Command(0x88,1); //Hour
}
if(Key_Select==2)
{
Wr_Command(0x8a,1); //Min
}
if(Key_Select==3)
{
Wr_Command(0x8c,1); //Sec
}
if(Key_Select==4)
{
Wr_Command(0x91,1); //Yeah
}
if(Key_Select==5)
{
Wr_Command(0x93,1); //Mouth
}
if(Key_Select==6)
{
Wr_Command(0x95,1); //Date
}
if(Key_Select==7)
{
Wr_Command(0x9a,1); //Week;
}
if(Key_Select==8)
{
Wr_Command(0x0c,1);
Key_Select=0;
Key_Count=0;
}
buz();
while(!Key_1);
Key_Count=0;
}
}
if(Key_2==0)
{
Delay_Ms(20);
if(Key_2==0)
{
Key_Count++;
}
buz();
while(!Key_2);
Wr_1302(0x8e,0x00);
Wr_1302(0x80,0x80);
switch(Key_Select)
{
case 1://Hour
if(Key_Count!=0)
{
// Wr_Command(0x0f,1);
Wr_Command(0x88,1);
if(Key_Count==24)
Key_Count=0;
Hour=(Key_Count/10)<<4|(Key_Count%10);
Wr_1302(Wr_addr[4],Hour);
}break;
case 2: //Min
if(Key_Count!=0)
{
Wr_Command(0x8a,1);
if(Key_Count==60)
Key_Count=0;
Min=(Key_Count/10)<<4|(Key_Count%10);
Wr_1302(Wr_addr[5],Min);
}break;
case 3: //Sec
if(Key_Count!=0)
{
Wr_Command(0x8c,1);
if(Key_Count==60)
Key_Count=0;
Sec=(Key_Count/10)<<4|(Key_Count%10);
Wr_1302(Wr_addr[6],Sec);
}break;
case 4: //Year
if(Key_Count!=0)
{
Wr_Command(0x91,1);
if(Key_Count==99)
Key_Count=0;
Year=(Key_Count/10)<<4|(Key_Count%10);
Wr_1302(Wr_addr[0],Year);
}break;
case 5: //Mouth
if(Key_Count!=0)
{
Wr_Command(0x93,1);
if(Key_Count==12)
Key_Count=1;
Mouth=(Key_Count/10)<<4|(Key_Count%10);
Wr_1302(Wr_addr[2],Mouth);
}break;
case 6: //Date
if(Key_Count!=0)
{
Wr_Command(0x95,1);
if(Key_Count==32)
Key_Count=1;
Date=(Key_Count/10)<<4|(Key_Count%10);
Wr_1302(Wr_addr[3],Date);
}break;
case 7: //Week
if(Key_Count!=0)
{
Wr_Command(0x9a,1);
if(Key_Count==8)
Key_Count=1;
Week=(Key_Count/10)<<4|(Key_Count%10);
Wr_1302(Wr_addr[1],Week);
}break;
default:
if(Key_Count==0)
{
Wr_Command(0x0c,1);
Wr_1302(0x8e,0x00);
Wr_1302(0x80,0x00);
Wr_1302(0x8e,0x80);
}Key_Select=0;
break;
}
}
}
//-----------------------------------------------------------
void main(void)
{
buz();
Lcm_Init();
Inint_ds18b20();
//Display_String(1,0,string_4);
Display_String(2,0,string_2);
Display_String(3,0,string_3);
//Display_String(4,0,string_4);
Delay_Ms(1000);
Wr_Command(0x01,1);
Delay_Ms(250);
//Display_String(1,0,string_4);
Display_String(2,0,string_2);
Display_String(3,0,string_3);
//Display_String(4,0,string_4);
Delay_Ms(1000);
Wr_Command(0x01,1);
Display_String(1,0,string_2);
Display_String(2,0,Display);
Display_String(3,0,Display_1);
Display_String(4,0,Display_2);
//Set_RTC();
//Wr_1302(0x80,0x00);
while(1)
{
Key_Scan();
Rd_RTC();
change();
Display_String(1,0,string_2);
Display_String(2,0,Display);
Display_String(3,0,Display_1);
Display_String(4,0,Display_2);
Read_Temp();
Display_String(4,4,Display_T);
Delay_Ms(100);
}
}
评论