程序如下,按下into0鍵后顯示情況如圖(附件)
#include<reg52.h> #include<51hei.h> #define uchar unsigned char #define uint unsigned int uchar code table1[]=" 2012-04-23 TUR"; uchar code table2[]=" 00:00:00"; sbit duan=P2^6; sbit wei=P2^7; sbit lcdrs=P3^5; sbit lcden=P3^4; //sbit key=P3^7; sbit key1=P3^2; sbit key2=P3^6; sbit key3=P3^7; uchar count,shi,fen,miao,keynum;
void delay(uint z) { uint x,y; for(x=z;x>0;x--) for(y=110;y>0;y--); }
void write_cmd(uchar cmd) { lcdrs=0; // lcden=0; P0=cmd; delay(5); lcden=1; delay(5); lcden=0; }
void write_dat(uchar dat) { lcdrs=1; // lcden=0; P0=dat; delay(5); lcden=1; delay(5); lcden=0; }
void init() { uchar num; guandz(); guanled(); duan=0; wei=0; lcden=0; keynum=0; // miao=59; // fen=58; // shi=23; write_cmd(0x38); write_cmd(0x0c); write_cmd(0x06); write_cmd(0x01); write_cmd(0x80); for(num=0;num<15;num++) { write_dat(table1[num]); delay(20); } write_cmd(0x80+40); for(num=0;num<12;num++) { write_dat(table2[num]); delay(20); } TMOD=0X01; TH0=(65536-50000)/256; TL0=(65536-50000)%256; EA=1; ET0=1; TR0=1; }
void write_sfm(uchar add,uchar dat) { uchar shi,ge; shi=dat/10; ge=dat%10; write_cmd(0x80+0x40+add); write_dat(0x30+shi); write_dat(0x30+ge); }
void keyscan() { // key=0; if(key1==0) { delay(5); if(key1==0) { keynum++; while(!key1); if(keynum==1) { TR0=0; write_cmd(0x80+0x40+11); write_cmd(0x0f); } if(keynum==2) { write_cmd(0x80+0x40+8); } if(keynum==3) { write_cmd(0x80+0x40+5); } if(keynum==4) { keynum=0; write_cmd(0x0c); TR0=1; } } } }
void main() { init();
while(1) { keyscan(); 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); } }
void timer0() interrupt 1 { TH0=(65536-50000)/256; TL0=(65536-50000)%256; count++; } |