#include<reg52.h> #define uchar unsigned char #define uint unsigned int sbit dula=P2^6; sbit wela=P2^7; sbit lcden=P3^4; sbit lcdrs=P3^5; sbit s1=P3^0; sbit s2=P3^1; sbit s3=P3^2; sbit rd=P3^7; const uchar table[]=" 2015-02-02 MON"; //15 const uchar table1[]=" 00:00:00"; //9 uchar t0,s1num; char nian,yue,ri,week,shi,fen,miao; void delay(uint z) { uint x,y; for(x=z;x>0;x--) for(y=110;y>0;y--); } void write_comm(uchar comm) { lcdrs=0; lcden=0; P0=comm; 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; dula=0; wela=0; lcden=0; write_comm(0x38); write_comm(0x0c); write_comm(0x06); write_comm(0x01); write_comm(0x80); for(num=0;num<15;num++) { write_date(table[num]); delay(5); } write_comm(0x80+0x40+2); for(num=0;num<9;num++) { write_date(table1[num]); delay(5); } TMOD=0x01; TH0=(65536-50000)/256; TL0=(65536-50000)%256; EA=1; ET0=1; TR0=1; } void write_sfm(uchar address,uchar date) //時(shí)分秒 { uchar shi,ge; shi=date/10; ge=date%10; write_comm(0x80+0x40+address); write_date(0x30+shi); write_date(0x30+ge); } void write_nyr(uchar address,uchar date) //年月日 { char shi,ge; shi=date/10; ge=date%10; write_comm(0x80+address); write_date(0x30+shi); write_date(0x30+ge); } void write_week(char week) { write_comm(0x80+12); switch(week) { case 1: write_date('M'); delay(5); write_date('O'); delay(5); write_date('N'); break; case 2: write_date('T'); delay(5); write_date('U'); delay(5); write_date('E'); break; case 3: write_date('W'); delay(5); write_date('E'); delay(5); write_date('D'); break; case 4: write_date('T'); delay(5); write_date('H'); delay(5); write_date('U'); break; case 5: write_date('F'); delay(5); write_date('R'); delay(5); write_date('T'); break; case 6: write_date('S'); delay(5); write_date('A'); delay(5); write_date('T'); break; case 7: write_date('S'); delay(5); write_date('U'); delay(5); write_date('N'); break; } } void keyscan() { rd=0; s1=1; if(s1==0) { delay(5); if(s1==0) { while(!s1); s1num++; if(s1num==1) { TR0=0; write_comm(0x0f); write_comm(0x80+0x40+9); } if(s1num==2) { write_comm(0x80+0x40+6); } if(s1num==3) { write_comm(0x80+0x40+3); } if(s1num==4) { write_comm(0x80+12); } if(s1num==5) { write_comm(0x80+9); } if(s1num==6) { write_comm(0x80+6); } if(s1num==7) { write_comm(0x80+3); } if(s1num==8) { s1num=0; write_comm(0x0c); TR0=1; } } } if(!s1num==0) { if(s2==0) { delay(5); if(s2==0) { if(s1num==1) //判斷地址指針位置 { miao++; if(miao==60) miao=0; write_sfm(9,miao); write_comm(0x80+0x40+9); } if(s1num==2) { fen++; if(fen==60) fen=0; write_sfm(6,fen); write_comm(0x80+0x40+6); } if(s1num==3) { shi++; if(shi==24) shi=0; write_sfm(3,shi); write_comm(0x80+0x40+3); } if(s1num==4) { week++; if(week==8) week=1; write_week(week); write_comm(0x80+12); } if(s1num==5) { ri++; if(ri==32) { ri=1; } write_nyr(9,ri); write_comm(0x80+9); } if(s1num==6) { yue++; if(yue==13) yue=1; write_nyr(6,yue); write_comm(0x80+6); } if(s1num==7) { nian++; if(nian==100) nian=1; write_nyr(3,nian); write_comm(0x80+3); } while(!s2); } } if(s3==0) { delay(5); if(s3==0) { if(s1num==1) { miao--; if(miao==-1) miao=59; write_sfm(9,miao); write_comm(0x80+0x40+9); } if(s1num==2) { fen--; if(fen==-1) fen=59; write_sfm(6,fen); write_comm(0x80+0x40+6); } if(s1num==3) { shi--; if(shi==-1) shi=23; write_sfm(3,shi); write_comm(0x80+0x40+3); } if(s1num==4) { week--; if(week==0) week=7; write_week(week); write_comm(0x80+12); } if(s1num==5) { ri--; if(ri==0) ri=31; write_nyr(9,ri); write_comm(0x80+9); } if(s1num==6) { yue--; if(yue==0) yue=12; write_nyr(6,yue); write_comm(0x80+6); } if(s1num==7) { nian--; if(nian==0) nian=100; write_nyr(3,nian); write_comm(0x80+3); } while(!s3); } } } } void main() { init(); while(1) { keyscan(); } } void timer0() interrupt 1 { TH0=(65536-50000)/256; TL0=(65536-50000)%256; t0++; if(t0==18) { t0=0; miao++; if(miao==60) { miao=0; fen++; if(fen==60) { fen=0; shi++; if(shi==24) { shi=0; ri++; if(ri==32) { ri=1; yue++; if(yue==13) { yue=1; nian++; if(nian==100) { nian=1; } write_nyr(3,nian); } write_nyr(6,yue); } write_nyr(9,ri); week++; if(week==8) { week=1; } } write_sfm(3,shi); } write_sfm(6,fen); } write_sfm(9,miao); } } |
歡迎光臨 (http://www.torrancerestoration.com/bbs/) | Powered by Discuz! X3.1 |