中国IEEE
关于我们 | 会员登陆 | 收藏本站 | 留 言 薄
 

 | 网站首页 | 电子知识 | 单片机知识 | 电路设计 | 微电子技术 | SCADA系统 | 资源下载 | 给我留言 | 谷歌商城 | 视频教程 | ieee | 
热门搜索关键字: 单片机教程 | 三极管 | 二极管 |  C语言汇编语言SCADA元器件模拟电子 |
cnieee.com baidu
栏目导航  
栏目更新推荐  
·单片机实现数据远程监控
·8051单片机C语言数据采集程序
·51单片机C语言学习
·自制51单片机试验板
·有目的的去学习
·用单片机实现高速数据采集
·单片机控制的模拟开关灯实验
·最常应用的流水闪烁灯实验
点击TOP(10)  
·自制51单片机试验板
图片文章  

单片机实现数据远程…

51单片机C语言学习

自制51单片机试验板

用单片机实现高速数…
 
您现在的位置: 中国IEEE中国电气电子工程师网 >> 单片机知识 >> 正文

一个液晶显示的数字式电脑温度计
文章来源:不详 点击数: 更新时间:2008-5-6 【字体:
(欢迎光临中国IEEE,希望本文能对您有所帮助http://www.cnieee.com)


相关文章:

用单片机制作一个数字电压表
做一个数字式的电子钟﹝★﹞
设计制作一个99秒马表
一个家庭电视台

  • 上一个文章:

  • 下一个文章:
  • 发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
     
    关于〖一个液晶显示的数字式电脑温度计〗的最新评论:

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

    段式与数码管类似,行点阵式一般是英文字符,全点阵式可显示任何信息,

    如汉字、图形、图表等。这里我们介绍一种八段式四位LCD显示器,该显

    示器内置驱动器,串行数据传送,使用非常方便。原理图如下图:

    cxyd6.gif (5228 bytes)

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

    的外部引线简图:

    cxyd61.gif (5370 bytes)

    有关该模块的具体参数,请查看该公司网站。此例中使用的温度传感器

    为美国DALLAS公司生产的单总线式数字温度传感器。该传感器本站有其

    详细的资料可供下载。此例稍加改动,即可做成温控器。

    下载驱动该模块的源程序LCD.PLM

     

    例2:

     

    saved from url=(0044)http://go18.163.com/_NTES/~jlsplhd/cxyd7.htm             LED显示电脑电子钟

    本例介绍一种用LED制作的电脑电子钟(电脑万年历)。其制作

    完成装潢后的照片如下图:

    dzz.jpg (34085 bytes)

    上图中,年、月、日及时间选用的是1.2寸共阳数码管,星期选用

    的是2.3寸数码管,温度选用的是0.5寸数码管,也可根据个人的爱好

    选用不同规格的数码管。原理图如下图所示:

    clk.gif (8068 bytes)

    上图中,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;
      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=1 then
    	  do;
    		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 send595;
    	  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 send595;
      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)=23h;
    	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);  /* set write protect bit */
    end beginset;
    key:procedure;
    	declare (i,time1,k1,tem) byte;
    	call time(100);
    	k1=7;time1=30;
    	if mk=0 then
    	  do;
    	do while time1>0;
    week:       if k1=0 then
    		  do;  
    		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)=0aah;
    		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 then
    		 do;call time(100); /*MOD KEY PROCESS*/
    		   TIME1=30;
    		   IF MK=0 THEN
    		DO;
    		  k1=k1-1;
    		 DO WHILE K1=0FFH;
    		  K1=7;
    		 END;
    		END;
    		 end;
    	 IF SK=0 THEN
    		 DO;CALL TIME(100);  /*SET KEY PROCESS*/
    		   TIME1=30;
    		   IF SK=0 THEN
    		   DO;
    		tem=tem+1;
    		tem=dec(tem);
    		DO CASE K1;
    			  DO WHILE tem=7;/*week*/
    	              	     tem=0;
    			  END;
    			  DO WHILE tem=60H;/*scond*/
    	                      tem=0;
    			  END;
    			  DO WHILE tem=60H;/*minute*/
    			        tem=0;
    			  END;
    			  DO WHILE tem=24H;/*hour*/
    			     tem=0;
    			  END;
    			  DO WHILE tem=32H;/*date*/
    			     tem=1;
    			  END;
    			  DO WHILE tem=13H;/*month*/
    			     tem=1;
    			  END;
    			  DO while tem=100h;   /*  YEAR */
    			     tem=00;
    			  END;
    			  DO WHILE TEM>=21H;
    			     tem=19H;
    			  END;
    		   END;
    		   A(K1)=tem;
    		   if k1=7 then a(8)=tem;
    		END;
    	  END;
    	   END;
    	 END;
    end key;
    main$program:
    mk=1;sk=1;temp1=0;num=0;p32=1;
    if sk=0 then call beginset;
    clk=0;da=0;ale=1;
    loop:
      do while mk=1 ;
    	 if a(0)>6 then a(0)=0; 
    	 command=0bfh; 
    	 call rbyt8;
    	 call display;
        do while mk=0;
    	call key;
    	call wbyt1(8eh,0);
    	command=0beh;
    	call wbyt8;
    	call wbyt1(0C0H,A(8));
    	call wbyt1(8eh,80h);
       end;
     end;
    goto loop;
    end start;
    
    
    例3:

    saved from url=(0044)http://go18.163.com/_NTES/~jlsplhd/cxyd5.htm              一个6位LED、4个按键的显示板

       按键和显示是单片机系统的基本输入输出部件,下面介绍一

    个由74LS164驱动的6位数码管和4个按键组成的通用仪表面板。

    原理图如下图所示:

    cxyd51.gif (7008 bytes)

    其线路板图如下图所示:

    cxyd5.gif (16989 bytes)

    注:此板中多了三个LED发光管,这三个发光管是分别接在IC4,IC5,IC6 的13脚(Q7,数据

    串出脚)上的。

    | 设为首页 | 加入收藏 | 联系站长 | 友情链接 | 版权申明网站地图 | 名站导航 | 管理登录 | 
    本站资源部分来自互联网,如侵犯您的权利,我们将予以删除  鲁ICP备08006092号
    本站欢迎同类网站做友情链接,QQ留言
    中国IEEE 中国电气电子工程师网 版权所有