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

畅学单片机 2021-04-17 00:00

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

为了方便大家更好的学习,您还可以关注畅学电子和EDA的公众号,每天推送相关知识,希望能对你的学习有所帮助!

畅学单片机 以单片机为核心,带你全面了解和单片机相关的知识技巧,经验心得。关注我们,一起来学习吧!
评论 (0)
  • 导读在智能汽车技术发展浪潮中,车辆控制系统的智能化、网络化已成为行业发展的必然趋势。虹科PEAK智行定位车控系统,集成了尖端科技,能够实现车辆全方位监控与控制。从实时GPS定位到CAN/CAN FD信号处理,虹科方案不仅提升了车辆的智能化水平,更在安全性和效率上迈出了革命性的一步。虹科PEAK智行定位车控系统,通过CAN/CAN FD信号实现车辆的精准控制,包括加减速、转弯、倒退等动作,模拟真实车辆平台的动态表现。该系统搭载了虹科各型号设备,通过紧密协作,实时反映车辆位置、总线报文等信息,实现车
    虹科汽车智能互联 2025-04-21 16:04 39浏览
  • 一、‌基础原理验证与分析‌1、‌理解霍尔效应基本机制‌通过实验观察磁场中导体或半导体材料的电荷偏转现象,验证霍尔电压与磁场强度、电流方向的关系,直观认识洛伦兹力对载流子的作用‌。2、‌探索磁电效应关联性‌研究霍尔效应与材料电学特性(如载流子类型、浓度)的关联,揭示半导体材料的导电机制(如N型/P型半导体)。二、‌参数测量与标定‌1、‌关键物理量测量‌掌握霍尔元件灵敏度(KH)、霍尔系数(RH)、电导率(σ)及载流子迁移率(μ)的测量方法,为半导体材料性能评估提供数据支持。2、‌磁场强度与分布测定
    锦正茂科技 2025-04-21 13:03 27浏览
  •  霍尔效应的检测需通过实验手段测量霍尔电压、载流子浓度等参数,并分析材料电学特性。以下是具体检测方法及流程:一、核心检测方法1、‌直流(DC)霍尔测试‌‌原理‌:通过恒定磁场和电流测量霍尔电压,适用于常规半导体材料(如硅、砷化镓)。‌步骤‌:向样品通入直流电流,施加垂直磁场,用高精度电压表直接测量霍尔电压,并排除热电压等干扰信号。2、‌交流磁场(AC)霍尔测试‌‌适用场景‌:针对低迁移率材料(如某些有机半导体),霍尔电压远小于误差电压时使用。‌技术要点‌:利用锁相放大器提取交流磁场下的
    锦正茂科技 2025-04-21 11:39 32浏览
  • 精益生产咨询师证/精益管理专业人员证/精益生产工程师证虽然在名称上有一些差异,但其实实际区别并不大,目前类似的证书以ILSSI-CLMP较为得到国际上的认可,当然,你不会因为有一张精益生产咨询师证,而会有人马上请你做咨询师,因为除了知识之外,你还要有充足经验、热诚、沟通能力等等,这些也是我们招聘咨询师的基本要求。那么,有没有必要取得CLMP证书呢?这主要取决于你自己对职业发展的规划和自我提升的意志。CLMP是什么?CLMP的全称是Certified Lean Management Profess
    优思学院 2025-04-21 14:29 29浏览
  • 导读Linux驱动程序领域再添新成员,PLIN驱动程序现已正式发布。这一新驱动程序为使用LIN接口的用户提供了一个便捷、高效的解决方案。本文将展示如何安装PLIN驱动程序,以及如何在Linux环境下进行基本的PLIN通信操作,确保您能够快速掌握并应用这一新工具。继我们在Linux环境下成功推出CAN/CAN FD接口驱动程序后,现在我们为LIN接口带来了同样兼容Linux的驱动程序。免费软件包中不仅包含了驱动程序本身,还提供实用工具和一份易于理解的快速入门指南。用户下载后,需要根据当前使用的Li
    虹科汽车智能互联 2025-04-21 14:56 45浏览
  •  霍尔效应自发现以来,已渗透至多个行业领域,其核心应用可归纳为以下几类:一、‌电子与半导体行业‌1、‌半导体器件开发与测试‌① 通过测量霍尔系数和电阻率,判断器件的导电类型(N型/P型)及载流子浓度分布,优化器件设计和制造工艺‌。② 监控晶圆掺杂水平和表面缺陷,提高集成电路良率‌。2、‌磁场传感器制造与校准‌测试霍尔传感器的灵敏度、线性度、响应时间等参数,确保其在汽车、工业控制等场景下的可靠性‌。3、‌电磁测量仪器‌基于霍尔电压与磁场强度的线性关系,开发高斯计、电流表、功率计等‌。二、
    锦正茂科技 2025-04-21 13:17 35浏览
  •   电磁信号模拟平台解析   北京华盛恒辉电磁信号模拟平台作为模拟复杂电磁环境的系统,在无线通信、电子对抗等多领域广泛应用。以下从功能、技术特性、应用场景及发展趋势展开详细解读。   应用案例   目前,已有多个电磁信号模拟平台在实际应用中取得了显著成效。例如,北京华盛恒辉和北京五木恒润电磁信号模拟平台。这些成功案例为电磁信号模拟平台的推广和应用提供了有力支持。   一、核心功能   复杂电磁环境建模:构建贴近真实的电磁环境,涵盖各类干扰因素。   多通道信号模拟:模拟多通道电磁信号
    华盛恒辉l58ll334744 2025-04-21 15:10 46浏览
  •   海上安全事件应急处置系统平台深度解析   一、平台概述   北京华盛恒辉海上安全事件应急处置系统平台融合现代信息技术、通信技术、GIS、大数据分析及 AI 等技术,旨在快速响应船舶碰撞、火灾、溢油等海上突发事件,实现科学决策与高效资源调配,保障海上生命财产安全、减少环境污染。   应用案例   目前,已有多个海上安全事件应急处置系统在实际应用中取得了显著成效。例如,北京华盛恒辉和北京五木恒润海上安全事件应急处置系统。这些成功案例为海上安全事件应急处置系统的推广和应用提供了有力支持
    华盛恒辉l58ll334744 2025-04-21 15:21 49浏览
  •   有效数据智能分拣系统详解   北京华盛恒辉有效数据智能分拣系统融合人工智能、大数据分析与机器学习等前沿技术,实现海量数据自动化分类、筛选、整理及分配。凭借强大的数据处理效能,助力企业精准提取关键信息,优化决策流程,提升运营效率。以下从系统架构、核心功能、技术特性、应用场景及发展趋势展开解读。   应用案例   目前,已有多个有效数据智能分拣系统在实际应用中取得了显著成效。例如,北京华盛恒辉和北京五木恒润有效数据智能分拣系统。这些成功案例为有效数据智能分拣系统的推广和应用提供了有力支持。
    华盛恒辉l58ll334744 2025-04-21 16:46 30浏览
  •   有效数据智能分拣系统平台深度解析   一、系统概述   北京华盛恒辉有效数据智能分拣系统平台融合人工智能、机器视觉、物联网及大数据分析技术,为物流包裹、数据信息等提供高效精准的智能化分拣处理方案。通过自动化设备与智能算法协同运作,取代传统人工分拣模式,显著提升分拣效率、降低错误率,满足电商、快递及供应链不断增长的业务需求。   应用案例   目前,已有多个有效数据智能分拣系统在实际应用中取得了显著成效。例如,北京华盛恒辉和北京五木恒润有效数据智能分拣系统。这些成功案例为有效数据智能分
    华盛恒辉l58ll334744 2025-04-21 16:22 50浏览
  • 导读在汽车测试和现代工业领域,功耗控制与效率优化是工程师们不断追求的目标。虹科PCAN Router系列设备以其卓越的性能和灵活性,为CAN/CAN FD网络中的报文转换提供了高效解决方案。本文将探讨虹科PCAN Router系列设备如何在保持高效工作的同时,通过低功耗模式和高效唤醒功能,满足对能耗有严格要求的应用场景。虹科PCAN Router系列网关1 低功耗模式的优势与实现在实际的工作场景中,可能会出现一些对功耗要求存在限制的情况。鉴于此,可以灵活设置虹科PCAN Router系
    虹科汽车智能互联 2025-04-21 15:45 36浏览
  •   海上安全事件应急处置系统解析   北京华盛恒辉海上安全事件应急处置系统是为应对船舶碰撞、火灾等海上突发事件打造的综合管理体系,通过技术与协同机制,实现快速响应救援、优化资源配置,守护海上生命、财产与环境安全。以下从系统构成、功能、技术、应用及趋势展开阐述。   应用案例   目前,已有多个海上安全事件应急处置系统在实际应用中取得了显著成效。例如,北京华盛恒辉和北京五木恒润海上安全事件应急处置系统。这些成功案例为海上安全事件应急处置系统的推广和应用提供了有力支持。   一、系统构成
    华盛恒辉l58ll334744 2025-04-21 15:50 45浏览
我要评论
0
0
点击右上角,分享到朋友圈 我知道啦
请使用浏览器分享功能 我知道啦