单片机应用实例:LED显示电脑电子钟

发布者:EtherealMelody最新更新时间:2013-02-07 来源: dzsc关键字:单片机  LED显示  电脑电子钟 手机看文章 扫描二维码
随时随地手机看文章
    本例介绍一种用LED制作的电脑电子钟(电脑万年历)。其制作完成装潢后的照片如下图:

  上图中,年、月、日及时间选用的是1.2寸共阳数码管,星期选用的是2.3寸数码管,温度选用的是0.5寸数码管,也可根据个人的爱好选用不同规格的数码管。原理图如下图所示:

  上图中,CPU选用的是AT89C2051,时钟芯片选用的是Dallas公司的DS1302,温度传感器选用的是Dallas公司的数字温度传感器DS1820,显示驱动芯片选用的是德州仪器公司的TPIC6B595,也可选用与其兼容的芯片NC595或国产的AMT9595。整个电子钟用两个键来调节时间和日期。一个是位选键,一个是数字调节键。按一下位选键,头两位数字开始闪动,进入设定调节状态,此时按数字调节键,当前闪动位的数字就可改变。全部参数调节完后,五秒钟内没有任何键按下,则数字停止闪动,退出设定调节状态。[page]

  源程序清单如下(无温度显示程序):

  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;[page]

  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显示电脑电子钟

上一篇:基于MC9S12X-Sl28单片机的智能车设计
下一篇:解析单片机测控系统屏蔽的分类

推荐阅读最新更新时间:2024-03-16 13:18

P10点阵屏C51单片机程序
P10点阵屏C51程序 1/4扫描,四扫下行,1路16行,数据低OE高(04-P16-08) 适用于HUB12接口单色P10 串口模式0,普通左移,亮度速度可调,6个IO口,用的STC8F1K08,最多231个字 制作出来的实物图如下: 单片机源程序如下: #include STC8.H #include intrins.h #include string.h #define DATA P30 // #define CLOCK P31 //↑ ↓ #define ADDR_A P32 //↑ #de
[单片机]
P10点阵屏C51<font color='red'>单片机</font>程序
从意法半导体看MCU竞争及发展格局
“STM8系列MCU已经走过了十个年头,在过去我们更多谈论的是STM32 32位MCU,但其实STM8的出货量也非常大,也是我们MCU领域的重要产品线。”意法半导体亚太区微控制器和数字IC事业部及线上营销副总裁Arnaud Julienne近日在STM8发售十周年纪念庆典上说道。 迄今为止,10年间STM8的累计出货量超过40亿片,接近了STM32十年的发货量。“过去我们谈的更多是STM32,但是STM8同样对ST非常重要。”Arnaud强调道。 Arnaud将过去十年ST在单片机领域的成功归结两个关键词,就是产品和产能,在接下来的文章中,Arnaud联合意法半导体微控制器市场产品经理Patrice Hamard及意法半导体中国
[单片机]
从意法半导体看<font color='red'>MCU</font>竞争及发展格局
高速DS80C320单片机软核设计
  1 引言   DS80C320单片机是DALLAS公司推出的一款基于51框架的高性能单片机。   它有如下一些优点:   ⅰ,具有与51系列完全一致的指令系统,能充分兼容所有基于51系列开发的程序;   ⅱ,具有比8051更加齐全的外设。相比8051单片机,DS80C320增加了定时器2以及一个增强型串口等;   ⅲ,具有比8051更好的效率;DS80C320的一个指令周期是4个CLK,8051则是12个,这个区别尤其是在处理简单指令的时候优势明显,例如单周期指令的处理,DS80C320只需要4个CLK,而8051需要12个,据DALLAS公司的统计表明,在相同时钟频率下,DS80C320每条指令的执行速度是8051
[单片机]
高速DS80C320<font color='red'>单片机</font>软核设计
单片机及嵌入式系统应用
1 概述 随着我国装备制造业的发展,嵌入式系统已经成为制造业的核心技术。它被广泛地应用到工业控制、仿真系统、医疗仪器、信息家电、通信设备等众多领域。目前,围绕嵌入式系统展开研究和开发,已经成为计算机软硬件技术发展最活跃的方向之一。 嵌入式系统不同于通常纯粹的软件系统或硬件系统,而是软件与硬件通过在一起的,有些功能既可以用软件实现,也可以通过硬件实现。另外,嵌入式系统设计所面临的挑战不仅涉及到计算机软件和硬件,也会涉及到许多非计算机工程中的问题,诸如机械尺寸问题、功耗问题和制造成本问题等。即使是计算机工程方面的问题,大部分系统在实时性、可靠性和多速率等问题方面也都有特别要求。 目前,实现嵌入式系统的硬件方法主要有:定制逻辑(A
[单片机]
基于Motorola单片机的机器人追跑控制系统
机器人作为人类20世纪最伟大的发明之一,在短短的40年内发生了日新月异的变化。随着计算机技术、通信技术、传感器技术等的发展,机器人之间的互动成为机器人技术的一大热点。 本文设计了一种基于摩托罗拉MC68HC08系列单片机的机器人追跑控制系统,用于研究机器人之间的简单互动。 移动机器人行为描述 在此系统中,我们将两个移动机器人一个命名为“猫”,一个命名为“鼠”。当两个机器人都无法接收到对方发出的信号时,机器人“猫”以S形前进,机器人“鼠”在原地进行180度摆动;当机器人“猫”检测到机器人“鼠”发出的信号时,以直线追向机器人“鼠”的方向,而机器人“鼠” 同时接收到“猫”的信号,以直线向前移动,以躲避“猫”的追赶,直
[单片机]
单片机MSP430 - 定时器Timer_A
一、定时器Timer_A 介绍 Timer_A是一个具有多路捕获/比较寄存器的16位定时/计数器,主要有TAxCTL,TAxR,TAxCCTLn,TAxIV,TAxEX0 几个寄存器。其中最主要的是TAxCTL寄存器,它决定Timer_A的输入时钟信号,Timer_A的工作模式,Timer_A的开启与停止,中断的申请等。中断可以来自定时器溢出或者任意的捕获/比较寄存器Timer_A的特征包括: 具有4种工作模式的异步定时/计数器 可选择配置的时钟源 可配置的PWM输出功能 异步输入和同步锁存 二、Timer_A 操作 1. 16位定时/计数器 16位定时/计数寄存器TAxR,在每个时钟信号的上升沿做增
[单片机]
51单片机中使用ucos ii的优缺点
引言   早在20世纪60年代,就已经有人开始研究和开发嵌入式操作系统。但直到最近,它才在国内被越来越多的提及,在通信、电子、自动化等需要实时处理的领域所曰益显现的重要性吸引了人们越来越多的注意力。但是,人们所谈论的往往是一些著名的商业内核,诸如VxWorks、PSOS等。这些商业内核性能优越,但价格昂贵,主要用于16位和32位处理器中,针对国内大部分用户使用的51系列8位单片机,可以选择免费的ucos ii。 ucos ii的特点   1.ucos ii是由Labrosse先生编写的一个开放式内核,最主要的特点就是源码公开。这一点对于用户来说可谓利弊各半,好处在于,一方面它是免费的,另一方面用户可以根据自己的需要对它进行修改。
[单片机]
使用单片机设计抢答器的资料和程序概述
在知识比赛中, 特别是做抢答题目的时候, 在抢答过程中,为了知道哪一组或哪一位选手先答题,必须要设计一个系统来完成这个任务。如果在抢答中,靠视觉是很难判断出哪组先答题。利用单片机系统来设计抢答器,使以上问题得以解决,即使两组的抢答时间相差几微秒,也可分辨出哪组优先答题。本文主要介绍了单片机抢答器设计及工作原理,以及它的实际用途。 ! 系统工作原理本系统采用8051单片机作为核心。控制系统的四个模块分别为:存储模块、显示模块、语音模块、抢答开关模块。该抢答器系统通过开关电路四个按键输入抢答信号;利用语音芯片ISD1420 完成语音的录放功能; 利用存储程序; 利用一个数码管来完成显示功能。工作时,用按键通过开关电路输入各路的抢答信号
[单片机]
使用<font color='red'>单片机</font>设计抢答器的资料和程序概述
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved