DIY 1602时钟可调节显示
时间:08-31
来源:互联网
点击:
#includereg52.h>#define uint unsigned int#define uchar unsigned charsbit key0 = P3^0;//时间调节分秒时切换sbit key1 = P3^1; //时间加sbit key2 = P3^2; //时间减sbit lcdrw = P2^5;//读写操作选择,1读 0写sbit rs = P2^6;//寄存器选择,1数据 0指令sbit lcden = P2^7;//使能信号uchar code table[] = {" 2010-10-22 FRI"};uchar code table1[] = {" 00:00:00"};uchar count,shi,fen,miao,s1num;void delay(uint z){uint x,y;for(x = z;x > 0;x --)for(y = 110;y > 0;y --);}void write_com(uchar com)//写指令{rs = 0;lcden = 0;P0 = com;delay(5);lcden = 1;delay(5);lcden = 0; }void write_date(uchar date)//写数据{rs = 1;lcden = 0;P0 = date;delay(5);lcden = 1;delay(5);lcden = 0; }void init(){uchar num;lcdrw = 0;lcden = 0;write_com(0x38);write_com(0x0c);write_com(0x06);write_com(0x01);//清零write_com(0x80); //液晶第一行地址for(num = 0;num 15;num ++){write_date(table[num]);delay(5); }write_com(0x80+0x40);//液晶第二行地址for(num = 0;num 12;num ++){write_date(table1[num]);delay(5);}TMOD = 0x01;TH0 = (65536-50000)/256;TL0 = (65536-50000)%256;EA = 1; // 开中断ET0 = 1; //定时器0中断TR0 = 1; //启动定时器}void write_sfm(uchar add,uchar date){uchar shi,ge;shi = date/10;ge = date%10;write_com(0x80+0x40+add);write_date(0x30+shi);write_date(0x30+ge);}void keyscan(){if(key0 == 0){delay(5);if(key0 == 0){s1num ++;while(!key0);if(s1num == 1){TR0 = 0;write_com(0x80+0x40+10);write_com(0x0f);}if(s1num == 2){write_com(0x80+0x40+7);}if(s1num == 3){write_com(0x80+0x40+4);}if(s1num == 4){s1num = 0;write_com(0x0c);//不闪光标TR0 = 1;}}}if(s1num != 0){if(key1 == 0){delay(5);if(key1 == 0){while(!key1);if(s1num == 1){miao ++;if(miao == 60)miao = 0;write_sfm(10,miao);write_com(0x80+0x40+10);}if(s1num == 2){fen ++;if(fen == 60)fen = 0;write_sfm(7,fen);write_com(0x80+0x40+7); }if(s1num == 3){shi ++;if(shi == 24)shi = 0;write_sfm(4,shi);write_com(0x80+0x40+4); }}}if(key2 == 0){delay(5);if(key2 == 0){while(!key2);if(s1num == 1){if(miao == 0){miao = 60;write_sfm(10,miao);write_com(0x80+0x40+10);}miao --;write_sfm(10,miao);write_com(0x80+0x40+10);}if(s1num == 2){if(fen == 0){fen = 60;write_sfm(7,fen);write_com(0x80+0x40+7);}fen --;write_sfm(7,fen);write_com(0x80+0x40+7); }if(s1num == 3){if(shi == 0){shi = 24;write_sfm(4,shi);write_com(0x80+0x40+4);}shi --;write_sfm(4,shi);write_com(0x80+0x40+4);}}}} }void main(){init();while(1){keyscan();// while(1);}}void timer0() interrupt 1{TH0 = (65536-50000)/256;TL0 = (65536-50000)%256;count ++;if(count == 20){count = 0;miao ++;if(miao == 60){miao = 0;fen ++;if(fen == 60){fen = 0;shi ++;if(shi ==24){shi = 0;}write_sfm(4,shi);}write_sfm(7,fen);}write_sfm(10,miao);} }
- 1602液晶显示总线(12-15)
- 上位机串口发送至单片机1602液晶(12-02)
- 单片机定时器实现实时时钟程序-lcd1602显示(12-02)
- 单片机写LCD1602液晶程序源码(12-02)
- 单片机I2C通信及LCD1602显示C程序(12-02)
- 单片机LCD1602底层驱动子程序(12-02)