基于51单片机的1602液晶频率计设计(Proteus仿真图和程序)

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

基于51单片机的1602液晶频率计设计一、Proteus仿真图:二、程序代码//最大测量65536Hz的频率计//原理:T0定时1S,T1计数#includeREG51.H#includeINTRINS.H#defineucharunsignedchar#defineuintunsignedintuintcount=0;uintnm=0;ucharFw,Fq,Fb,Fs,Fg;#defineDataPortP0sbitLCM_RS=P2^0;sbitLCM_RW=P2^1;sbitLCM_EN=P2^2;ucharcodestr0[]={-Testfrequency-};ucharcodestr1[]={F=00000Hz};//ucharcodestr2[]={};/*******************************/voiddelay(unsignedintk){unsignedinti,j;for(i=0;ik;i++){for(j=0;j121;j++){;}}}//=================================================///*函数名:voidWaitForEnable(void)作用:检测忙碌信号*///================================================//voidWaitForEnable(void){DataPort=0xff;LCM_RS=0;LCM_RW=1;_nop_();LCM_EN=1;_nop_();_nop_();//while(DataPort&0x80);delay(5);LCM_EN=0;}//==========================================================///*函数名:voidWriteCommandLCM(ucharCMD,ucharAttribc)作用:写命令到LCM*///==========================================================//voidWriteCommandLCM(ucharCMD,ucharAttribc){if(Attribc)WaitForEnable();LCM_RS=0;LCM_RW=0;_nop_();DataPort=CMD;_nop_();LCM_EN=1;_nop_();_nop_();LCM_EN=0;}//=========================================================///*函数名:voidWriteDataLCM(uchardataW)作用:写数据*///=========================================================//voidWriteDataLCM(uchardataW){WaitForEnable();LCM_RS=1;LCM_RW=0;_nop_();DataPort=dataW;_nop_();LCM_EN=1;_nop_();_nop_();LCM_EN=0;}//=========================================================///*函数名:voidInitLcd()作用:LCM初始化*///=========================================================//voidInitLcd(){WriteCommandLCM(0x38,1);WriteCommandLCM(0x08,1);WriteCommandLCM(0x01,1);WriteCommandLCM(0x06,1);WriteCommandLCM(0x0c,1);}//=========================================================///*函数名:voidDisplayOneChar(ucharX,ucharY,ucharDData)作用:显示指定坐标的一个字符*///=========================================================//voidDisplayOneChar(ucharX,ucharY,ucharDData){Y&=1;X&=15;if(Y)X|=0x40;X|=0x80;WriteCommandLCM(X,0);WriteDataLCM(DData);}//============================================================///*函数名:voidDisplayListChar(ucharX,ucharY,ucharcode*DData作用:显示指定坐标的一串字符*///============================================================//voidDisplayListChar(ucharX,ucharY,ucharcode*DData){ucharListLength=0;Y&=0x1;X&=0xF;while(X=15){DisplayOneChar(X,Y,DData[ListLength]);ListLength++;X++;}}//============================================================///*函数名:voidmain(void)作用:主函数*///============================================================////============================================================///*函数名:voiddisplay()作用:显示函数*///============================================================//voiddisplay(){Fw=count/10000+0x30;Fq=count/1000%10+0x30;Fb=count/100%10+0x30;Fs=count/10%10+0x30;Fg=count%10+0x30;DisplayOneChar(2,1,Fw);DisplayOneChar(3,1,Fq);DisplayOneChar(4,1,Fb);DisplayOneChar(5,1,Fs);DisplayOneChar(6,1,Fg);}voidInitTime(void){TMOD=0x51;//T0为定时器工作于方式1,T1为计数器工作于方式1TH0=0x4C;//定时器50ms赋高8初值,12M晶振TL0=0x00;//定时器50ms赋低8初值,12M晶振TR0=1;//开定时器1TH1=0;//计数器赋高8初值初值TL1=0;//计数器赋低8初值TR1=1;//开计数器0ET0=1;EA=1;}voidtimeo(void)interrupt1{TH0=0x4C;//定时器50ms赋高8初值TL0=0x00;//定时器50ms赋低8初值nm=nm+1;if(nm==10){TR1=0;//关闭T1定时器,定时1S完成TR0=0;//关闭T0}}//============================================================///*函数名:voidmain(void)作用:主函数*///============================================================//voidmain(void){chari;uinttemp,temp1;delay(500);InitLcd();//LCM初始化设置InitTime();for(i=15;i=0;i--){DisplayListChar(i,0,str0);//显示第一行字符DisplayListChar(i,1,str1);//显示第二行字符delay(100);}while(1){if(nm==10)//定时10*50MS=500ms{temp=TL1;temp1=TH1;count=2*(temp1*256+temp);//定时2乘以500ms=1000msdisplay();TH1=0;//计数器赋高8初值初值TL1=0;//计数器赋低8初值nm=0;TR1=1;TR0=1;}}}

1 / 6
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功