AT89C2051组成的时钟电路原理
基于AT89C2051制作八路定时电路
基于AT89C2051制作八路定时电路
本文介绍用单片机制作的定时自控电路实现八路定时控制,非常适合于学校等单位作为作息控制信号或其他定时控制用,有兴趣的朋友不妨一试。
该电路由一片AT89C2051单片机、6位LED数码管、6个按键、
11.0952NHz晶振等组成,并接了1片74HC374扩展了5个输出口。
一、硬件设计
电路原理图见图1。
整个电路由显示电路、键盘电路、输入输出接口及CPU组成。
显示电路由U2、U3、Vl~V7和六位共阳数码管组成(二位一组,分别显示时、分、秒)。
其中,U2为BCD-7段译码器CD4511,通过单片机U11的P1.4~P1.7,将要显示的字符BCD码输入至U2。
经U2译码后,输出相应的笔段驱动LED数码管。
LED数码管显示采用动态扫描方式。
在某一时刻只有一只数码管点亮。
点亮的位置信号由U3(74HCl38)输出。
来自单片机U1的3位数码管位置。
AT89C2051单片机电子时钟设计
AT89C2051单片机电子时钟设计【摘要】近年来随着科技的飞速发展,单片机的应用正在不断地走向深入,同时带动电子产品日新月益的更新。
本课题选用AT89C2051单片机来设计数字电子钟,采用汇编语言进行编程,通过购买的简单材料即可制作出一个漂亮的电子钟。
鉴于篇幅限制本文仅讲述硬件的选择、工作原理和简单的例程。
【关键词】AT89C2051单片机;电子钟;数码管1.系统主要功能电路具有设置时间分钟模式,设置时间小时模式,设置闹钟分钟模式,设置闹钟小时模式,走时等五个模式。
不同的模式采用数码管闪烁来区分:正常走时显示,D2、D3两位数码管的小数点闪烁;在设置时间分钟模式和设置小时模式时,相应的数码管不带小数点以0.5s的速度闪烁;在设置时问分钟模式和设置闹钟小时模式时,相应的数码管带小数点以0.5s的速度闪烁。
2.显示原理显示部分主要器件为4位共阳数码管,驱动采用PNP型三极管驱动,使用动态扫描方式显示,占用P1.0~P1.6端口。
调整R2可以改变数码管亮度。
,每位LED的显示时间10—25ms之间均可,扫描频率不能太高,否则每位LED显示的时间过短,亮度太低,不易于观看,以肉眼不感觉到LED闪烁为宜。
3.按键设置按键S1、S2采用复用的方式与显示部分的P3.3、P3.4口复用。
其工作方式为,在相应端口输出高电平时读取按键的状态。
由单片机消除抖动并执行相应的程序。
S2键为设置按键,每按一下,实现功能切换。
S1键为加1键,仅在设置模式时,S1键有效,此键具有连击功能。
当按键时问超过1s后能实现自动连加。
4.硬件组成IC1采用AT89C2051作为主控芯片,并配合所有的必须的电路,具有上电复位的功能。
其功能一是对接收到的按键进行判断识别,并进行相应的处理;二是定期通过复用P3.5和P3.7口读取DS1302中的时间,并把小时和分钟送显示;IC2为实时时钟芯片DS1302采用串行数据传输,可为掉电保护电源提供可编程的充电功能,也可以关闭充电功能,芯片采用32768Hz晶振。
基于AT89C2051的电子闹钟设计
基于AT89C2051的电子闹钟设计电子闹钟的电路基本应包括秒指示电路、时间显示电路、按键电路、供电电源以及闹铃指示电路等几部分。
4.1电子闹钟的硬件系统框架电子闹钟的系统框架如图4-1示。
图4-1 时钟系统电路原理框图4.2电子闹钟电路的设计及原理电子闹钟电路的设计具体地说有: 1.闹铃指示电路设计; 2.系统时钟电路设计; 3.电子闹钟的显示电路设计; 4.系统复位电路设计。
以下分别讨论:4.2.1闹铃指示电路的设计闹铃指示可以有声或光两种形式。
本系统采用声音指示,其电路如图4-2所示。
其关键元件是蜂鸣器。
蜂鸣器有无源和有源两种,前者需要输入声音频率信号才能正常发声,后者则只需外加适当直流电源电压即可,元件内部已封装了音频振荡电路,在得电状态下即起振发声。
给予本电路的特点及实现功能的要求,我们选用有源的蜂鸣器。
4.2.2系统时钟电路设计振荡电路用于产生单片机工作所需要的时钟信号。
单片机内部有一个高增益反相放大器,其输入端为芯片引脚XTAL1,输出端为引脚XTAL2 。
在芯片的图4-2 闹铃指示电路CPU按键与按钮电路复位等辅助电路4位数码管显示电路闹铃声光指示电路电源系统外部有XTAL1和XTAL2之间跨接的晶体振荡器和微调电容,共同构成了一个稳定的自激振荡器。
图中的C1、C2电容起着系统时钟频率微调和稳定的作用,因此,应正确选择参数(30±10 pF),并保证其对称性。
实验表明,这2个电容元件对闹钟的±走时误差有较大关系。
图4-3系统时钟电路4.2.3 电子闹钟的显示电路设计译码是编码的逆过程,在编码时,每一种二进制代码状态都赋予了特定的含义,即都表示了一个确定的信号或者对象。
把代码状态的特定含义“翻译”出来的过程叫做译码,实现译码操作的电路称为译码器。
本设计采用显示译码器作为译码电路。
在数字系统和装置中,显示器和译码器配合使用,或者直接利用译码器驱动显示器,这类译码器叫做显示译码器。
基于AT89C2051单片机的电子钟
新颖的60秒旋转电子钟一、任务设计一款基于AT89C2051单片机的电子钟。
二、设计要求1、基本要求⑴用4只LED数码管输出显示时和分。
⑵可通过按键设置闹钟功能,且停闹无须手工操作。
⑶可通过按键设置分校时。
⑷月计时误差小于45秒。
⑸写出详细的设计报告。
⑹给出全部电路和源程序。
2、发挥部分⑴用60只LED发光管旋转显示,模拟“秒针”的行走。
⑵模拟“秒针”行走的“嘀哒”声。
⑶增加室温检测和显示功能(可与时间交替显示)。
⑷增加停(掉)电保护功能。
⑸提高计时精度,使年计时误差小于30秒。
⑹增加日自动校准功能,使得该电子钟“永无误差”。
⑺增加红黄绿三色变色装饰。
⑻可通过按键设置一天两闹(比如早晨、中午各一次)。
新颖的60秒旋转电子钟目前市场上提供的无论是机械钟还是石英钟在晚上无照明的情况下都是不可见的。
要知道当前的时间,必须先开灯,故较为不便。
现在市场上也出现了一些电子钟,它以六只LED数码管来显示时分秒,与传统的以指针显示秒的方式不同,违背了人们传统的习惯与理念,而且这类电子钟一般是采用大型显示器件,适用于银行、车站等公共场所,且外观设计欠美观,很少进入百姓家庭。
此外,无论是机械钟、石英钟还是电子钟,都存在着共同的问题:时间误差。
针对以上存在的问题,我们设计了一款采用LED显示器件显示的电子时钟,有效克服了时钟存在的误差问题,并能在夜间不必其它照明就能看到时间,且以60只发光管实现秒显示,接近于传统的秒针来显示秒的形式,用户容易接受,而且美观大方。
另加七只装饰用的LED灯,使整个时钟显的相当美观新颖,故还可作为室内装饰用。
1 系统主要功能电子钟的外观如图1所示。
周边60只发光管顺时旋转来显示秒,中间四只LED数码管用于显示时间,中下方的七只LED灯顺时旋转,供装饰用。
其主要功能有:整点报时;四只LED数码管显示当前时分;每隔一秒钟周边的60只LED发光管旋转一格,装饰用的LED每隔一秒旋转一次。
当发生停电事件时,由后备电池供电,系统进入低功耗状态,所有显示部件停止显示,这样即延长了电池的寿命,同时又保证了CPU继续计数,不至于因停电而时钟停止运行。
单片机892051
DS1302+AT89C2051控制的自制LED电子钟在很多电子类报刊杂志上都可以见到,但多数在断电后要重新设置时间等参数,给使用带来不便。
也有用电池作为备用电源的,但往往体积较大。
本文介绍的LED电子钟克服了上述弊端,加上采用家电通用的红外遥控器进行控制,使用方便。
该电子钟有一路闹铃输出,可以通过遥控器设置闹铃时间及闹铃允许。
一、工作原理实时时钟芯片DS1302采用串行数据传输,可为掉电保护电源提供可编程的充电功能,也可以关闭充电功能,芯片采用32768Hz晶振。
AT89C2051作为主控芯片,其功能一是对接收到的红外遥控编码进行判断识别,并进行相应的处理;二是定期读取DS1302中的时间,并把小时和分钟送显示;三是比较设置的闹铃时间与实时时间,如果相同且闹铃允许,则蜂鸣器以1秒的周期鸣响一分钟。
按遥控器相应键可以关闭闹铃。
闹铃时间保存在DS1302的RAM中,不需要单独的EEPROM。
二、硬件电路附图为电子钟的原理图。
IC2为DS1302,电子爱好者可以向MAXIM公司索取免费样品。
Y2为32768Hz石英晶振,可以用普通电子表里的晶振。
IC3为3脚塑封一体化红外接收头。
LED1~LED4为高亮度共阳数码管。
如果没有10MHz晶振,Y1也可以用其他12MHz以内的代替,但要修改程序中YS1和YS2的延时参数,以保持延时时间不变。
调整R2可以改变数码管的亮度。
P1口输出段码。
数码管左边两位显示小时,右边两位显示分,当显示闹铃时间时闪动。
第二位和第三位的小数点作为秒闪动。
注意第三位数码管按附图布好印制版后安装时要旋转180°,以便让时和分之间出现“:”。
最后一位小数点作为闹铃开关标志,亮表示闹铃开启。
蜂鸣器B2采用小型自带音源的。
要特别说明的是,备用电源B1可以用电池或超级电容(10万μF以上)。
虽然DS1302在主电源掉电后耗电很小,但如果要长时间保证时钟正常,最好选用小型充电电池。
AT89C2051数字电子钟的设计
AT89C2051数字电子钟的设计一、设计任务与要求1.通过单片机技术使 LED 数码管输出显示时间。
2. 可通过按键设置闹钟功能,且停闹无须手工操作。
3. 提高计时精度,使计时误差最小。
4. 通过键盘 2 个键,从左到右依次标名为 SET,DOWN,UP,ENTER, 用来修改和设置系统时钟。
二、方案设计与论证其主要设计思想是:整个系统用单片机为中央控制器,由单片机执行采集时钟芯片的时间信号并通过显示模块来输出信号及相关的控制功能。
时钟芯片产生时钟信号,利用单片机的 I/O 口传给单片机;并通过 I/O 口实现 LCD 的显示。
系统设有 4 个按键可以对时间星期年月日进行调整,还可以设置闹钟。
本电路以一片AT89C2051 单片机为主体,其显示数据从P3.0-P3.7 口输出,P1 口输出对应的六位位选信号。
电子钟程序设计时使用了 T0 作为计时,T1 为调整时显示用。
只要对程序稍加更改,可以很容易的实现 8 路定时功能。
电子钟只用一个轻触式按键来完成所有的设置。
为了使闹钟音量足够大,采用了 PNP 型三极管 8550 来驱动蜂鸣器,驱动电阻用 1K 的,蜂鸣器为 5V 小型蜂鸣器。
若用 NPN 来驱动蜂鸣器音量要小一点。
LED 数码管位驱动用8850,电子钟采用自制的 3A 开关电源供电。
AT89C205 是一个低电压,高性能 CMOS 8 位单片机,片内含 2k bytes 的可反复擦写的只读 Flash 程序存储器和 128 bytes 的随机存取数据存储器(RAM),器件采用 ATMEL 公司的高密度、非易失性存储技术生产,兼容标准 MCS-51 指令系统,片内置通用 8 位中央处理器和 Flash 存储单元,功能强大。
但它只有 20 个引脚,15 个双向输入/输出(I/O)端口,其中 P1 是一个完整的 8 位双向 I/O 口,两个外中断口,两个 16 位可编程定时计数器,两个全双向串行通信口,一个模拟比较放大器。
多功能AT89C2051倒计时器
多功能AT89C2051倒计时器摘要:倒计时器在生活非常有用,用单片机自制,不但电路简单,而且功能可根据需要自行设计。
由74系列、40系列小规模数字芯片设计的倒计时器非常多,但有显示不直观(无LED数码管);调整参数不灵活;计时精度低(采用RC振荡)等缺点。
在此向大家介绍如何用89C2051单片机自制倒计时器的方法。
一、功能介绍1.独立的三路倒计时。
均可独立设置启动、关闭。
2.范围:0~20小时,可任意设定。
关机后数据不丢失。
计时精度高:<0.1S3..独立的三路输出:a:第1路蜂鸣器输出:15Sb:第2路PNP晶体管输出:5Sc:第3路PNP晶体管输出:直致关机二、工作原理电路见上图整机由89c2051、三位LED数码管、K1-K4、R、T等元器件组成。
89C2051内部T1定时器完成100mS定时中断功能。
为了减少硬件,由89C2051的P1口直接输出LED的段码,BCD转换由软件完成。
位选码由P3.0,P3.1,P3.7输出。
键盘扫描与LED位选码的脚共用。
由于89C2051的灌入电流:20mA。
故直接驱动:蜂鸣器、PNP晶体管。
LED数码管采用共阴高亮型,LED1数码管要旋转180度。
因为要显示:“19:99”,而只有三位数码管,因此用第三位的数码管的小数点表示“1”。
三、软件编制(软件流程见图三)在T1中断程序中做一个软时钟,在定时处理程序不断查寻时间,并根据每路的启动状态,判别是否要减数。
每路倒计时到"0"后,均要判别其它两路是否已启动。
如果没有启动,则CPU进入掉电模式,电流<1.5uA,因此电路中无电源开关,再次启动,由K4(复位键)完成。
每路倒计数的初值、启动状态(是否开始倒计数),均可单独设定并存在89c2015的RAM中,只要不断电,数据不会改变。
四、操作说明电路中设有K1~K4四个开关:1.功能如下:K1:定时路数切换。
上电:LED显示第1路定时时间,按下k1,LED 显示第1路定时启动状态:【F】表示:关。
AT89C2051组成的时钟电路制作
课时授课计划讲授新课我们以P0口作为LED的字段位驱动输出,秒的“进位”采用分值闪烁提示,亮0.5秒,熄0.5秒。
,P3.1—P3.3用于位驱动,使用动态扫描方式显示,每位LED的显示时间10—25ms之间均可,扫描频率不能太高,否则每位LED显示的时间过短,亮度太低,不易于观看,以肉眼不感觉到LED闪烁为宜。
为了直观,我们的驱动输出没有采用集成电路,而是使用了分立元件—三极管,但工作原理却是一致的。
这个电路结构决定LED采用共阳极的数码管,可以采用LQ5101BS普通的发光二极管,驱动三极管可采用易得的2SA1015和2SC1815等型号,当然也可使用象S9012,S9013,S9014,2N5401,2N5555等小功率三极管,其它器件没有特殊要求。
为便于实验,单片机AT89C2051可采用DIP20P插座,程序编制好后,调试无错,即可烧写到AT89C2051中,值得一提的是,AT89C2051是Flash程序存储器,程序可反复擦写,对于做实验是非常方便的。
二、全套元件讲授新课三、套件元件包(配电路图及说明)1、电路原理图:S1复位键,S2功能键,S3置数键。
接通电源,时钟显示0.00,秒点闪动,开始计时。
2、系统时钟电路振荡电路用于产生单片机工作所需要的时钟信号。
单片机内部有一个高增益反相放大器,其输入端为芯片引脚XTAL1,输出端为引脚XTAL2 。
在芯片的外部有XTAL1和XTAL2之间跨接的晶体振荡器和微调电容,共同构成了一个稳定的自激振荡器。
图中的C1、C2电容起着系统时钟频率微调和稳定的作用,因此,应正确选择参数(30±10 pF),并保证其对称性。
实验表明,这2个电容元件对闹钟的±走时误差有较大关系。
讲授新课AT89C2051管脚图:安装好的成品套件本课小结对AT89C205时钟电路制作过程写出体会,并写出实习小结。
课后作业写出程序并调试电路,实现电路功能。
基于AT8920C51的多功能电子钟的设计
课程设计题目:基于AT8920C51的多功能电子钟的设计学院名称:电气工程学院指导老师:班级:电子信息工程071班学号:学生姓名:二〇一〇年六月基于AT89C2051的多功能电子钟的实现摘要:电子钟在生活中非常有用,尤其是多路定时功能。
市场上有许多电子钟的专用芯片如:LM8363、LM8365等,但它们功能单一,电路连接复杂。
不便于业余爱好者制作!用单片机配合计时软件,可制成功能任意的电子钟,而且可以做到硬件简单、成本低廉。
AT89C2051是性价比很好的单片机,它的I/O吸入电流可以达到20mA,可以直接驱动LED数码管和蜂鸣器;具有2个硬件定时器,非常适合制作电子钟。
关键字:AT89C2051目录一、硬件部分1. AT89C2051芯片………………………………………………………1.1 芯片介绍……………………………………………………………1.2 主要性能参数………………………………………………………1.3 功能特性概述………………………………………………………1.4 AT89C2051芯片………………………………………………………1.5 引脚功能……………………………………………………………1.6 模式介绍与编程方法………………………………………………2. 智能电子钟功能………………………………………………………3. 电路原理设计…………………………………………………………3.1 电路原理图…………………………………………………………3.2 电路原理……………………………………………………………3.3 电路PCB图……………………………………………………………3.4 引脚连接……………………………………………………………3.5 电子钟制作…………………………………………………………3.6 电子钟的改进与扩展………………………………………………4. 电子钟的使用…………………………………………………………二、软件的实现与控制……………………………………………………三、总结……………………………………………………………………四、附录……………………………………………………………………1.元器件表………………………………………………………………2. 参考文献………………………………………………………………3. 软件程序………………………………………………………………一、硬件部分1. AT89C2051芯片1.1 AT89C2051芯片简介AT89C2051是美国ATMEL公司生产的低电压,高性能CMOS8位单片机片内含2K bytes的可反复可擦写的只读程序储存器(PEROM)和128bytes的随机存储数据储存器(RAM),器件采用ATMEL公司的高密度,非易失性储存技术生产,兼容标准MCS-51指令系统,片内置通用8位中央处理器和flash存储单元。
AT89C2051做的数字电子时钟
AT89C2051做的数字电子时钟AT89C2051做的数字钟采用AT89C2051的6位电子钟原理如下图所示,只要硬件连接无误,保证成功。
另外图中的SET按纽用于校准时间。
按住2秒以上进入校准时间状态及换档和退出,快速点触用于调节时间数值。
三极管采用9015即可。
数码管最好采用红色的共阳型LED数码管,亮度高些,因为是扫描的显示方式,所以各个数码管的abcdefg各脚采用了总线并联,改动510欧姆的电阻可以改变显示亮度。
电子钟原理图电子钟源程序;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; AT89C2051时钟程序;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 定时器T0、T1溢出周期为50MS,T0为秒计数用,T1为调整时闪烁用,; P3.7为调整按钮,P1口为字符输出口,采用共阳显示管。
; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 中断入口程序;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ORG 0000H ;程序执行开始地址LJMP START ;跳到标号START执行ORG 0003H ;外中断0中断程序入口RETI ;外中断0中断返回ORG 000BH ;定时器T0中断程序入口LJMP INTT0 ;跳至INTTO执行ORG 0013H ;外中断1中断程序入口RETI ;外中断1中断返回ORG 001BH ;定时器T1中断程序入口LJMP INTT1 ;跳至INTT1执行ORG 0023H ;串行中断程序入口地址RETI ;串行中断程序返回; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 主程序;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;START: MOV R0,#70H ;清70H-7AH共11个内存单元MOV R7,#0BH ;CLEARDISP: MOV @R0,#00H ;INC R0 ;DJNZ R7,CLEARDISP ;MOV 20H,#00H ;清20H(标志用)MOV 7AH,#0AH ;放入"熄灭符"数据MOV TMOD,#11H ;设T0、T1为16位定时器MOV TL0,#0B0H ;50MS定时初值(T0计时用)MOV TH0,#3CH ;50MS定时初值MOV TL1,#0B0H ;50MS定时初值(T1闪烁定时用)MOV TH1,#3CH ;50MS定时初值SETB EA ;总中断开放SETB ET0 ;允许T0中断SETB TR0 ;开启T0定时器MOV R4,#14H ;1秒定时用初值(50MS×20)START1: LCALL DISPLAY ;调用显示子程序JNB P3.7,SETMM1 ;P3.7口为0时转时间调整程序SJMP START1 ;P3.7口为1时跳回START1SETMM1: LJMP SETMM ;转到时间调整程序SETMM ; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 1秒计时程序;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;T0中断服务程序INTT0: PUSH ACC ;累加器入栈保护PUSH PSW ;状态字入栈保护CLR ET0 ;关T0中断允许CLR TR0 ;关闭定时器T0MOV A,#0B7H ;中断响应时间同步修正ADD A,TL0 ;低8位初值修正MOV TL0,A ;重装初值(低8位修正值)MOV A,#3CH ;高8位初值修正ADDC A,TH0 ;MOV TH0,A ;重装初值(高8位修正值)SETB TR0 ;开启定时器T0DJNZ R4, OUTT0 ;20次中断未到中断退出ADDSS: MOV R4,#14H ;20次中断到(1秒)重赋初值MOV R0,#71H ;指向秒计时单元(71H-72H)ACALL ADD1 ;调用加1程序(加1秒操作)MOV A,R3 ;秒数据放入A(R3为2位十进制数组合)CLR C ;清进位标志CJNE A,#60H,ADDMM ;ADDMM: JC OUTT0 ;小于60秒时中断退出ACALL CLR0 ;大于或等于60秒时对秒计时单元清0 MOV R0,#77H ;指向分计时单元(76H-77H)ACALL ADD1 ;分计时单元加1分钟MOV A,R3 ;分数据放入ACLR C ;清进位标志CJNE A,#60H,ADDHH ;ADDHH: JC OUTT0 ;小于60分时中断退出ACALL CLR0 ;大于或等于60分时分计时单元清0 MOV R0,#79H ;指向小时计时单元(78H-79H)ACALL ADD1 ;小时计时单元加1小时MOV A,R3 ;时数据放入ACLR C ;清进位标志CJNE A,#24H,HOUR ;HOUR: JC OUTT0 ;小于24小时中断退出ACALL CLR0 ;大于或等于24小时小时计时单元清0OUTT0: MOV 72H,76H ;中断退出时将分、时计时单元数据移MOV 73H,77H ;入对应显示单元MOV 74H,78H ;MOV 75H,79H ;POP PSW ;恢复状态字(出栈)POP ACC ;恢复累加器SETB ET0 ;开放T0中断RETI ;中断返回;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 闪动调时程序;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;T1中断服务程序,用作时间调整时调整单元闪烁指示INTT1: PUSH ACC ;中断现场保护PUSH PSW ;MOV TL1, #0B0H ;装定时器T1定时初值MOV TH1, #3CH ;DJNZ R2,INTT1OUT ;0.3秒未到退出中断(50MS中断6次)MOV R2,#06H ;重装0.3秒定时用初值CPL 02H ;0.3秒定时到对闪烁标志取反JB 02H,FLASH1 ;02H位为1时显示单元"熄灭"MOV 72H,76H ;02H位为0时正常显示MOV 73H,77H ;MOV 74H,78H ;MOV 75H,79H ;INTT1OUT: POP PSW ;恢复现场POP ACC ;RETI ;中断退出FLASH1: JB 01H,FLASH2 ;01H位为1时,转小时熄灭控制MOV 72H,7AH ;01H位为0时,"熄灭符"数据放入分MOV 73H,7AH ;显示单元(72H-73H),将不显示分数据MOV 74H,78H ;MOV 75H,79H ;AJMP INTT1OUT ;转中断退出FLASH2: MOV 72H,76H ;01H位为1时,"熄灭符"数据放入小时MOV 73H,77H ;显示单元(74H-75H),小时数据将不显示MOV 74H,7AH ;MOV 75H,7AH ;AJMP INTT1OUT ;转中断退出; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 加1子序;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ADD1: MOV A,@R0 ;取当前计时单元数据到A DEC R0 ;指向前一地址SWAP A ;A中数据高四位与低四位交换ORL A,@R0 ;前一地址中数据放入A中低四位ADD A,#01H ;A加1操作DA A ;十进制调整MOV R3,A ;移入R3寄存器ANL A,#0FH ;高四位变0MOV @R0,A ;放回前一地址单元MOV A,R3 ;取回R3中暂存数据INC R0 ;指向当前地址单元SWAP A ;A中数据高四位与低四位交换ANL A,#0FH ;高四位变0MOV @R0,A ;数据放入当削地址单元中RET ;子程序返回; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; 清零程序;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;对计时单元复零用CLR0: CLR A ;清累加器MOV @R0,A ;清当前地址单元DEC R0 ;指向前一地址MOV @R0,A ;前一地址单元清0RET ;子程序返回; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; 时钟调整程序;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;当调时按键按下时进入此程序SETMM: cLR ET0 ;关定时器T0中断CLR TR0 ;关闭定时器T0LCALL DL1S ;调用1秒延时程序JB P3.7,CLOSEDIS ;键按下时间小于1秒,关闭显示(省电)MOV R2,#06H ;进入调时状态,赋闪烁定时初值SETB ET1 ;允许T1中断SETB TR1 ;开启定时器T1SET2: JNB P3.7,SET1 ;P3.7口为0(键未释放),等待SETB 00H ;键释放,分调整闪烁标志置1SET4: JB P3.7,SET3 ;等待键按下LCALL DL05S ;有键按下,延时0.5秒JNB P3.7,SETHH ;按下时间大于0.5秒转调小时状态MOV R0,#77H ;按下时间小于0.5秒加1分钟操作LCALL ADD1 ;调用加1子程序MOV A,R3 ;取调整单元数据CLR C ;清进位标志CJNE A,#60H,HHH ;调整单元数据与60比较HHH: JC SET4 ;调整单元数据小于60转SET4循环LCALL CLR0 ;调整单元数据大于或等于60时清0CLR C ;清进位标志AJMP SET4 ;跳转到SET4循环CLOSEDIS: SETB ET0 ;省电(LED不显示)状态。
基于AT89C2051六位数字钟
目录第一章方案选择及总体设计(一)、设计目的(二)、设计设备(三)、设计原理第二章硬件设计及电路图(一)电路原理图及PCB(二)AT89C2051芯片介绍第三章软件设计及程序清单(一)软件设计(二)程序清单第四章实物制作及调试说明第五章结论引言20世纪末,电子技术获得了飞速的发展,在其推动下,现代电子产品几乎渗透了社会的各个领域,有力地推动了社会生产力的发展和社会信息化程度的提高,同时也使现代电子产品性能进一步提高,产品更新换代的节奏也越来越快。
时间对人们来说总是那么宝贵,工作的忙碌性和繁杂性容易使人忘记当前的时间。
忘记了要做的事情,当事情不是很重要的时候,这种遗忘无伤大雅。
但是,一旦重要事情,一时的耽误可能酿成大祸。
例如,许多火灾都是由于人们一时忘记了关闭煤气或是忘记充电时间。
尤其在医院,每次护士都会给病人作皮试,测试病人是否对药物过敏。
注射后,一般等待5分钟,一旦超时,所作的皮试试验就会无效。
手表当然是一个好的选择,但是,随着接受皮试的人数增加,到底是哪个人的皮试到时间却难以判断。
所以,要制作一个定时系统。
随时提醒这些容易忘记时间的人。
钟表的数字化给人们生产生活带来了极大的方便,而且大大地扩展了钟表原先的报时功能。
诸如定时自动报警、按时自动打铃、时间程序自动控制、定时广播、定时启闭电路、定时开关烘箱、通断动力设备,甚至各种定时电气的自动启用等,所有这些,都是以钟表数字化为基础的。
因此,研究数字钟及扩大其应用,有着非常现实的意义。
单片机技术是高等院校电类专业的一门重要技术基础课,也是现代控制类、机电类和计算机类各专业的一门必修课程。
如果要在理论中实践真理真正的学习到实用的知识,课程设计是必要的过程。
MCS-51单片机的内部结构和工作原理、指令系统和汇编语言程序设计、存储器扩张和中断系统、I/O接口和总线等问题,都在课程设计中得到了很好的体现,并在此基础上讨论单片机应用系统的设计方法,以培养学生在工程应用中解决实际问题的能力。
单片机AT89C2051制作计时器
单片机AT89C2051制作计时器
本文介绍的用单片机AT89C2051制作的计时器,采用倒计时方式,剩余时间一目了然。
时间到了还会发出报警声。
一、硬件电路工作原理
电路见附图,由单片机电路和数码显示电路等组成。
使用复位和开始两个按钮,用三位数码管分别显示分和秒。
AT89C205l、TX、R1、C1等组成单片机电路。
数码管DS1~DS3、
VT1~VT3、R3~R12等组成数码显示电路。
本机采用动态显示方式,使用共阳数码管,P3.3~P3.5口作数码管的位码输出,通过三极管驱动数码管。
P1.0~P1.6口作段码输出,用以驱动数码管的各字段。
BL是自带振荡器的讯响器。
当P3.0输出低电平时,BL发出报警声。
二、软件设计
程序用C语言编写,由主程序、定时器T0中断服务程序、定时器T1中断服务程序、延时子程序等模块组成。
主程序主要完成程序的初始化和对开始按键S1的检测。
89C2051设计的电子钟
HANDS ON PROJECTS 作 者 罗 俊
89C2051设计的电子钟
一、电路原理图
本 电 子 钟 主 要 由 89C2051 和 四 个 共 阳 极 LED 组成,结构简单,电路图如图 1 所示。 89C2051 单片机端口设置 : P1 口分别接数码 管的段码口(a~h) ; P3.0、P3.1、P3.2、P3.3 分别 接 LED 数码管的位驱动 ; P3.4 接按键 S1,P3.5 接 按键 S2 ; P3.7 驱动蜂鸣器。C3、R15 构成上电复 位电路。Q1、 Q2、 Q3、 Q4 为数码管显示驱动三极管。 电路中没有画出电源部分,电路中的电源可以利用 手机万用充电器作为本电路的供电部分。电路元件 清单见表 1。
三、程序设计
主程序流程图如图 2,编程思路采用状态机 编程思路,使用 C 语言编 写。 程 序 由 主 程 序、 定 时中断子程序,键盘子程 序 组 成。 定 时 中 断 子 程 序 要 产 生 1ms 时 钟 标 志 位, 用于数码管扫描显示; 20ms 时钟标志位,用于 键盘扫描,消抖 ; 0.5s 的
FFH) , 再 将 加 密 后 的 密 码 通 过 Loadkey 存 入 MF RC500 的 Key 缓存中,接着进行认证。 Char M500PiccRead(unsigned char addr,unsigned char *_data) // 最后读卡,读到的数据存入 _data 中。
八、结束语
二、电路功能
本时钟电路的时钟采用 24 小时制,使用四位 LED 数码管显示时间, D0、 D1 两位数码管显示分钟, D2、D3 两位数码管显示小时 ; D2 数码管在安排就 反向安装,电路巧妙的利用 D2,D3 两数码管的小 数点位做秒闪烁。 本电路只有两个操作键 S1、S2。S2 键为设置 按键,每按一下,实现功能切换。S1 键为加1键, 仅在设置模式时,S1 键有效,此键具有连击功能, 当按键时间超过 1s 后能实现自动连加。 电路具有设置时间分钟模式,设置时间小时模
采用AT89C2051制作的智能时钟31
采用AT89C2051制作的智能时钟一、智能电子钟的功能1、全日历计时。
2、12/24小时转换。
3、8路定时输出(可关/开控制)4、误差:15S+1uS5、大、小月,润年,周,自动追踪二、调校上电后,电子钟显示“1:00”。
1、8路定时时间查询按下K1键依此显示8路定时时间。
星期位显示:“H”表示:打开当前定时输出;“L” 表示:关闭当前定时输出。
此时按K2键可进行“H”、“L”的切换。
所有输出,均由蜂鸣器输出!2、显示状态的控制按下K2键可进入以下工作状态:1)12小时/ 日月交替显示。
2)12小时固定显示。
3)24小时/ 日月交替显示。
4)24小时固定显示。
3、校时按下K2键3S后,进入校时菜单。
按下K1键依次进入校时状态:分、时、天、月、年、微调系数。
此时按K2键,完成+1。
当显示“d”时,表示要调整微调系数(0-99),其值越小,时钟走时越慢。
当使用的6MHz的晶振偏差大时,应仔细调整微调系数!当显示“out”时,按K2键,即可退出!退出后,按任意键即可启动时钟。
4、设置定时时间按下K1键3S后,进入设置菜单。
按下K1键依次进入8路定时调整状态:时、分。
此时按K2键,完成+1。
当显示“out”时,按K2键,即可退出!三、原理图和PCB图下一页AT89C2051的智能时钟单片机源程序以下为AT89C2051的智能时钟的内部程序;2001.5.24;***************;all_clk1 _program 2000-10-12;***************fl_250ms bit 00hfl_500ms bit fl_250;******************************************************** t_h_100ms equ 05dh ;100 ms for 6MHzt_l_100ms equ 07fh ;c6 for 100mstimer_no equ 8d ;3c90+30d=3cb0hw_adj_dat equ 50dkey_da equ 00000110b;********************************************************* blk_led equ 20ddot_led equ 21df_led equ 22dn_led equ 23du_led equ 24dt_led equ 25db_led equ 26dd_led equ 27doRG 0000H; ;sJMP startORG 0003H; ;reti;ORG 000BH ;;ajmp t0reti ;ORG 0013Hreti ;ORG 001BH ;aJMP T1 ;ORG 0023H ;RETI; AJMP RS_485 ;;**************************************start:call clr_ramMOV SP,#sp_data ;call int_t0call timer_intcall timer_20msSTAR_BI:call clockcall week_autocall al_outCALL KEY_bordcall key_delcall set_clk_alcall key_jmpcall rebackcall led_jmpsjmp star_bi;******************************************* reback:mov a,stat_workjz reback_endjb al1_f ,ka1mov ret_timer,secsetb al1_fsjmp reback_endka1:mov a,ret_timeradd a,#05dmov b,#60ddiv abmov a,seccjne a,b,reback_endclr al1_fmov stat_work,#00dreback_end:retkey_jmp:mov a,key_datajz key_jmp_endmov ret_timer,seccjne a,#01d,kk1mov a,stat_workinc a ;k1_keycjne a,#9d,kka1mov a,#00dkka1:mov stat_work ,asjmp key_jmp_endkk1:mov a,stat_work ;k2_keyjnz kk2mov a,stat_ledinc acjne a,#05d,kka2mov a,#00dkka2:mov stat_led,asjmp key_jmp_endkk2:acall all1cpl amov @r0,akey_jmp_end:retall1:mov r0,#al1mov a,stat_workdec aadd a,r0mov r0,amov a,@r0retled_jmp:;**********************************;mov stat_work,#01d;mov stat_tw,#01dmov a,stat_workjnz led_al1mov a,stat_ledacall led_t_dmov led1,weeksjmp led_jmp_endled_al1:acall all1mov led1,#f_ledjnz le_t2mov led1,#n_ledle_t2:jb fl_250ms ,le_t4mov led1,#blk_ledle_t4:acall al_ledled_jmp_end:acall ledret;*************************************time_24:mov a,houracall bcd_8mov led2,ajnz tim4mov led2,#blk_ledtim4:mov led3,bjb fl_500ms,tim1mov a,badd a,#10dmov led3,atim1:acall led_mintime_12_end:ret;*********************************** led_min:mov a,minacall bcd_8jb fl_500ms ,tim2add a,#10dtim2:mov led4,amov led5,bret;*************************************date_led:mov a,monacall bcd_8mov led2,ajnz da1mov led2,#blk_ledda1:mov a,badd a,#10dmov led3,amov a,dayacall bcd_8mov led4,ajnz da2mov led4,#blk_ledda2:mov led5,bdate_led_end:ret;*************; D_8=>BCD;*************BCD_8:MOV B,#10DDIV ABRET;**************************************** LED:mov p1,#0mov dptr,#led_asc;***************************led1mov a,led1movc a,@a+dptrmov p1,aclr led_1acall timer_1msacall timer_1ms;acall timer_1ms;acall timer_1ms;acall timer_1mssetb led_1;*************************led2led_led2:mov a,led2movc a,@a+dptrmov p1,aclr led_2acall timer_1mssetb led_2;*************************led3led_led3:mov a,led3movc a,@a+dptrmov p1,aclr led_3acall timer_1mssetb led_3;*************************led4led_led4:mov a,led4movc a,@a+dptrmov p1,aclr led_4acall timer_1mssetb led_4;*************************led5led_led5:mov a,led5movc a,@a+dptrmov p1,aclr led_5acall timer_1mssetb led_5;*************************led_end:mov p1,#0ret;************************************ ; bafhcdegled_asc:db 11101110B;0db 10001000B;1db 11000111B;2db 11001101B;3db 10101001B;4db 01101101B;5db 01101111B;6db 11001000B;7db 11101111B;8db 11101101B;9db 11111110B;0. =>10ddb 10011000B;1.db 11010111B;2.db 11011101B;3.db 10111001B;4.db 01111101B;5.db 01111111B;6.db 11011000B;7.db 11111111B;8.db 11111101B;9.DB 00000000B;BLACK=>20dDB 00010000B;dot=>21dDB 00100110b;l=>22ddB 10101011B;h=>23dDB 10101110B;u=>24dDB 00100111B;t=>25ddB 00101111B;b=>26ddB 10001111B;d=>27d; bafhcdeg;**********************************;delay;********************************timer_1ms:mov t_1ms,#030hr2_1:djnz t_1ms , r2_1rettimer_20ms:mov t_20m,#050dr2_2:call clockcall leddjnz t_20m , r2_2call week_autocall al_outret;############################################# ;if mon<=2 and year=4Z(0,1,2,3...);gs1=>week=mod([5/4]*year+mon_asc(mon)+day-1)/7 ;else; gs2=>week=mod([5/4]*year+mon_asc(mon)+day)/7 week_auto:mov a,YEARmov b,#05mul abmov r4,bmov r5,amov r7,#04call mul_2MOV DPTR,#MON_ASCMOV A,MONdec aMOVC A,@A+DPTRADD A,r3;*********************MOV B,DAYADD A,Bmov r3,a;r3=gs2;*******jb mon<=2 ******MOV A,MONCJNE A,#02D,WEEK_1SJMP WEEK_2WEEK_1:JC WEEK_2week_3:mov a,r3mov b,#07div abmov a,bsjmp week_4WEEK_2:;*****jb year=4N ******mov a,yearmov b,#04div abmov a,bjnz week_3mov a,r3dec amov b,#07div abmov a,bweek_4:MOV WEEK,ajnz week_endmov week,#07hweek_end:RETMON_ASC:DB 6d, 2d, 2d, 5d, 0d, 3d, 5d, 1d, 4d, 6d, 2d, 4d ;2002.5.5 ;r4r5/r7=r3mul_2:D457: CLR CMOV A,R4SUBB A,R7JC DV50SETB OVRETDV50: MOV R6,#8 ;;求平均值(R4R5/R7-→R3)DV51: MOV A,R5RLC AMOV R5,AMOV A,R4RLC AMOV R4,AMOV F0,CCLR CSUBB A,R7ANL C,/F0JC DV52MOV R4,ADV52: CPL CMOV A,R3RLC AMOV R3,ADJNZ R6,DV51MOV A,R4 ;;四舍五入ADD A,#0;R4JC DV53SUBB A,R7JC DV54DV53: INC R3DV54: CLR OVRET;************************************************************* clr_ram:MOV R7,#78h ;MOV R0,#0bH ;CLR A ;CR: INC R0 ;MOV @R0,A ;djnz r7,cr ;CLR RAMret;************** INT_CTRLint_t0:setb et1MOV TMOD,#00010001b ;mov w_adj,#w_adj_datsetb eajmp adj_w;**********************************************al_led:mov r0,#al1_hmov a,stat_workdec arl aadd a,r0mov r0,amov a,@r0acall bcd_8mov led2,ajnz al_1mov led2,#blk_ledal_1:mov a,badd a,#10dmov led3,ainc r0mov a,@r0acall bcd_8add a,#10dmov led4,amov led5,bal_led_end:ret;******************************** set_clk_al:jnb set_clk_f,see1call set_clockclr set_clk_fsjmp see2see1:jnb set_al4_f,see2call set_al4clr set_al4_fsee2:ret;********************************* proc led_t_dled_t_d:mov dptr,#led_ord_3mov b,#02hmul abjmp @a+dptrled_ord_3: ajmp led_k0_2ajmp led_k1_2ajmp led_k2_2ajmp led_k3_2ajmp led_k4_2led_k0_2: ; timer_12 and date to ledacall time_12jnb fl_3s ,lk1acall date_ledlk1:ajmp led_jmp_5_endled_k1_2: ; timer_12 to ledacall time_12ajmp led_jmp_5_endled_k2_2: ;timer_24and date to ledacall time_24jnb fl_3s ,lk2acall date_ledlk2:ajmp led_jmp_5_endled_k3_2: ;timer_24to ledacall time_24ajmp led_jmp_5_endled_k4_2: ;sec to ledmov led1,#blk_ledmov led2,#blk_ledmov led3,#dot_ledmov a,secacall bcd_8add a,#10dmov led4,amov led5,bled_jmp_5_end:retend;**************************************** proc set_al4set_al4:mov k1_data,#01dmov k2_data,#01dclr set_overacall led_alacall key_bordcall sf_keymov key_data,#0set_al41:call clockcall week_autoacall led_alacall key_bordcall key_delacall key_aljnb set_over,set_al41clr amov k1_data,amov k2_data,amov key_data,amov frist,aretend;************************************** proc key_alkey_al:mov a,key_datajz key_al_endcjne a,#01d,k2_alinc k1_data ;(1-9)mov a,k1_datacjne a,#19d,key_al_endmov k1_data,#01dsjmp key_al_endk2_al:mov a,k1_datacjne a,#018d,ke2setb set_oversjmp key_al_endke2:mov r0,#al1_hdec aadd a,r0mov r0,ainc @r0acall jj_bitmov b,#24djnz ke3ke3:mov a,@r0div abmov a,bmov @r0,akey_al_end:retendjj_bit:mov a,k1_datamov b,#02ddiv abmov a,b ;(a=1,0)ret;********************************* led_out1:mov led2,#00hmov led3,#u_ledmov led4,#t_ledmov led5,#blk_ledmov led1,#blk_ledret;******************************** led_al:mov a,k1_datacjne a,#017d,lo1acall beep_timersjmp led_al_endlo1:cjne a,#18d,ld1acall led_out1sjmp led_al_endld1:inc amov b,#02ddiv ab;**********mov led1,a;**********dec arl amov r0,#al1_hadd a,r0mov a,@r0acall bcd_8mov led2,ajnz ld2mov led2,#blk_ledld2:mov a,badd a,#10dmov led3,a;************************************ inc r0mov a,@r0acall bcd_8add a,#10dmov led4,amov led5,b;***************************flash bitjb fl_250ms,led_al_endacall jj_bitjnz led_al_emov led4,#blk_ledmov led5,#blk_ledsjmp led_al_endled_al_e:mov led2,#blk_ledmov led3,#blk_ledled_al_end:acall ledret;*************************************** proc set_clockset_clock:mov k1_data,#01dmov k2_data,#01dclr set_overcall led_clcall key_bordcall sf_keymov key_data,#0mov frist,#0set_al41:call clockacall week_autocall al_outacall led_clacall key_bordcall key_delacall key_cljnb set_over,set_al41;acall key_bordclr amov k1_data,amov k2_data,amov key_data,amov frist,aretend;************************************** proc key_clkey_cl:mov a,key_datajz key_al_endcjne a,#01d,k2_alinc k1_data ;(1-8)mov a,k1_datacjne a,#9d,key_al_endmov k1_data,#01dsjmp key_al_endk2_al:mov a,k1_datacjne a,#08d,ke2setb set_oversjmp key_al_endke2:dec amov dptr,#asc_hmovc a,@a+dptrmov b,a;********************************mov r0,#secmov a,k1_datadec aadd a,r0mov r0,ainc @r0mov a,@r0div abmov a,bmov @r0,akey_al_end:retendasc_h:db 60d,60d,24d,32d,13d,100d,100dproc led_clled_cl:mov dptr,#led_ord_3mov a,k1_datadec amov b,#02hmul abjmp @a+dptrled_ord_3: ajmp led_k0_2ajmp led_k1_2ajmp led_k2_2ajmp led_k3_2ajmp led_k4_2ajmp led_k5_2ajmp led_k6_2ajmp led_k7_2led_k0_2: ; led secmov led2,#blk_ledmov led3,#dot_ledmov a,secacall bcd_8add a,#10dmov led4,amov led5,bjb fl_250ms ,lk1mov led4,#blk_ledmov led5,#blk_ledlk1:ajmp led_jmp_5_endled_k1_2: ; led min,houracall led_hourjb fl_250ms ,lk2mov led4,#blk_ledlk2:ajmp led_jmp_5_endled_k2_2: ;led min,hour acall led_hourjb fl_250ms ,lk3mov led2,#blk_ledmov led3,#blk_ledlk3:ajmp led_jmp_5_endled_k3_2: ;led day,mon acall led_monjb fl_250ms ,lk4mov led4,#blk_ledmov led5,#blk_ledlk4:ajmp led_jmp_5_endled_k4_2: ; led day,mon acall led_monjb fl_250ms ,lk5mov led2,#blk_ledmov led3,#blk_ledlk5:ajmp led_jmp_5_endled_k5_2: ; led year mov led2,#2dmov led3,#0dmov a,yearacall bcd_8mov led4,amov led5,bjb fl_250ms ,lk6mov led4,#blk_ledmov led5,#blk_ledlk6:ajmp led_jmp_5_endled_k6_2: ;led w_adj mov led2,#d_ledmov led3,#blk_ledmov a,w_adjacall bcd_8mov led4,amov led5,bjb fl_250ms ,lk7mov led5,#blk_ledlk7:ajmp led_jmp_5_endled_k7_2: ;led outacall led_out1led_jmp_5_end:mov led1,weekacall ledretendled_hour:mov a,houracall bcd_8mov led2,ajnz lj1mov led2,#blk_ledlj1:mov a,badd a,#10dmov led3,a;********************* mov a,minacall bcd_8add a,#10dmov led4,amov led5,bretled_mon:mov a,monjnz lj5inc monmov a,monlj5:acall bcd_8mov led2,ajnz lj2mov led2,#blk_ledlj2:mov led3,b;********************* mov a,dayjnz lj4inc daymov a,daylj4:acall bcd_8mov led4,ajnz lj3mov led4,#blk_ledlj3:mov led5,bret;********************************************al_out:jb ha_over,al_out_endmov r7,#8dmov r1,#al8_mal_ch_1:mov r0,#minmov r6,#02d ;min houral_l:mov a,@r0mov b,@r1cjne a,b ,al_chinc r0dec r1djnz r6 ,al_l;************************************************** mov a,r7dec amov r0,#al1add a,r0mov r0,amov a,@r0mov c,acc.0cpl canl c,fl_250mscpl cmov beep_f,cacall beep_outal_ch:clr cmov a,r1subb a,r6mov r1,adjnz r7,al_ch_1al_out_end:retbeep_out:jb ha_f,ba1mov beep,secsetb ha_fba1:mov a,beepadd a,beep_tmov b,#60ddiv abmov a,seccjne a,b,beep_out_endsetb beep_fsetb ha_overclr ha_fbeep_out_end:rettimer_int:MOV T_1S,#TIMER_nomov beep_t,#15dmov year ,#01dmov mon , #011dmov day , #06dmov hour ,#13dmov min , #00dmov sec , #00dmov r7,#16mov dptr ,#al_ascmov r0,#al1_hal_read:clr amovc a,@a+dptrmov @r0,ainc r0inc dptrdjnz r7,al_readret;************************************ beep_timer:mov led1,#blk_ledmov led2,#b_ledmov led3,#blk_ledmov a,beep_tacall bcd_8mov led4,amov led5,bjb fl_250ms,ft1mov led4,#blk_ledmov led5,#blk_ledft1:rettime_12:mov dptr,#asc_12mov a,hourrl amovc a,@a+dptrmov led2,ajnz iu2mov led2,#blk_lediu2:inc dptrmov a,hourrl amovc a,@a+dptrjb fl_500ms ,iu1add a,#10diu1:mov led3,a;*************************************** min to ledacall led_mintime_24_end:retasc_12:db 11d,2d,21d,1d,21d,2d,21d,3d,21d,4d,21d,5d,21d,6d,21d,7ddb 21d,8d,21d,9d,11d,0d,11d,1ddb 1d,2d,0d,1d,0d,2d,0d,3d,0d,4d,0d,5d,0d,6d,0d,7d,0d,8d,0d,9d db 1d,0,1d,1dclock:;********************************mov a,seccjne a,#60d,clock_end;!!!!!!!!!!!!!!!!!!!!!!mov sec,#00hmov a,mincjne a,#60d,clock_endmov min,#00hinc hourmov a,hourcjne a,#24d,clock_endmov hour,#00hmov a,monxrl a,#02djnz mm_1mov dptr,#year_dmov a, yearmovc a,@a+dptrsjmp mm_2mm_1:mov a,mondec amov dptr,#mou_12movc a,@a+dptrmm_2:mov b,ainc binc day ;***************day+1 mov a,daycjne a ,b ,clck_endsjmp clck1clck_end:jc clock_endclck1:mov day,#01hinc monmov a,moncjne a,#13d ,clock_endmov mon,#01dinc yearmov a,yearcjne a,#100d ,clock_endmov year,#00dclock_end:call fl_outretmou_12:db 31d, 28d, 31d, 30d, 31d,30ddb 31d, 31d, 30d,31d, 30d,31dyear_d:db 29d, 28d, 28d, 28d, 29d, 28d , 28d, 28d, 29d, 28d db 28d, 28d, 29d, 28d, 28d, 28d , 29d, 28d, 28d, 28d db 29d, 28d, 28d, 28d, 29d, 28d , 28d, 28d, 29d, 28d db 28d, 28d, 29d, 28d, 28d, 28d , 29d, 28d, 28d, 28d db 'li jie 2000.5.15';***************************************t1:push apush pswpush bclr fl_ms_fdjnz t_1s ,t1_endclr fl_s_finc seccall adj_w;********************************t1_end:pop bpop pswpop aretiadj_w:clr tr1mov a,#T_L_100msadd a, w_adj ;*******have 5 ordermov tl1 ,amov a,#T_H_100msaddc a, #00hmov th1,amov t_1s,#timer_nosetb tr1retfl_out:jb fl_ms_f ,fl_out_endsetb fl_ms_fmov a,t_1smov b,#02ddiv abmov a,bjnz to_d1cpl fl_250msto_d1:mov a,t_1smov b,#04ddiv abmov a,bjnz to_d2cpl fl_500msto_d2:fl_out_end:call sec_outretsec_out:jb fl_s_f ,sec_out_endsetb fl_s_fmov a,secmov b,#07djnb fl_3s,za1mov b,#02dza1:div abmov a,bjnz sec_out_endcpl fl_3ssec_out_end:ret;********************************** key_del:mov a,key_datajnz kl_12mov a,fristjnz kl_13retkl_13:mov key_data,fristmov frist,#0clr key_overjmp sf_beepkl_12:jnb key_over,kl11mov a,t_30msadd a,#03mov b,#60ddiv abmov a,seccjne a,b,key_del_endclr key_overjmp set_keykl11:mov t_30ms,secsetb key_overkey_del_end:call sf_acjne a,#key_da,sfg_12clr key_overjmp sf_beepsfg_12:mov frist,key_datamov key_data,#0ret;**************************************** key_bord:acall re_kmov a,key_datajz key_bord1_end;acall psf_key0key_bord1_end:setb key_fretset_key:mov a,key_datacjne a,#01h,set_cc1setb set_al4_fsjmp sf23set_cc1:cjne a,#02h,sf23setb set_clk_fsf23:ret;************************************sf_key:call clockcall week_autocall al_outsetb key_fcall ledcall sf_acjne a,#key_da,sf_keycall sf_beepretsf_beep:clr beep_fcall timer_20mssetb beep_fret;******************************** re_k:mov key_data,#00hmov p1,#00hmov a,p3orl a,#01111111bmov p3,aclr key_fmov a,p3setb key_fmov p1,#0ffhanl a ,#00000110bcjne a,#00000110b,you_keyre_k_end:retyou_key:call timer_20ms;call ledmov p1,#00hmov a,p3orl a,#01111111bmov p3,aclr key_fmov a,p3setb key_fmov p1,#0ffhanl a ,#key_dacjne a,#key_da,you_key1ret;sjmp re_k_endyou_key1:jb acc.1,key_kbmov key_data,#02hkey_kb:jb acc.2,sf_key0mov key_data,#01hsf_key0:retsf_a:mov p1,#00hmov a,p3orl a,#01111111bmov p3,aclr key_fmov a,p3setb key_fanl a ,#key_daretal_asc:db 06d,40d, 06d,50d, 07d,00d, 07d,10d;am 4_al db 07d,15d, 013d,40d, 13d,45d, 14d,15d;pm 4_al。
AT89C2051原理介绍
AT89C2051是精简版的51单片机,精简掉了P0口和P2口,只有20引脚,但其内部集成了一个很实用的模拟比较器,特别适合开发精简的51应用系统,毕竟很多时候我们开发简单的产品时用不了全部32个I/O口,用AT89C2051更合适,芯片体积更小,而且AT89C2051的工作电压最低为2.7V,因此可以用来开发两节5号电池供电的便携式产品。
本文以ATMEL公司生产的51系列家族的AT89S51和AT89C2051两种单片机来讲解,两种单片机是目前最常用的单片机,其中AT89S51为标准51单片机,当然其功能比早期的51单片机更强大,支持ISP在系统编程技术,内置硬件看门狗。
一、AT89S51单片机引脚介绍AT89S51有PDIP、PLCC、TQFP三种封装方式,其中最常见的就是采用40Pin封装的双列直接PDIP封装,外形结构下图。
芯片共有40个引脚,引脚的排列顺序为从靠芯片的缺口(见图)左边那列引脚逆时针数起,依次为1、2、3、4。
40,其中芯片的1脚顶上有个凹点(见右图)。
在单片机的40个引脚中,电源引脚2根,外接晶体振荡器引脚2根,控制引脚4根以及4组8位可编程I/O 引脚32根。
1、主电源引脚(2根)VCC(Pin40):电源输入,接+5V电源GND(Pin20):接地线2、外接晶振引脚(2根)XTAL1(Pin19):片内振荡电路的输入端XTAL2(Pin20):片内振荡电路的输出端3、控制引脚(4根)RST/VPP(Pin9):复位引脚,引脚上出现2个机器周期的高电平将使单片机复位。
ALE/PROG(Pin30):地址锁存允许信号PSEN(Pin29):外部存储器读选通信号EA/VPP(Pin31):程序存储器的内外部选通,接低电平从外部程序存储器读指令,如果接高电平则从内部程序存储器读指令。
4、可编程输入/输出引脚(32根)AT89S51单片机有4组8位的可编程I/O口,分别位P0、P1、P2、P3口,每个口有8位(8根引脚),共32根。
基于AT89C2051六位数字钟的设计.
基于AT89C2051六位数字钟的设计【摘要】本设计论文介绍了用AT89C2051单片机控制的数字钟的硬件结构与软件设计。
此数字钟是一个将“时”、“分”、“秒”显示于人的视觉器官的计时装置。
它的计时周期为24小时,显示满刻度为23时59分59秒,另外应有校时功能。
电路由时钟脉冲发生器、时钟计数器、译码驱动电路和数字显示电路以及时间调整电路组成。
用晶体振荡器产生时间标准信号,这里采用石英晶体振荡器。
根据60秒为1分、60分为1小时、24小时为1天的计数周期,分别组成两个60进制(秒、分)、一个24进制(时)的计数器。
构成秒、分、时的计数,实现计时的功能。
显示器件选用LED 七段数码管。
在译码显示电路输出的驱动下,显示出清晰、直观的数字符号。
针对数字钟会产生走时误差的现象,在电路中就设计有有校准时间功能的电路。
关键词:单片机,AT89C2051,数字钟,计时Based on SCM multi-purpose digital clock design Abstract: The paper mainly presents the hardware and software design of the digital clock using AT89C2051. This digital clock is a time-device, which can display "hour", "minute", "second". Its time period is 24 hours and the full scale of the display is 23 hours, 59 minutes, 59 seconds and it has the function of time adjustment. The circuit consists of the clock pulse generator, the clock counter, decoding drive circuit, digital display circuit and the time adjustment circuit. It generates time standard signal using crystal oscillator, here is the quartz crystal oscillator. Because 60 seconds is 1 minute, 60 minutes is 1 hour and 24 hours is 1 day, we uses two counters of 60 parts and a counter of 12 part separately to constitute the count of percentage of second, second, minute, and hour. So it can realize time function. Display component selects seven-segment numerical tube LED. Driven by decoding output circuit, it can display showing clear and intuitive figures. Due to walking error of digital clock, we design time calibration circuit in the system.Key words:Single-chip microcomputer,AT89C2051,Digital clock,Time目录引言 (1)第一章数字钟的系统概述 (2)1.1 总体方案设计 (2)第二章 AT89C2051单片机及其引脚说明 (3)2.1 内部结构 (3)2.2 程序保密 (4)2.3 软硬件的开发 (4)2.4 引脚说明 (4)2.5 主要性能 (5)第三章电路的硬件设计 (7)3.1 复位电路 (7)3.2 时钟电路 (8)3.3 按键电路 (8)3.4 迅响电路及输入、输出电路 (9)3.5 数码管显示电路 (10)3.5.1 LED数码管结构及工作原理 (10)3.5.2 显示原理 (12)3.6稳压电路 (12)第四章软件设计 (14)4.1 主程序系统结构 (14)4.2 软件任务分析 (14)4.3 软件流程图 (15)第五章安装与调试 (17)5.1 安装、焊接到电路板上 (17)5.2 测试与调试 (17)结论 (19)致谢 (20)参考文献 (21)附录 1 (22)附录 2 (31)附录 3 (33)引言钟表的数字化给人们生产生活带来了极大的方便,而且大大地扩展了钟表原先的报时功能。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
AT89C2051 组成的时钟电路原理AT89C51 组成的时钟电路原理图
我们以一个实际的时钟电路来说明定时器的软件编程方法,时钟就是我们最为常见的显示时、分、秒为单位的计时工具,它是典型的应用代表。
时钟的最小计时单位是秒,但使用单片机定时器来进行计时,若使用
6.0MHz 的晶振,即使按工作方式1 工作,最大的计时时间也只能到131ms,所以我们可把每个定时时间取125ms,这样定时器溢出8 次(125ms╳
8=1000ms)就得到最小的计时单位秒。
而要实现8 次计数用软件方法实现是轻而易举的。
我们使用定时器1,以工作方式1 工作,定时器进行125ms 定时。
采用中断方法进行溢出次数的累计,当计满8 次即得到1 秒的计时。
一个时钟的计时累加,要实现分、时的进位,要用到多种进制,秒、分、时中的进位是十进制,秒向分进位和分想时进位却是六十进制,而每天又有十二小时制或二十四小时制,它们分别又是十二进制和二十四进制。
从秒到分和从分到小时可以通过软件累加和数值比较方法实现。
在单片机的内部RAM 中,需要设置显示缓冲区,显示的时、分、秒值是
从显示缓冲区中取出的,在RAM 中设置四个单元作为显示缓冲区,分别是
7AH、7BH、7CH。
为使电路和原理叙述方便,我们这里不显示秒值,秒的。