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

上传人:b****1 文档编号:1716835 上传时间:2023-05-01 格式:DOCX 页数:11 大小:26.61KB
下载 相关 举报
一个液晶显示的数字式电脑温度计.docx_第1页
第1页 / 共11页
一个液晶显示的数字式电脑温度计.docx_第2页
第2页 / 共11页
一个液晶显示的数字式电脑温度计.docx_第3页
第3页 / 共11页
一个液晶显示的数字式电脑温度计.docx_第4页
第4页 / 共11页
一个液晶显示的数字式电脑温度计.docx_第5页
第5页 / 共11页
一个液晶显示的数字式电脑温度计.docx_第6页
第6页 / 共11页
一个液晶显示的数字式电脑温度计.docx_第7页
第7页 / 共11页
一个液晶显示的数字式电脑温度计.docx_第8页
第8页 / 共11页
一个液晶显示的数字式电脑温度计.docx_第9页
第9页 / 共11页
一个液晶显示的数字式电脑温度计.docx_第10页
第10页 / 共11页
一个液晶显示的数字式电脑温度计.docx_第11页
第11页 / 共11页
亲,该文档总共11页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

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

《一个液晶显示的数字式电脑温度计.docx》由会员分享,可在线阅读,更多相关《一个液晶显示的数字式电脑温度计.docx(11页珍藏版)》请在冰点文库上搜索。

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

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

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

文章来源:

遥控网  

  液晶显示器分很多种类,按显示方式可分为段式,行点阵式和全点阵式。

段式与数码管类似,行点阵式一般是英文字符,全点阵式可显示任何信息,如汉字、图形、图表等。

这里我们介绍一种八段式四位LCD显示器,该显示器内置驱动器,串行数据传送,使用非常方便。

原理图如下图:

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

的外部引线简图:

  关该模块的具体参数,请查看该公司网站。

此例中使用的温度传感器为美国DALLAS公司生产的单总线式数字温度传感器。

该传感器本站有其详细的资料可供下载。

此例稍加改动,即可做成温控器。

本例介绍一种用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)then

do;

donum=0to35;

calltime(250);

end;

temp1=1;

end;

iftemp1=1then

do;

temp1=0;

ab(4)=ab(4)+1;

ifab(4)>99hthen

do;

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=0then

do;

dowhiletime1>0;

week:

ifk1=0then

do;

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=0then

do;calltime(100);/*MODKEYPROCESS*/

TIME1=30;

IFMK=0THEN

DO;

k1=k1-1;

DOWHILEK1=0FFH;

K1=7;

END;

END;

end;

IFSK=0THEN

DO;CALLTIME(100);/*SETKEYPROCESS*/

TIME1=30;

IFSK=0THEN

DO;

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;

command=0bfh;

callrbyt8;

calldisplay;

dowhilemk=0;

callkey;

callwbyt1(8eh,0);

command=0beh;

callwbyt8;

callwbyt1(0C0H,A(8));

callwbyt1(8eh,80h);

end;

end;

gotoloop;

endstart;

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 初中教育 > 语文

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2