单片机应用实例一个液晶显示的数字式电脑温度计

上传人:xzh****18 文档编号:35445099 上传时间:2018-03-15 格式:DOC 页数:14 大小:116.50KB
返回 下载 相关 举报
单片机应用实例一个液晶显示的数字式电脑温度计_第1页
第1页 / 共14页
单片机应用实例一个液晶显示的数字式电脑温度计_第2页
第2页 / 共14页
单片机应用实例一个液晶显示的数字式电脑温度计_第3页
第3页 / 共14页
单片机应用实例一个液晶显示的数字式电脑温度计_第4页
第4页 / 共14页
单片机应用实例一个液晶显示的数字式电脑温度计_第5页
第5页 / 共14页
点击查看更多>>
资源描述

《单片机应用实例一个液晶显示的数字式电脑温度计》由会员分享,可在线阅读,更多相关《单片机应用实例一个液晶显示的数字式电脑温度计(14页珍藏版)》请在金锄头文库上搜索。

1、液晶显示器分很多种类,按显示方式可分为段式,行点阵式和全点阵式。段式与数码管类似,行点阵式一般是英文字符,全点阵式可显示任何信息, 如汉字、图形、图表等。这里我们介绍一种八段式四位 LCD 显示器,该显 示器内置驱动器,串行数据传送,使用非常方便。原理图如下图: 下图是长沙太阳人科技开发有限公司生产的 4 位带串行接口的液晶显示模块 SMS0403 的外部引线简图: 广告:广告:错误!嵌入对象无效。错误!嵌入对象无效。有关该模块的具体参数,请查看该公司网站。此例中使用的温度传感器 为美国 DALLAS 公司生产的单总线式数字温度传感器。该传感器本站有其 详细的资料可供下载。此例稍加改动,即可做

2、成温控器。 下载驱动该模块的源程序 LCD.PLM 例 2: saved from url=(0044)http:/ LEDLED 显示电脑电子钟显示电脑电子钟 本例介绍一种用 LED 制作的电脑电子钟(电脑万年历)。其制作 完成装潢后的照片如下图: 上图中,年、月、日及时间选用的是 1.2 寸共阳数码管,星期选用 的是 2.3 寸数码管,温度选用的是 0.5 寸数码管,也可根据个人的爱好 选用不同规格的数码管。原理图如下图所示: 上图中,CPU 选用的是 AT89C2051,时钟芯片选用的是 Dallas 公司的 DS1302, 温度传感器选用的是 Dallas 公司的数字温度传感器 DS1

3、820,显示驱动芯片 选用的是德州仪器公司的 TPIC6B595,也可选用与其兼容的芯片 NC595 或 国产的 AMT9595。整个电子钟用两个键来调节时间和日期。一个是位选 键,一个是数字调节键。按一下位选键,头两位数字开始闪动,进入设 定调节状态,此时按数字调节键,当前闪动位的数字就可改变。全部参 数调节完后,五秒钟内没有任何键按下,则数字停止闪动,退出设定调 节状态。源程序清单如下(无温度显示程序): start:do;$include(reg51.dcl)declare (sclk,io,rst) bit at (0b3h) register; /* p33,p34,p35 */de

4、clare (command,data,n,temp1,num) byte;declare a(9) byte;declare ab(6) byte;declare aco(11) byte constant (0fdh,60h,0dah,0f2h,66h,0b6h,0beh, 0e0h,0feh,0f6h,00h); declare week(11) byte constant (0edh,028h,0dch,7ch,39h,75h,0f5h,2ch,0fdh,7dh,00h);declare da literally p15,clk literally p16,ale literally

5、p17,mk literally p11,sk literally p12;clear:procedure;sclk=0;io=0;rst=0;end clear;send1302:procedure(comm);declare (i,comm) byte;do i=0 to 7;comm=scr(comm,1);io=cy;call time(1);sclk=0;call time(1);sclk=1;end;end send1302; wbyt1:procedure(com,dat);/*字节写过程*/declare (com,dat) byte;call clear;rst=1;call

6、 send1302(com);call send1302(dat);call clear;end wbyt1; wbyt8:procedure;/*时钟多字节突发模式写过程*/declare j byte;call clear;a(7)=A(6);a(6)=a(0);rst=1;call send1302(command);do j=1 to 8;call send1302(a(j);end;call clear;end wbyt8;RBYT1:PROCEDURE;DECLARE I BYTE;CALL CLEAR;RST=1;call send1302(0c1h);IO=1;DO I=0 T

7、O 7;SCLK=1;SCLK=0;CY=IO;N=SCR(N,1);END;A(8)=N;CALL CLEAR;END RBYT1;send595:procedure;declare k byte;do k=0 to 7;data=scr(data,1);da=cy;clk=1;clk=0;end;end send595;send595_1:procedure;declare k byte;do k=0 to 7;data=scr(data,1);da1=cy;clk1=1;clk1=0;end;end send595_1;rb1:procedure(abc,j);DECLARE (I,j,

8、abc) BYTE;CALL CLEAR;RST=1;call send1302(abc);IO=1;DO I=0 TO 7;SCLK=1;SCLK=0;CY=IO;N=SCR(N,1);END;ab(j)=N;ab(j)=dec(ab(j);CALL CLEAR;end rb1;rbyt6:procedure;call rb1(0f1h,0);call rb1(0f3h,1);call rb1(0f5h,2);call rb1(0f7h,3);call rb1(0f9h,4);call rb1(0fbh,5);call rb1(0fdh,6);end rbyt6;wbyt6:procedur

9、e;call wbyt1(8eh,0); /* write enable */call wbyt1(0f0h,ab(0);call wbyt1(0f2h,ab(1);call wbyt1(0f4h,ab(2);call wbyt1(0f6h,ab(3);call wbyt1(0f8h,ab(4);call wbyt1(0fah,ab(5);call wbyt1(0fch,ab(6);call wbyt1(8eh,80h); /* write disable */end wbyt6; rbyt8:procedure;/*时钟多字节突发模式读过程*/declare (i,j) byte;call

10、clear;rst=1;call send1302(command);io=1;do j=1 to 8;do i=0 to 7;sclk=1;call time(1);sclk=0;cy=io;n=scr(n,1);end;a(j)=n;end;call clear;a(0)=a(6);a(6)=A(7);a(0)=a(0) and 0fh;if a(0)6 then a(0)=0;CALL RBYT1;if (a(1)=0 and a(2)=0 and a(3)=0) then do;do num=0 to 35;call time(250);end;temp1=1;end;if temp1

11、=1 thendo;temp1=0;ab(4)=ab(4)+1;if ab(4)99h then do;ab(4)=0;ab(5)=ab(5)+1;if ab(5)99h then ab(5)=0;end;call wbyt6;end;end rbyt8;display:procedure; /*jieya,yima,fasong*/declare (i,n,m) byte;n=a(0) and 0fh; /* send week */data=week(n);call send595;n=a(4); /* send date */n=n and 0fh;data=aco(n);call se

12、nd595;n=a(4);n=shr(n,4);data=aco(n);call send595;do i=1 to 3; /* send second,minute,hour */n=a(i);n=n and 0fh;data=aco(n);call send595;n=a(i);n=shr(n,4);data=aco(n);call send595;end;do i=5 to 6; /* send month,year */n=a(i);n=n and 0fh;data=aco(n);call send595;n=a(i);n=shr(n,4);data=aco(n);call send5

13、95;end;n=a(8); /* send 19 or 20 */n=n and 0fh;data=aco(n);call send595;n=a(8);n=shr(n,4);data=aco(n);call send595;do m=0 to 5;n=ab(m);n=n and 0fh;data=aco(n);call send595_1;n=ab(m);n=shr(n,4);data=aco(n);call send595_1;end; ale=0;ale=1;end display;beginset:procedure;a(0)=06h;a(1)=58h;a(2)=59h;a(3)=2

14、3h;a(4)=30h;a(5)=06h;a(6)=97h;a(7)=00;a(8)=19h; /* set date/time (1997,7,1,8:00:00,week 3) */call wbyt1(8eh,0); /* write enable*/call wbyt1(80h,00h);/* start colock */ call wbyt1(0beh,0abh);/*两个二极管与 8K 电阻串联充电*/command=0beh; /* write colock/date */call wbyt8;call wbyt1(0c0h,a(8);call wbyt1(8eh,80h);

15、/* set write protect bit */end beginset;key:procedure;declare (i,time1,k1,tem) byte;call time(100);k1=7;time1=30;if mk=0 thendo;do while time10;week: if k1=0 thendo; do i=0 to 5;/* call hz(a(0); */end;do i=0 to 3;/* call hz0; */end;end;tem=a(k1);if k1=7 then tem=a(8);a(k1)=0aah;if k1=7 then a(8)=0aa

16、h;call display;call time(254);call time (254);a(k1)=tem;if k1=7 then a(8)=tem;call display;call time(254);call time(254);call time(254);time1=time1-1;if mk=0 thendo;call time(100); /*MOD KEY PROCESS*/TIME1=30;IF MK=0 THENDO;k1=k1-1;DO WHILE K1=0FFH;K1=7;END;END;end;IF SK=0 THENDO;CALL TIME(100); /*SET KEY PROCESS*/TIME1=30;IF SK=0 THENDO;tem=tem+1;tem=de

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > IT计算机/网络 > 多媒体应用

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号