Proteus电路图:
元器件: Atmel 89c51 LM032L液晶屏 Button
仿真文件.rar
(46.4 KB, 下载次数: 29)
C程序代码:
/*电子时钟 1062液晶来显示*/
#include<reg52.h> #define uchar unsigned char #define uint unsigned int sbit LCD_EN=P3^4; sbit LCD_RS=P3^5; sbit s1=P3^0; sbit s2=P3^1; sbit s3=P3^2; sbit rd=P3^7; uchar count,s1num; char miao,shi,fen; uchar code table[]=" 2010-06-25 FIR"; uchar code table1[]=" 20:25:00";
void delay(uint z) { uint x,y; for(x=z;x>0;x--) for(y=110;y>0;y--); }
void write_com(uchar com) { LCD_RS=0; P1=com; delay(5); LCD_EN=1; delay(5); LCD_EN=0; }
void write_data(uchar date) { LCD_RS=1; P1=date; delay(5); LCD_EN=1; delay(5); LCD_EN=0; }
void init() { uchar num; LCD_EN=0; write_com(0x38); write_com(0x0f); write_com(0x06); write_com(0x01); write_com(0x80); for(num=0;num<15;num++) { write_data(table[num]); delay(5); } write_com(0x80+0x40); for(num=0;num<12;num++) { write_data(table1[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+0x40+add); write_data(0x30+shi); write_data(0x30+ge); }
void keyscan() { rd=0; if(s1==0) { delay(5); if(s1==0) { s1num++; while(!s1); 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(s2==0) { delay(5); if(s2==0) { while(!s2); 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(s3==0) { delay(5); if(s3==0) { while(!s3); if(s1num==1) {
miao--; if(miao==-1) miao=59; write_sfm(10,miao); write_com(0x80+0x40+10); } if(s1num==2) { fen--; if(fen==-1) fen=59; write_sfm(7,fen); write_com(0x80+0x40+7); } if(s1num==3) { shi--; if(shi==-1) shi=23; write_sfm(4,shi); write_com(0x80+0x40+4); } } } } }
void main() { init(); while(1) { keyscan();
}
}
void timer0() interrupt 1 { TH0=(65536-50000)/256; TL0=(65536-50000)%256; count++; if(count==18) { 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);
} }
|