单片机应用实例

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

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

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

资源描述

单片机应用实例:一个液晶显示的数字式电脑温度计液晶显示器分很多种类,按显示方式可分为段式,行点阵式和全点阵式。段式与数码管类似,行点阵式一般是英文字符,全点阵式可显示任何信息,如汉字、图形、图表等。这里我们介绍一种八段式四位LCD显示器,该显示器内置驱动器,串行数据传送,使用非常方便。原理图如下图:下图是长沙太阳人科技开发有限公司生产的4位带串行接口的液晶显示模块SMS0403的外部引线简图:有关该模块的具体参数,请查看该公司网站。此例中使用的温度传感器为美国DALLAS公司生产的单总线式数字温度传感器。该传感器本站有其详细的资料可供下载。此例稍加改动,即可做成温控器。下载驱动该模块的源程序LCD.PLM例2:savedfromurl=(0044)~jlsplhd/cxyd7.htmLED显示电脑电子钟本例介绍一种用LED制作的电脑电子钟(电脑万年历)。其制作完成装潢后的照片如下图:上图中,年、月、日及时间选用的是1.2寸共阳数码管,星期选用的是2.3寸数码管,温度选用的是0.5寸数码管,也可根据个人的爱好选用不同规格的数码管。原理图如下图所示:上图中,CPU选用的是AT89C2051,时钟芯片选用的是Dallas公司的DS1302,温度传感器选用的是Dallas公司的数字温度传感器DS1820,显示驱动芯片选用的是德州仪器公司的TPIC6B595,也可选用与其兼容的芯片NC595或国产的AMT9595。整个电子钟用两个键来调节时间和日期。一个是位选键,一个是数字调节键。按一下位选键,头两位数字开始闪动,进入设定调节状态,此时按数字调节键,当前闪动位的数字就可改变。全部参数调节完后,五秒钟内没有任何键按下,则数字停止闪动,退出设定调节状态。源程序清单如下(无温度显示程序):start:do;$include(reg51.dcl)declare(sclk,io,rst)bitat(0b3h)register;/*p33,p34,p35*/declare(command,data,n,temp1,num)byte;declarea(9)byte;declareab(6)byte;declareaco(11)byteconstant(0fdh,60h,0dah,0f2h,66h,0b6h,0beh,0e0h,0feh,0f6h,00h);declareweek(11)byteconstant(0edh,028h,0dch,7ch,39h,75h,0f5h,2ch,0fdh,7dh,00h);declaredaliterally'p15',clkliterally'p16',aleliterally'p17',mkliterally'p11',skliterally'p12';clear:procedure;sclk=0;io=0;rst=0;endclear;send1302:procedure(comm);declare(i,comm)byte;doi=0to7;comm=scr(comm,1);io=cy;calltime(1);sclk=0;calltime(1);sclk=1;end;endsend1302;wbyt1:procedure(com,dat);/*字节写过程*/declare(com,dat)byte;callclear;rst=1;callsend1302(com);callsend1302(dat);callclear;endwbyt1;wbyt8:procedure;/*时钟多字节突发模式写过程*/declarejbyte;callclear;a(7)=A(6);a(6)=a(0);rst=1;callsend1302(command);doj=1to8;callsend1302(a(j));end;callclear;endwbyt8;RBYT1:PROCEDURE;DECLAREIBYTE;CALLCLEAR;RST=1;callsend1302(0c1h);IO=1;DOI=0TO7;SCLK=1;SCLK=0;CY=IO;N=SCR(N,1);END;A(8)=N;CALLCLEAR;ENDRBYT1;send595:procedure;declarekbyte;dok=0to7;data=scr(data,1);da=cy;clk=1;clk=0;end;endsend595;send595_1:procedure;declarekbyte;dok=0to7;data=scr(data,1);da1=cy;clk1=1;clk1=0;end;endsend595_1;rb1:procedure(abc,j);DECLARE(I,j,abc)BYTE;CALLCLEAR;RST=1;callsend1302(abc);IO=1;DOI=0TO7;SCLK=1;SCLK=0;CY=IO;N=SCR(N,1);END;ab(j)=N;ab(j)=dec(ab(j));CALLCLEAR;endrb1;rbyt6:procedure;callrb1(0f1h,0);callrb1(0f3h,1);callrb1(0f5h,2);callrb1(0f7h,3);callrb1(0f9h,4);callrb1(0fbh,5);callrb1(0fdh,6);endrbyt6;wbyt6:procedure;callwbyt1(8eh,0);/*writeenable*/callwbyt1(0f0h,ab(0));callwbyt1(0f2h,ab(1));callwbyt1(0f4h,ab(2));callwbyt1(0f6h,ab(3));callwbyt1(0f8h,ab(4));callwbyt1(0fah,ab(5));callwbyt1(0fch,ab(6));callwbyt1(8eh,80h);/*writedisable*/endwbyt6;rbyt8:procedure;/*时钟多字节突发模式读过程*/declare(i,j)byte;callclear;rst=1;callsend1302(command);io=1;doj=1to8;doi=0to7;sclk=1;calltime(1);sclk=0;cy=io;n=scr(n,1);end;a(j)=n;end;callclear;a(0)=a(6);a(6)=A(7);a(0)=a(0)and0fh;ifa(0)6thena(0)=0;CALLRBYT1;if(a(1)=0anda(2)=0anda(3)=0)thendo;donum=0to35;calltime(250);end;temp1=1;end;iftemp1=1thendo;temp1=0;ab(4)=ab(4)+1;ifab(4)99hthendo;ab(4)=0;ab(5)=ab(5)+1;ifab(5)99hthenab(5)=0;end;callwbyt6;end;endrbyt8;display:procedure;/*jieya,yima,fasong*/declare(i,n,m)byte;n=a(0)and0fh;/*sendweek*/data=week(n);callsend595;n=a(4);/*senddate*/n=nand0fh;data=aco(n);callsend595;n=a(4);n=shr(n,4);data=aco(n);callsend595;doi=1to3;/*sendsecond,minute,hour*/n=a(i);n=nand0fh;data=aco(n);callsend595;n=a(i);n=shr(n,4);data=aco(n);callsend595;end;doi=5to6;/*sendmonth,year*/n=a(i);n=nand0fh;data=aco(n);callsend595;n=a(i);n=shr(n,4);data=aco(n);callsend595;end;n=a(8);/*send19or20*/n=nand0fh;data=aco(n);callsend595;n=a(8);n=shr(n,4);data=aco(n);callsend595;dom=0to5;n=ab(m);n=nand0fh;data=aco(n);callsend595_1;n=ab(m);n=shr(n,4);data=aco(n);callsend595_1;end;ale=0;ale=1;enddisplay;beginset:procedure;a(0)=06h;a(1)=58h;a(2)=59h;a(3)=23h;a(4)=30h;a(5)=06h;a(6)=97h;a(7)=00;a(8)=19h;/*setdate/time(1997,7,1,8:00:00,week3)*/callwbyt1(8eh,0);/*writeenable*/callwbyt1(80h,00h);/*startcolock*/callwbyt1(0beh,0abh);/*两个二极管与8K电阻串联充电*/command=0beh;/*writecolock/date*/callwbyt8;callwbyt1(0c0h,a(8));callwbyt1(8eh,80h);/*setwriteprotectbit*/endbeginset;key:procedure;declare(i,time1,k1,tem)byte;calltime(100);k1=7;time1=30;ifmk=0thendo;dowhiletime10;week:ifk1=0thendo;doi=0to5;/*callhz(a(0));*/end;doi=0to3;/*callhz0;*/end;end;tem=a(k1);ifk1=7thentem=a(8);a(k1)=0aah;ifk1=7thena(8)=0aah;calldisplay;calltime(254);calltime(254);a(k1)=tem;ifk1=7thena(8)=tem;calldisplay;calltime(254);calltime(254);calltime(254);time1=time1-1;ifmk=0thendo;calltime(100);/*MODKEYPROCESS*/TIME1=30;IFMK=0THENDO;k1=k1-1;DOWHILEK1=0FFH;K1=7;END;END;end;IFSK=0THENDO;CALLTIME(100);/*SETKEYPROCESS*/TIME1=30;IFSK=0THENDO;tem=tem+1;tem=dec(tem);DOCASEK1;DOWHILEtem=7;/*week*/tem=0;END;DOWHILEtem=60H;/*scond*/tem=0;END;DOWHILEtem=60H;/*minute*/tem=0;END;DOWHILEtem=24H;/*hour*/tem=0;END;DOWHILEtem=32H;/*date*/tem=1;END;DOWHILEtem=13H;/*month*/tem=1;END;DOwhiletem=100h;/*YEAR*/tem=00;END;DOWHILETEM=21H;tem=19H;END;END;A(K1)=tem;ifk1=7thena(8)=tem;END;END;END;END;endkey;main$program:mk=1;sk=1;temp1=0;num=0;p32=1;ifsk=0thencallbeginset;clk=0;da=0;ale=1;loop:dowhilemk=1;ifa(0)6thena(0)=0;comma

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

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

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

×
保存成功