0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

用LED制作的电脑电子钟

电子设计 来源:xx 2019-02-11 17:23 次阅读

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

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


声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • led
    led
    +关注

    关注

    242

    文章

    23276

    浏览量

    660827
  • 电子钟
    +关注

    关注

    7

    文章

    189

    浏览量

    36944
收藏 人收藏

    评论

    相关推荐

    电子制作:LED流动显示电子钟

    笔者设计制作了一款LED流动显示电子钟,体积小巧,字形美观,且每天有4次闹铃,每次定时时间一到,蜂鸣器响20s,非常实用。
    发表于 03-26 11:13 4138次阅读
    <b class='flag-5'>电子</b><b class='flag-5'>制作</b>:<b class='flag-5'>LED</b>流动显示<b class='flag-5'>电子钟</b>

    LED数字电子钟制作方法

    本文介绍的LED电子钟克服了以往的弊端,而且采用了家电通用的红外遥控器进行控制,方便使用。有一路闹铃输出,可以通过遥控器设置闹铃时间及允许与否。
    发表于 02-27 10:48 2.6w次阅读

    智能电子钟制作

    智能电子钟制作 [hide][/hide]
    发表于 10-10 15:10

    没有误差的电子钟设计并制作

    没有误差的电子钟设计并制作
    发表于 08-20 16:59

    51做的电子钟

    51做的电子钟51做的电子钟
    发表于 11-12 17:54

    单片机制作LED流动显示电子钟

    04年《无线电》杂志第1期上有篇文章《LED流动显示电子钟》,AT89C2051单片机控制,还有74LS373作驱动,74LS244按三态缓冲和线驱动作按键驱动。 05年,花了几天
    发表于 07-19 01:52

    LCD1602制作可调电子钟的设计资料分享

    LCD1602制作可调电子钟制作一种采用LCD1602显示的电子钟,在LCD上显示当前的时间。显示格式为“时时:分分:秒秒”。设有4个功能
    发表于 02-07 07:10

    3208LED电子钟电路原理图

    3208LED电子钟原理图,3208 LED电子钟电路图
    发表于 11-01 15:17 495次下载
    3208<b class='flag-5'>LED</b><b class='flag-5'>电子钟</b>电路原理图

    基于单片机控制的电子钟的电路及制作

    基于单片机控制的电子钟的电路及制作
    发表于 05-17 00:00 5009次阅读
    基于单片机控制的<b class='flag-5'>电子钟</b>的电路及<b class='flag-5'>制作</b>

    LED显示电脑电子钟

    LED显示电脑电子钟 本例介绍一种LED制作电脑
    发表于 10-05 10:04 7576次阅读

    LED显示电脑电子钟电路原理图

    本例介绍一种LED制作电脑电子钟(电脑万年历)。其制作
    发表于 07-17 10:05 9106次阅读

    3208LED点阵屏电子钟制作全资料

    3208LED点阵屏电子钟制作全资料,很好设计资料,快来学习吧。
    发表于 05-09 16:11 35次下载

    基于STC89C52单片机的LED显示电子钟制作讲解

    基于STC89C52单片机的LED显示电子钟制作讲解(单片机价格)-该文档为基于STC89C52单片机的LED显示电子钟
    发表于 07-22 14:35 87次下载
    基于STC89C52单片机的<b class='flag-5'>LED</b>显示<b class='flag-5'>电子钟</b>的<b class='flag-5'>制作</b>讲解

    LCD1602制作可调电子钟

    LCD1602制作可调电子钟制作一种采用LCD1602显示的电子钟,在LCD上显示当前的时间。显示格式为“时时:分分:秒秒”。设有4个功能
    发表于 12-04 10:36 35次下载
    <b class='flag-5'>用</b>LCD1602<b class='flag-5'>制作</b>可调<b class='flag-5'>电子钟</b>

    LED显示电脑电子钟

    电子发烧友网站提供《LED显示电脑电子钟.doc》资料免费下载
    发表于 11-06 08:31 0次下载
    <b class='flag-5'>LED</b>显示<b class='flag-5'>电脑</b><b class='flag-5'>电子钟</b>