工业控制 | 能源技术 | 汽车电子 | 通信网络 | 安防监控 | 智能电网 | 移动手持 | 无线技术 | 家用电器 | 数字广播 | 消费电子 | 应用软件 | 其他方案

电路设计->控制电路图->温控电路图->一个液晶显示的数字式电脑温度计

一个液晶显示的数字式电脑温度计

作者:dolphin时间:2011-05-04

液晶显示器分很多种类,按显示方式可分为段式,行点阵式和全点阵式。
段式与数码管类似,行点阵式一般是英文字符,全点阵式可显示任何信息,
如汉字、图形、图表等。这里我们介绍一种八段式四位LCD显示器,该显
示器内置驱动器,串行数据传送,使用非常方便。原理图如下图:


下图是长沙太阳人科技开发有限公司生产的4位带串行接口的液晶显示模块SMS0403
的外部引线简图:


有关该模块的具体参数,请查看该公司网站。此例中使用的温度传感器
为美国DALLAS公司生产的单总线式数字温度传感器。该传感器本站有其
详细的资料可供下载。此例稍加改动,即可做成温控器。  
  LED显示电脑电子钟
本例介绍一种用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) bit at (0b3h) register; /* p33,p34,p35 */
declare (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 '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 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 TO 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,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:procedure;
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 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;



评论

技术专区