资源描述:
《C51单片机实现液晶秒表以及简单计算器.doc》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库。
1、电路图比较简单,是一个51最小系统,没有采用总线方式,而简单的连线方式,上有4*4矩阵键盘,一数码管,89S51单片机,串口下载线,数码管显示锁存芯片蜂鸣器1602液晶.因为最近考试太多,刚刚考试完又课程设计,桌子上太混乱,原理图没有找到.所以就先贴上代码.此代码已经调试成功过,可以实现时间的调整.4*4矩阵键盘,第一排前三列是实现小时分钟秒的加.第二排前三列是实现小时分钟秒的减.当然还可以通过设置矩阵键盘的键值,来实现加减乘除四则运算,由数码管显示参与运算的数字以及最终的运算结果.其他的不多说了,等下次我把图贴上,大家勉
2、强可以拿去研究下.其实硬件很简单,不详细说问题也不大的.#include#include#include#include#include#defineucharunsignedchar#defineuintunsignedintuchartemp1;voiddisplayListChar(unsignedcharX,unsignedcharY,ucharDData);uchardispbuf[]={'0','1','2','3','4','5'
3、,'6','7','8','9',':'};ucharsecond; ucharminute;ucharhour;uinttcnt,g;ucharflag;voiddlms(void);ucharkbscan(void);voidShow_Time(void);voiddelay5ms(void); voiddlms(void); voidSettime(ucharverify);//verify在这里为调整的意思voiddelay400ms(void);///#definebusy0x80file://用/于检测LCD状态字中的Bu
4、sy标识///#defineRSaddr0x1000///#defineRWaddr0x2000///#defineCSaddr0x0400#definewc0x8fff#definewd0xdfff#definerc0xbfffvoidwaitLcd() //justwaituntil液晶不忙为止 { chartemp; bitflag=1; while(flag==1) { temp=XBYTE[rc]; if(temp>>7==0)flag=0;
5、 P1=temp; } P1=0xff; } //justwaituntil液晶不忙为止voidWriteCommand_Lcd(bitisCheck,charc) { if(isCheck==1)waitLcd(); XBYTE[wc]=c; }voidwritedata(charc){ waitLcd(); XBYTE[wd]=c;}voidLcdInit() { delay5ms(); delay5
6、ms();delay5ms();WriteCommand_Lcd(0,0x38);//三次显示模式设置,不检测忙信号delay5ms();WriteCommand_Lcd(0,0x38);delay5ms();WriteCommand_Lcd(0,0x38);delay5ms();WriteCommand_Lcd(1,0x38);//显示模式设置,开始要求每次检测忙信号,8位2行5*7WriteCommand_Lcd(1,0x08);//关闭显示WriteCommand_Lcd(1,0x01);//清显示WriteCommand_Lcd(1
7、,0x06);//文字不动,光标右移WriteCommand_Lcd(1,0x0C);//显示开及光标设置 }voiddisplayListChar(unsignedcharX,unsignedcharY,ucharDData) {Y&=0x1;X&=0xF;if(X<=0xF) { Y&=0x1;X&=0xF;if(Y)X
8、=0x40;X
9、=0x80;WriteCommand_Lcd(0,X);writedata(dispbuf[DData]); }}voidShow_Time(unitk){ displayListC
10、har(0,0,hour/10); displayListChar(1,0,hour%10); displayListChar(2,0,10); displayListCh