|
第一次发帖,第一次写这么长的程序,第一次用液晶1602,自己鼓励一下自己,高手莫笑:
/************************************************/
TX-1C兼容开发板,lcd1602液晶
/************************************************/
#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit dula=P2^7;
sbit wela=P2^6;
sbit diola=P2^5;
sbit lcden=P3^4;
sbit lcdrs=P3^5;
sbit lcdwr=P3^6;
sbit rd=P3^7;//分离矩阵键盘
sbit s1=P3^0;
sbit s2=P3^1;
sbit s3=P3^2;
uchar code table1[]=" 2011-08-30 MON" ;
uchar code table2[]=" 12:00:00" ;
uchar aa,s1num;
char hour,minute,sec,day,week,month,year,num,M,O,N,T,U,E,W,E,D,H,F,R,I,A,S;
void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
void write_com(uchar com)
{
lcdrs=0;
lcden=0;
P0=com;
delay(5);
lcden=1;
delay(5);
lcden=0;
}
void write_date(uchar date)
{
lcdrs=1;
lcden=0;
P0=date;
delay(5);
lcden=1;
delay(5);
lcden=0;
}
void init()
{
// uchar num;
hour=12; //以下7行为测试之
minute=00;
sec=00;
week=1;
day=30;
month=8;
year=11;
P0=0x0; //关掉3个寄存器
dula=1;
dula=0;
P0=0xff;
wela=1;
wela=0;
diola=0;
lcdwr=0;
lcden=0;
rd=0;
write_com(0x38);//初始化1602液晶
write_com(0x0c);
write_com(0x06);
write_com(0x01);
write_com(0x80);//设置显示初始坐标
write_com(0x80);
for(num=0;num<15;num++)
{
write_date(table1[num]);
delay(5);
}
write_com(0x80+0x40);
for(num=0;num<12;num++)
{
write_date(table2[num]);
delay(5);
}
TMOD=0X01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
EA=1;
ET0=1;
TR0=1;
}
void write_sfm(uchar add,uchar date)
{
uchar shi,ge;
shi=date/10;
ge=date%10;
write_com(0x80+add);
write_date(0x30+shi);
write_date(0x30+ge);
}
void timer0() interrupt 1
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
aa++;
if(aa==20)
{
aa=0;
sec++;
if(sec>59)
{
sec=0;
minute++;
if(minute>59)
{
minute=0;
hour++;
if(hour>23)
{
hour=0;
day++;
week++;
if(week>7)
{
week=1;
}
// write_sfm(13,week);
switch (week)
{
case 1:
write_com(0x80+12);
write_date('M');
write_com(0x80+13);
write_date('O');
write_com(0x80+14);
write_date('N');
break;
case 2:
write_com(0x80+12);
write_date('T');
write_com(0x80+13);
write_date('U');
write_com(0x80+14);
write_date('E');
break;
case 3:
write_com(0x80+12);
write_date('W');
write_com(0x80+13);
write_date('E');
write_com(0x80+14);
write_date('D');
break;
case 4:
write_com(0x80+12);
write_date('T');
write_com(0x80+13);
write_date('H');
write_com(0x80+14);
write_date('U');
break;
case 5:
write_com(0x80+12);
write_date('F');
write_com(0x80+13);
write_date('R');
write_com(0x80+14);
write_date('I');
break;
case 6:
write_com(0x80+12);
write_date('S');
write_com(0x80+13);
write_date('A');
write_com(0x80+14);
write_date('T');
break;
case 7:
write_com(0x80+12);
write_date('S');
write_com(0x80+13);
write_date('U');
write_com(0x80+14);
write_date('N');
break;
}
if(
((month==1||month==3||month==5||month==7||month==8||month==10||month==12) && (day>31))||
((month==4||month==6||month==9||month==11) && (day>30))||
((month==2) && ((year) % 4==0 && (year) % 100 !=0||(year) % 400==0) &&(day>29))||
((month==2) && (!((year) %4==0 && (year)%100!=0||(year)%400==0)) && (day>28))
)
{
day=1;
month++;
if(month>12)
{
month=1;
year++;
if(year>99)
{
year=0;
}
write_sfm(3,year);
}
write_sfm(6,month);
}
write_sfm(9,day);
}
write_sfm(0x40+4,hour);
}
write_sfm(0x40+7,minute);
}
write_sfm(0x40+10,sec);
}
}
void keyscan()
{
if(s1==0)
{
delay(10);
if(s1==0)
{
while(!s1);
s1num++;
switch(s1num)
{
case 1:
TR0=0;
write_com(0x80+0x40+10);
write_com(0x0f);
break;
case 2:
write_com(0x80+0x40+7);
write_com(0x0f);
break;
case 3:
write_com(0x80+0x40+4);
write_com(0x0f);
break;
case 4:
write_com(0x80+3);
write_com(0x0f);
break;
case 5:
TR0=0;
write_com(0x80+6);
write_com(0x0f);
break;
case 6:
write_com(0x80+9);
write_com(0x0f);
break;
case 7:
write_com(0x80+12);
write_com(0x0f);
break;
case 8:
s1num=0;
TR0=1;
write_com(0x0c);
break;
}
}
}
if(s1num!=0)
{
if(s2==0)
{
delay(10);
if(s2==0)
{
while(!s2);
if(s1num==1)
{
sec++;
if(sec>59)
sec=0;
write_sfm(0x40+10,sec);
write_com(0x80+0x40+10);
}
if(s1num==2)
{
minute++;
if(minute>59)
minute=0;
write_sfm(0x40+7,minute);
write_com(0x80+0x40+7);
}
if(s1num==3)
{
hour++;
if(hour>24)
hour=0;
write_sfm(0x40+4,hour);
write_com(0x80+0x40+4);
}
if(s1num==4)
{
year++;
if(year>99)
year=0;
write_sfm(+3,year);
write_com(0x80+3);
}
if(s1num==5)
{
month++;
if(month>12)
month=1;
write_sfm(+6,month);
write_com(0x80+6);
}
if(s1num==6)
{
day++;
if(day>31)
day=1;
write_sfm(+9,day);
write_com(0x80+9);
}
if(s1num==7)
{
week++;
if(week>7)
{
week=1;
}
// write_sfm(+13,week);
// write_com(0x80+13);
switch (week)
{
case 1:
write_com(0x80+12);
write_date('M');
write_com(0x80+13);
write_date('O');
write_com(0x80+14);
write_date('N');
write_com(0x80+12);
break;
case 2:
write_com(0x80+12);
write_date('T');
write_com(0x80+13);
write_date('U');
write_com(0x80+14);
write_date('E');
write_com(0x80+12);
break;
case 3:
write_com(0x80+12);
write_date('W');
write_com(0x80+13);
write_date('E');
write_com(0x80+14);
write_date('D');
write_com(0x80+12);
break;
case 4:
write_com(0x80+12);
write_date('T');
write_com(0x80+13);
write_date('H');
write_com(0x80+14);
write_date('U');
write_com(0x80+12);
break;
case 5:
write_com(0x80+12);
write_date('F');
write_com(0x80+13);
write_date('R');
write_com(0x80+14);
write_date('I');
write_com(0x80+12);
break;
case 6:
write_com(0x80+12);
write_date('S');
write_com(0x80+13);
write_date('A');
write_com(0x80+14);
write_date('T');
write_com(0x80+12);
break;
case 7:
write_com(0x80+12);
write_date('S');
write_com(0x80+13);
write_date('U');
write_com(0x80+14);
write_date('N');
write_com(0x80+12);
break;
}
}
}
}
}
if(s1num!=0)
{
if(s3==0)
{
delay(10);
if(s3==0)
{
while(!s3);
if(s1num==1)
{
sec--;
if(sec<0)
sec=59;
write_sfm(0x40+10,sec);
write_com(0x80+0x40+10);
}
if(s1num==2)
{
minute--;
if(minute<0)
minute=59;
write_sfm(0x40+7,minute);
write_com(0x80+0x40+7);
}
if(s1num==3)
{
hour--;
if(hour<0)
hour=23;
write_sfm(0x40+4,hour);
write_com(0x80+0x40+4);
}
if(s1num==4)
{
year--;
if(year<0)
year=99;
write_sfm(+3,year);
write_com(0x80+3);
}
if(s1num==5)
{
month--;
if(month<1)
month=12;
write_sfm(+6,month);
write_com(0x80+6);
}
if(s1num==6)
{
day--;
if(day<1)
day=31;
write_sfm(+9,day);
write_com(0x80+9);
}
if(s1num==7)
{
week--;
if(week<1)
week=7;
// write_sfm(+13,week);
// write_com(0x80+13);
switch (week)
{
case 1:
write_com(0x80+12);
write_date('M');
write_com(0x80+13);
write_date('O');
write_com(0x80+14);
write_date('N');
write_com(0x80+12);
break;
case 2:
write_com(0x80+12);
write_date('T');
write_com(0x80+13);
write_date('U');
write_com(0x80+14);
write_date('E');
write_com(0x80+12);
break;
case 3:
write_com(0x80+12);
write_date('W');
write_com(0x80+13);
write_date('E');
write_com(0x80+14);
write_date('D');
write_com(0x80+12);
break;
case 4:
write_com(0x80+12);
write_date('T');
write_com(0x80+13);
write_date('H');
write_com(0x80+14);
write_date('U');
write_com(0x80+12);
break;
case 5:
write_com(0x80+12);
write_date('F');
write_com(0x80+13);
write_date('R');
write_com(0x80+14);
write_date('I');
write_com(0x80+12);
break;
case 6:
write_com(0x80+12);
write_date('S');
write_com(0x80+13);
write_date('A');
write_com(0x80+14);
write_date('T');
write_com(0x80+12);
break;
case 7:
write_com(0x80+12);
write_date('S');
write_com(0x80+13);
write_date('U');
write_com(0x80+14);
write_date('N');
write_com(0x80+12);
break;
}
}
}
}
}
}
void main()
{
init();
while(1)
{
keyscan();
}
} |
阿莫论坛20周年了!感谢大家的支持与爱护!!
你熬了10碗粥,别人一桶水倒进去,淘走90碗,剩下10碗给你,你看似没亏,其实你那10碗已经没有之前的裹腹了,人家的一桶水换90碗,继续卖。说白了,通货膨胀就是,你的钱是挣来的,他的钱是印来的,掺和在一起,你的钱就贬值了。
|