单片机电子闹钟的设计汇编语言

合集下载

基于C51单片机的数字时钟课程设计(C语言,带闹钟).

基于C51单片机的数字时钟课程设计(C语言,带闹钟).

单片机技术课程设计数字电子钟学院:班级:姓名:学号:教师:摘要电子钟在生活中应用非常广泛,而一种简单方便的数字电子钟则更能受到人们的欢迎。

所以设计一个简易数字电子钟很有必要。

本电子钟采用AT89C52单片机为核心,使用12MHz 晶振与单片机AT89C52 相连接,通过软件编程的方法实现以24小时为一个周期,同时8位7段LED数码管(两个四位一体数码管)显示小时、分钟和秒的要求,并在计时过程中具有定时功能,当时间到达提前定好的时间进行蜂鸣报时。

该电子钟设有四个按键KEY1、KEY2、KEY3、KEY4和KEY5键,进行相应的操作就可实现校时、定时、复位功能。

具有时间显示、整点报时、校正等功能。

走时准确、显示直观、运行稳定等优点。

具有极高的推广应用价值。

关键词:电子钟 AT89C52 硬件设计软件设计目录一、数字电子钟设计任务、功能要求说明及方案介绍 (4)1.1 设计课题设计任务 (4)1.2 设计课题的功能要求说明 (4)1.3 设计课的设计总体方案介绍及工作原理说明 (4)二、设计课题的硬件系统的设计 (5)2.1硬件系统各模块功能简要介绍 (5)2.1.1 AT89C52简介 (5)2.1.2 按键电路 (6)三、设计课题的软件系统的设计 (6)3.1 使用单片机资源的情况 (6)3.2 软件系统个模块功能简要介绍 (7)3.3 软件系统程序流程框图 (7)3.4 软件系统程序清单 (7)四、设计课题的设计结论、仿真结果、误差分析 (9)4.1 设计结论及使用说明 (9)4.2 仿真结果 (10)结束语 (12)参考文献 (12)附录 (13)附录A:程序清单 (13)一、数字电子钟设计任务、功能要求说明及方案介绍1.1 设计课题设计任务设计一个具有特定功能的电子钟。

具有时间显示,并有时间设定,时间调整功能。

1.2 设计课题的功能要求说明设计一个具有特定功能的电子钟。

该电子钟上电或按键复位后能自动显示系统提示符“d.1004-22”,进入时钟准备状态;第一次按电子钟启动/调整键,电子钟从12时59分0秒开始运行,进入时钟运行状态;按电子钟S5键,则电子钟进入时钟调整状态,此时可利用各调整键调整时间,调整结束后可按S5键再次进入时钟运行状态。

单片机课程设计--电子秒表与闹钟的设计

单片机课程设计--电子秒表与闹钟的设计

目录摘要 (Ⅰ)1 电子秒表与闹钟系统概述 (1)1.1 课程设计基本要求 (1)1.2 系统实现功能 (1)1.3 系统应用价值展望 (2)2 仿真软件Proteus和Keil简介 (3)2.1 Proteus简介 (3)2.2 Keil简介 (3)3 系统工作原理分析 (4)3.1AT89C2051模块 (4)3.2 显示驱动模块 (6)3.3 数码管显示模块 (8)4 程序流程图设计 (9)5 Proteus仿真原理图 (12)6 课程设计体会 (14)参考文献 (15)附:源程序代码 (16)摘要随着科学技术的不断发展 , 人们对时间计量的要求越来越高。

在当今社会,电子时钟已经得到相当广泛的应用,产品多样,发展更是多元化。

本作品是以STC89C51单片机作为主控芯片,使用12MHZ的晶振,使用专用时钟日历芯片DS12C887产生时间信息,时间精确。

软件部分以C语言为主体,用1602LCD 液晶屏显示输出信息,输出信息量多,更直观、人性化。

该时钟可实现人机交互,可通过提供的键盘对其进行调整。

系统具有以下功能:年、月、日、时、分、秒显示;12小时/24小时模式切换,在12小时模式中,用AM和PM区分上午和下午;秒表功能;整点闹铃和报时功能,且闹钟可设置多组。

本次设计的电子时钟系统由单片机最小系统,1602LCD液晶屏,时钟芯片,调整按键,蜂鸣器,电源五大部分组成。

关键词:定时器中断闹钟电子时钟1 电子秒表与闹钟系统概述1.1 课程设计基本要求(1) 用并行口设计一个具有显示功能的秒表,显示准确的北京时间(时、分、秒),可用24小时制式;(2) 有时间校准功能;(3) 允许通过转换功能键转换显示时间,用定时器实现一个电子闹钟,能设定和修改定时的时间,并能到时响铃通知;(4) 所有按键需要通过串口自发自收来调校各种功能。

1.2 系统实现功能本系统是基于单片机AT89S52制作的数字电子钟。

根据实验要求,在完成实验所要求的基本功能外,扩展了几个功能。

单片机汇编程序电子闹钟

单片机汇编程序电子闹钟

电子闹钟课程设计摘要:本课程设计主要就是通过单片机系统,综合运用定时器、中断、数码显示等知识设计一个可定时的电子钟。

它包括系统总体方案及硬件设计,软件设计,Proteus软件仿真等部分。

硬件设计的主要任务就是根据总体设计要求,以及在所选机型的基础上,确定系统扩展所要用的存储器,I/O电路及有关外围电路等然后设计出系统的电路原理图。

合理的软件结构就是设计出一个性能优良的单片机应用性系统软件的基础,因此必须充分重视。

编写完程序后在用Proteus软件仿真检查设计就是否合理。

一.课程设计的概况通过对51单片机的扩展,接键盘,显示器等相应的外围器件。

在LED显示器中分成静态显示与动态显示两类,在本设计中主要用了它的动态显示功能,动态显示利用了人视觉的短暂停留,在数据的传输中就是一个一个传输的,且先传输低位。

键盘就是由若干个按键组成的开关矩阵,就是一种廉价的输入设备。

键盘通常包括有数字键,字母键以及一些功能键。

操作人员可以通过对键盘向计算机输入数据,地址,指令或其她的控制命令,实现简单的人机对话。

这里采用非编码式键盘。

通过51单片机的P1口扩展出独立连接式键盘。

外围扩展复位,时钟电路,利用软件源程序代码实现相应的功能。

二.课程设计实现的功能:1.能显示时时-分分-秒秒。

2、能够设定定时时间,修改定时时间。

3、定时时间到能发出警报声或者启动继电器,从而控制电器的起停。

三.设计方案使用就是单片机作为核心的控制元件,使得电路的可靠性比较高,功能也比较强大, 而且可以随时的更新系统,进行不同状态的组合。

本系统采用单片机AT89C51作为本设计的核心元件,利用7段共阴LED作为显示器件。

接入共阴LED显示器,可显示时,分钟,秒,单片机外围接有定时报警系统,定时时间到,扬声器发出报警声,提示预先设定时间电器的起停时间到,从而控制电器的起停。

电路由下列部分组成:时钟电路、复位电路、控制电路、LED显示,报警电路,芯片选用AT89C51 单片机。

单片机课程设计——定时闹钟的设计

单片机课程设计——定时闹钟的设计

1 概述1.1设计目的本设计是一个定时闹钟,它仅使用单片的40引脚单片机完成闹钟的全部功能。

设计目的是为了学习和巩固单片机知识,使对已学过的基础知识能有更深入的理解,学会独立思考、独立思考、独立工作,以及提高对所学应用基本理论分析和解决实际问题的能力。

1.2设计任务本文设计的定时闹钟采用80c51芯片,用汇编语言进行编程,时、分、秒用6位LED数码管显示。

在电路中通过四个按键S1、S2、S3和S4来进行定时和调时,定时时间到通过喇叭发出报警声。

1.3设计系统的主要功能·能显示时时-分分-秒秒。

·能够设置定时时间、修改定时时间。

·到定时时间能发出报警2 系统总体方案及硬件设计2.1 系统总体方案1)由于要显示数字时间,所以需要6位数码管。

2)时间的定时用时钟电路,修改时间和定时用手动按键控制,报警声通过喇叭发出。

3)80c51单片机加上外围器件(2个3位共阳数码管,8个限流电阻和一个蜂鸣器)和应用程序(ISIS 7 Professional软件和KEIL编译软件),构成相应的应用系统。

2.2系统设计方框图图1系统设计方框图2.3硬件设计2.3.1芯片:80c5180c51芯片内不包含一个8位中央处理器cpu,4kb程序存储器ROM,128B随机存取存储器,RAM,4个8位并行I/O接口,1个全双工串行通信接口,2个16 位定时器、计数器级及21个特殊功能寄存器。

外部具有64KB程序存储器寻址能力和64KB数据存储器寻址能力。

指令系统中增加了乘法指令,提高了运算及数据处理能力,且具有位操作能力。

由先进CMOS 工艺制造并带有非易失性Flash 程序存储器全部支持12 时钟和6 时钟操作P89C51X2 和P89C52X2/54X2/58X2 分别包含128 字节和256 字节RAM 32 条I/O 口线 3 个16 位定时/计数器 6 输入4 优先级嵌套中断结构 1 个串行I/O 口可用于多机通信I/O 扩展或全双工UART以及片内振荡器和时钟电路。

汇编语言实现电子闹钟思路详解

汇编语言实现电子闹钟思路详解

汇编语⾔实现电⼦闹钟思路详解2.1 设计思路⾸先使⽤8255、8254、8259 三个芯⽚实现电⼦时钟的功能,让闹钟可以正常⾛时;其次,在时钟的基础上添加闹铃功能、整点报时功能、设置当前时间功能;完成设计。

2.2 设计⽅案1. 电⼦时钟部分:此次设计是通过对计数器8254设定计数值对脉冲进⾏计数,在程序⾥,8254⼯作于计数器0,⽅式3。

接⼊的CLK为1MHz,设计数初值为10000,每100次中断计数⼀次,产⽣的记数时间正好是时钟每秒⾛过的时间。

通过对中断控制器8259设置初始化命令字初值来控制中断。

程序中通过移位指令来实现时、秒、分的个位和⼗位的独⾃存储,将分、秒的个位⼗位分别存⼊指定的寄存器中。

⽐较转移指令来完成秒和分的累加。

七段数码管由8255并⾏接⼝的A⼝进⾏位的选择,通过B⼝输出要显⽰的段码。

这样就在6个七段数码管上分别显⽰时、分和秒。

当1S时间到时,修改当前数码管数值,10秒时将秒的低位清零,⾼位加1,分和时亦是如此;到达60秒时,将秒清零,分加1,到达60分时,将分清零,⼩时加1,到达24⼩时则全部清零。

2. 闹钟响铃部分:对于闹钟部分,我们⾸先要完成数码管显⽰单元按键的连接和设计,让16个按键分别为0-F;再利⽤实验平台的单次脉冲输⼊KK1产⽣⼀次中断,这样就可以设置时间了。

将设置好的时间储存起来,时刻与当前的时间进⾏⽐较,当时间⼀样时,计数器1⼯作,蜂鸣器蜂鸣,播放⾳乐,这就完成了闹钟响铃功能。

3. 整点报时部分:整点报时,就是在整时的时候响⼀次铃,当时钟整点时,⽆论是⼏点,时钟的分和秒部分都为零,所以,只要让时钟的分和秒部分与零进⾏⽐较,当他们都相等时,就代表到达整点了,可以响铃了。

整点报时就完成了,本闹钟设置的整点报时时长为5秒。

4. 设置当前时间:本部分也⽤到了数码管显⽰单元的按键部分,只要利⽤之前的设计就好了,这次使⽤单次脉冲输⼊的KK2产⽣中断设置时间,再将设置的时间存储在时间变量中,时间就设置好了。

单片机电子时钟汇编程序

单片机电子时钟汇编程序

;==============================================================; 文件名称: KeyScan.Asm; 功能描述: 8255扩展IO, 完成键盘及数码管显示实验.; 按下按键, 数码管显示相应键值.;通过第一列按键改变时分秒的值,在按下第一个按键时,停止计数器,并将秒的值30h单元的内容加一。

;在按下第二个按键时,停止计数器,并将分的值31h单元的内容加一?;在按下第三个按键时,停止计数器,并将分的值32h单元的内容加一?;在按下第四个按键时,重新启动定时器开始计时。

;为什么要加34h(I don't know),如果没有将会出现一个非常奇异的现象,小时只能加到8,然后单片机死机了。

;==============================================================A_8255 EQU 7F00H ;8255端口定义B_8255 EQU 7F01HC_8255 EQU 7F02HCON_8255 EQU 7F03HCOUNT DATA 20HORG 0000HLJMP MAINORG 000BHLJMP TIME0MAIN:MOV A, #81HMOV DPTR, #CON_8255 ;8255控制端口MOVX @DPTR, A ;写入控制字MOV A,#0FFH ;关闭显示MOV DPTR,#A_8255MOVX @DPTR,A ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;定时器初始化MOV SP,#4FHMOV TMOD,#01HMOV TH0,#4CHMOV TL0,#00HSETB ET0SETB EASETB TR0MOV COUNT,#14HMOV 30H,#00H ;30H~32H SA VE SECOND,MINUTE,HOUR MOV 31H,#00H ;MOV 32H,#00H ;MOV 33H,#00H ;SA VE KEY V ALUEMOV 34H,#00H ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;BEGIN: LCALL DIS ;调用显示子程序LCALL CCSCAN ;判是否有键按下MOV A,33H ;MODIFY TIMERJZ BEGINLCALL KEYXAJMP BEGIN;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;KEYX:MOV A,33HCJNE A,#01H,KEY1 ;STOP TIMERCLR EACLR ET0CLR TR0INC 30H ;SELECT LEDMOV A,30HCJNE A,#60,KEY00MOV 30H,#00HKEY00:MOV 33H,#00HAJMP OVERKEY1: CJNE A,#04H,KEY2 ;ADD V ALUEMOV 33H,#00HCLR EACLR ET0CLR TR0INC 31HMOV A,31HCJNE A,#60,KEY11MOV 31H,#00HKEY11:AJMP OVERKEY2: CJNE A,#08H,KEY3 ;MOV 33H,#00HCLR EACLR ET0CLR TR0INC 32HMOV A,32HCJNE A,#24,KEY22MOV 32H,#00HKEY22:AJMP OVERKEY3: CJNE A,#0CH,OVER ;START TIMER MOV 33H,#00HACALL START_TIME0OVER:RET ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;START_TIME0:MOV TMOD,#01HMOV TH0,#4CHMOV TL0,#00HSETB ET0SETB EASETB TR0MOV COUNT,#14HRET ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;KEYSCANCCSCAN:;PUSH ACCMOV DPTR,#A_8255 ;按键扫描MOV A,#00HMOVX @DPTR,AMOV DPTR,#C_8255MOVX A,@DPTRCPL A ;取反ANL A,#0FHJNZ INK2 ;KEY DOWN AJMP EXITINK2:;LCALL DLNMS ;消除按键抖动MOV DPTR,#A_8255 ;按键扫描MOV A,#00HMOVX @DPTR,AMOV DPTR,#C_8255MOVX A,@DPTRCPL A ;取反ANL A,#0FHJNZ INK3 ;KEY DOWNAJMP EXITINK3:MOV R2,#0FEHMOV R4,#00H ;从第0列开始扫描COLUM: MOV DPTR,#A_8255MOV A,R2MOVX @DPTR,A ;写入列扫描值MOV DPTR, #C_8255MOVX A,@DPTRJB ACC.0,LINE1 ;判第0行的值MOV 33H,#01H ;第0行AJMP EXITLINE1: JB ACC.1,LINE2MOV 33H,#04H ;第1行AJMP EXITLINE2: JB ACC.2,LINE3MOV 33H,#08H ;第2行AJMP EXITLINE3: JB ACC.3,EXITMOV 33H, #0CH ;第3行EXIT:;POP ACCRET;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;DIS: PUSH ACC ;显示子程序PUSH 00HPUSH 03HAGAIN:;;DISPLAY SECOND ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;FIRST SECOND SEG DISPLAYMOV A,30H ;a存放表内偏移地址MOV B,#10DIV AB;MOV A,BMOV DPTR,#DSEGS ;数码管段表地址,dptr存放表的首地址MOVC A,@A+DPTR ;查表MOV DPTR,#B_8255 ;送段显示MOVX @DPTR,AMOV A,#0EFH ;SELECT FIRST SEGMOV DPTR,#A_8255MOVX @DPTR,AACALL DL1MSMOV A,BMOV DPTR,#DSEGS ;数码管段表地址,dptr存放表的首地址MOVC A,@A+DPTR ;查表MOV DPTR,#B_8255 ;送段显示MOVX @DPTR,AMOV A,#0DFH ;SELECT FIRST SEGMOV DPTR,#A_8255MOVX @DPTR,AACALL DL1MS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; MINUTE SEG DISPLAYMOV A,31H ;a存放表内偏移地址MOV B,#10DIV AB;MOV A,BMOV DPTR,#DSEGS ;数码管段表地址,dptr存放表的首地址MOVC A,@A+DPTR ;查表MOV DPTR,#B_8255 ;送段显示MOVX @DPTR,AMOV A,#0FBH ;SELECT FIRST SEGMOV DPTR,#A_8255MOVX @DPTR,AACALL DL1MSMOV A,BMOV DPTR,#DSEGS ;数码管段表地址,dptr存放表的首地址MOVC A,@A+DPTR ;查表MOV DPTR,#B_8255 ;送段显示MOVX @DPTR,AMOV A,#0F7H ;SELECT FIRST SEGMOV DPTR,#A_8255MOVX @DPTR,AACALL DL1MS ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; HOUR SEG DISPLAYMOV A,32H ;a存放表内偏移地址MOV B,#10DIV AB;MOV A,BMOV DPTR,#DSEGS ;数码管段表地址,dptr存放表的首地址MOVC A,@A+DPTR ;查表MOV DPTR,#B_8255 ;送段显示MOVX @DPTR,AMOV A,#0FEH ;SELECT FIRST SEGMOV DPTR,#A_8255MOVX @DPTR,AACALL DL1MSMOV A,BMOV DPTR,#DSEGS ;数码管段表地址,dptr存放表的首地址MOVC A,@A+DPTR ;查表MOV DPTR,#B_8255 ;送段显示MOVX @DPTR,AMOV A,#0FDH ;SELECT FIRST SEGMOV DPTR,#A_8255MOVX @DPTR,AACALL DL1MS ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; HOUR SEG DISPLAYMOV A,34H ;a存放表内偏移地址MOV B,#10DIV AB;MOV A,BMOV DPTR,#DSEGS ;数码管段表地址,dptr存放表的首地址MOVC A,@A+DPTR ;查表MOV DPTR,#B_8255 ;送段显示MOVX @DPTR,AMOV A,#07FH ;SELECT FIRST SEGMOV DPTR,#A_8255MOVX @DPTR,AACALL DL1MSMOV A,BMOV DPTR,#DSEGS ;数码管段表地址,dptr存放表的首地址MOVC A,@A+DPTR ;查表MOV DPTR,#B_8255 ;送段显示MOVX @DPTR,AMOV A,#0BFH ;SELECT FIRST SEGMOV DPTR,#A_8255MOVX @DPTR,AACALL DL1MS ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OUT: POP 03HPOP 00HPOP ACCRET;数码管段显示值DSEGS: DB 03FH, 06H,05BH,04FH,066H,06DH,07DH,07H,7FH,6FH,77H,7CH,39H,5EH,79H,71HDL1MS: MOV R7,#05HDL0: MOV R6,#080HDL1: DJNZ R6,DL1DJNZ R7,DL0RETDLNMS: MOV R7,#0F0HDL03: MOV R6,#0F0HDL13: DJNZ R6,DL13DJNZ R7,DL03RET;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; TIME0:PUSH ACCMOV TH0,#04CHMOV TL0,#00HDJNZ COUNT,NEXT1MOV COUNT,#14HINC 30HMOV A,30HCJNE A,#60,NEXT1MOV 30H,#00HINC 31HMOV A,31HCJNE A,#60,NEXT1MOV 31H,#00HINC 32HMOV A,32HCJNE A,#24,NEXT1MOV 32H,#00HNEXT1:POP ACCRETIEND。

汇编语言课程设计-电子闹钟教学总结

电子闹钟一、课题内容和要求题目描述:利用汇编语言实现一个可以在显示器上显示时、分、秒的电子时钟,并能提供整点报时功能。

基本要求:(1)设计一个基本的具有显示时、分、秒的电子时钟。

(2)到整点或预定的报警时间,能够以不同的音乐进行报时,可以自行设置闹钟报警时间;(3)实物演示时要求讲出程序原理和设计思想;(4)程序运行良好、界面清晰。

提高要求:设计一个具有钟面、分针、秒针的指针式钟表,在圆盘上有均匀分布的60 根刻度,对应小时的刻度用不同颜色的长刻度区别,并且将12、3、6、9 对应的拉丁文绘制于表盘外。

设计提示:(1)指针式钟表的绘制。

将屏幕设置成图形显示方式,通过画点、画线,画圆等基本程序完成钟表的绘制。

表盘圆周上刻度线段两端点坐标计算是钟表绘制的核心部分。

(2)秒针、分针、时针的转动。

是经过一定的延时时间,通过在下一位置重新画一个,在原来的位置用背景色覆盖的方法实现。

(3)音乐的演奏。

利用CPU支持的外围电路8254与8255,通过汇编程序改变8255 的PB0,PB1 口,接通扬声器,使得计算机能够发出一定频率的声音, 同时通过8254的与8255连接的2号计数器控制指定频率, 从而达到控制扬声器的音乐的效果。

通过建立适当的延时程序达到一定时间后则改变2号计数器产生的方波的频率,实现音乐程序的演奏。

二、需求和思路分析经分析本次程序设计的主要内容主要分为如下的几个模块:当前时间的获取并显示, 码制转换,设定闹钟报鸣的时间, 不同频率的闹铃声,钟表的绘制和并实现动态等模块。

其中钟表的绘制和动态走动部分比较难是本次课程设计的提高部分, 且改模块可单独形成一个模块, 所以放到最后进行考虑1时间的获取可以用INT 21H的2CH功能,该功能调用DOS寸间调用功能, 功能号:2CH,小时,分钟,秒数分别保存在,保存的形式是以二进制的形式,故显示时要2码制转化利用ASCII码与二进制码的关系ASCII==进制+30H3闹钟鸣叫主要利用8254的二号计数器和8255的PB0和PB1来设定4 闹钟的表盘,指针的绘制,并实现时针,分针,秒针的走动。

【设计】单片机课程设计定时闹钟的设计

【关键字】设计摘要本设计是基于单片机的定时闹钟设计。

单片机是在一块半导体芯片上集成了CPU、保存器以及输入和输出接口电路的微型计算机;其集成度高、功能强、通用性好,特别是它具有体积小、重量轻、能耗低、价格便宜、抗扰、能力强和使用方便等特点。

它不仅仅是一项技术性上的突破,同时也是对能源方面的有效节约与有效利用,因此深受国家有关技术部门和能源部门的重视和支持。

其组合而成的配件产品在日常生活的使用过程中非常方便、简单且实用,深受着广大消费者的喜爱,从而使单片机技术在社会中得到了广泛的发展和应用。

目前,已成为测量控制应用系统中的优选机种和新电子产品的关键部件。

特别是20世纪70年代问世以来,以其极高的性能价格比,受到人们的重视和关注,应用很广、发展很快,推广率高,市场利润率高。

而51单片机是各单片机中最为典型和最有代表性的一种。

本次设计的定时闹钟在硬件方面就采用了AT51芯片,用6位LED数码管来进行显示。

LED用P0口进行驱动,采用的是动态扫描显示,能够比较准确显示时时—分分—秒秒。

通过S1、S2、S3、和S4四个功能按键可以实现对时间的修改和定时,定时时间到喇叭可以发出报警声。

在软件方面采用汇编语言编程。

整个定时闹钟系统能完成时间的显示,调时和定时闹钟、复位等功能,并经过系统仿真后得到了正确的结果。

目录1 概述1.1设计目的本设计是一个定时闹钟,它仅使用单片的20引脚单片机完成闹钟的全部功能。

设计目的是为了学习和巩固单片机知识,使对已学过的基础知识能有更深入的理解,学会独立思考、独立思考、独立工作,以及提高对所学应用基本理论分析和解决实际问题的能力。

1.2设计任务本文设计的定时闹钟采用AT51芯片,用汇编语言进行编程,时、分、秒用6位LED 数码管显示。

在电路中通过四个按键S1、S2、S3和S4来进行定时和调时,定时时间到通过喇叭发出报警声。

1.3设计系统的主要功能·能显示时时-分分-秒秒。

数字钟基于51单片机汇编语言设计

《51单片机数字时钟》课程设计报告专业:电气工程及自动化班级:08电气技师本科班姓名:指导教师:西安工程技师学院二〇一一年十二月二十八日目录前言·Ⅲ摘要·Ⅳ一、单片机数字时钟设计的概述·11.1设计目的··11.2题目描述··11.3单片机基础知识··11.4 MCS-51单片机介绍及分类··31.5数字钟基本原理··3二、单片机数字时钟的硬件系统·42.1单片机最小系统的电路原理··42.2 MCS-51单片机AT89C51芯片介绍··52.2.1 AT89C51芯片引脚功能介绍··52.2.2 AT89C51芯片的内存结构··62.2.3复位电路··82.2.4时钟震荡电路··92.3七段数码管的引脚图及使用··102.4 驱动器74LS245芯片··11三、单片机数字时钟的程序设计··123.1系统开发环境、汇编语言··123.1.1系统开发环境··123.1.2汇编语言··123.2数字时钟设计的思路及流程··143.2.1主程序··143.2.2定时中断(走时)子程序流程··153.2.3按键调试子程序··163.3定时器、计数器功能··163.4中断系统功能··18四、数字时钟系统的仿真及运行 (19)4.1 WAVE6000仿真软件介绍··194.2程序设计及运行结果··214.2.1数字时钟源程序··214.2.2Wave6000仿真程序运行调试结果··254.2.3 Proteus仿真电路运行调试结果··25五、心得体会··26六、参考文献 (28)前言随着生活水平的提高,人们越来越追求人性化的事物,传统的时钟已不能满足人们的需求。

多功能电子时钟设计(汇编语言完美版)

多功能电⼦时钟设计(汇编语⾔完美版)电⼦时钟实验报告⼀,实验⽬的1. 学习8051定时器时间计时处理、按键扫描及LED数码管显⽰的设计⽅法。

2. 设计任务及要求利⽤实验平台上4个LED数码管,设计带有闹铃功能的数字时钟⼆,实验要求A.基本要求:1. 在4位数码管上显⽰当前时间。

显⽰格式“时时分分”2. 由LED闪动做秒显⽰。

3. 利⽤按键可对时间及闹玲进⾏设置,并可显⽰闹玲时间。

当闹玲时间到蜂鸣器发出声响,按停⽌键使可使闹玲声停⽌。

4.实现秒表功能(百分之⼀秒显⽰)B.扩展部分:1.⽇历功能(能对年,⽉,⽇,星期进⾏显⽰,分辨平年,闰年以及各⽉天数,并调整)2.⾳乐闹铃(铃⾳可选择,闹铃被停⽌后,闪烁显⽰当前时刻8秒后,或按键跳⼊正常时间显⽰状态)3.定时功能(设定⼀段时间长度,定时到后,闪烁提⽰)4.倒计时功能(设定⼀段时间长度,能实现倒计时显⽰,时间长减到0时,闪烁提⽰)5.闹铃重响功能(闹铃被停⽌后,以停⽌时刻开始,⼀段时间后闹铃重响,且重响时间的间隔可调)三,实验基本原理利⽤单⽚机定时器完成计时功能,定时器0计时中断程序每隔0.01s中断⼀次并当作⼀个计数,设定定时1秒的中断计数初值为100,每中断⼀次中断计数初值减1,当减到0时,则表⽰1s到了,秒变量加1,同理再判断是否1min钟到了,再判断是否1h到了。

为了将时间在LED数码管上显⽰,可采⽤静态显⽰法和动态显⽰法,由于静态显⽰法需要译码器,数据锁存器等较多硬件,可采⽤动态显⽰法实现LED显⽰,通过对每位数码管的依次扫描,使对应数码管亮,同时向该数码管送对应的字码,使其显⽰数字。

由于数码管扫描周期很短,由于⼈眼的视觉暂留效应,使数码管看起来总是亮的,从⽽实现了各种显⽰。

四,实验设计分析针对要实现的功能,采⽤AT89S51单⽚机进⾏设计,AT89S51 单⽚机是⼀款低功耗,⾼性能CMOS8位单⽚机,⽚内含4KB 在线可编程(ISP)的可反复擦写1000次的Flash只读程序存储器,器件采⽤⾼密度、⾮易失性存储技术制造,兼容标准MCS-51指令系统及80C51引脚结构。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

ORG 00HAJMP START ;程序开始ORG 0BH ;TimEr0中断向量地址AJMP TimEInt ;跳到中断处理程序ORG 0020HSTART: MOV sp,#70HSETB P3.0 ;输出高电平,闹钟服务程序驱动口SETB P3.5 ;输出高电平,闹钟服务程序驱动口MOV 39H,#40 ;1秒钟中断次数MOV 3AH,#00 ;开机时间MOV 3BH,#00MOV 3CH,#00 ;设置上电时时钟显示的初值MOV 2EH,#06 ;开机时闹钟默认时间MOV 2FH,#00 ;设置上电时闹时时间的初值CLR 20H.1 ;上点复位后闹时功能处于关闭状态CLR 20H.0 ;正常走时模式CLR 20H.2 ;闹钟时间还没有到SETB P3.0; 清闹时输出SETB P3.5; 清闹时输出;************************************; 定时器初始化,定时器0方式1,25ms;TH0=9EH TL0=58H;************************************MOV TMOD ,#01HMOV TH0,#9EHMOV TL0,#58HMOV IE,#82H ;开全局中断SETB TR0 ;开定时中断,启动定时器;*****************************************; 以下为主程序,按键扫描;*****************************************MainLoop:JB P3.2,CheckPP ;闹时设置键按下了吗?没有则转去检测秒设置键篇p3.2 LCALL Delay2JB P3.2,CheckPPSETB 20H.0 ;置为闹时设置模式CALL AlarmSetCheckPP:JB P3.4,CheckPQ ;分设置键按下了吗?没有则转去检测小时设置键CALL Delay2JB P3.4,CheckPQMOV A,3BHADD A,#1 ; 如果按下则将分钟加一MOV 3BH,A;CJNE A,#3CH,NotOver1 ;到60分钟了吗?MOV 3BH,#0NotOver1: ;以下等待按键释放及防抖动JNB P3.4,$CheckPQ:JB P3.3,CheckAlarm ;小时设置键按下了吗?没有则转去闹时状态检测CALL Delay2JB P3.3,CheckAlarm ;按下的时间超过15ms吗?如按下调用蜂鸣器发音程序MOV A,3AHADD A,#1 ;如果按下则将小时加1MOV 3AH,ACJNE A,#18H,NotOver2MOV 3AH,#0 ;到24小时则将小时清0NotOver2: ;以下等待按键释放及防抖动JNB P3.3,$CheckAlarm:JNB 20H.2,ToReturn ;闹钟时间到没有CALL AlarmProcess ;闹钟子程序ToReturn:AJMP MainLoop;**********************************************; 定时器TimEr0中断服务程序(此程序每8ms执行一次);**********************************************TimeInt:MOV TH0,#9EH ;重新加载定时参数MOV TL0,#58HPUSH ACCPUSH PSW ;保护累加器及程序状态字的内容SETB RS0CLR RS1DJNZ 39H,Notone3CH ;中断了40次了吗?即够1秒了吗?MOV 39H,#40 ;如够1秒则重新设置"39H"计数器CALL Clock ;调用将时钟内容加1秒的子程序CALL ConvertoBuffer ;调用将时钟内容转换到显示缓冲区子程序Notone3CH:CALL ScanDisplay ;调用扫描显示子程序POP PSWPOP ACC ;恢复累加器及程序状态字的内容RETI;*********************************************;扫描显示子程序,将缓冲区的数值显示在对应的数码管上;*********************************************ScanDisplay:MOV R1,#30H ;指向显示数据首址,利用c语言指针原理读取缓冲区的数值;子程序ConvErtoBuffEr已经将相应的值存放在30H的缓冲区中MOV R4,#10111111b ;扫描控制字初值,显示右边第一个数码管PLAY: MOV A,R4 ;扫描字放入AMOV P2,A ;从P2口输出,p2口的低六位分别控制对应的六个数码管的显示MOV A,@R1 ;取显示数据到AMOV DPTR,#TAB ;取段码表地址MOVC A,@A+DPTR ;查显示数据对应段码MOV P0,A ;段码放入P0口,具体显示位INC R1 ;指向下一地址MOV A,R4 ;扫描控制字放入A;显示时分秒分隔位JB ACC.1,LPP1 ;显示时分位CLR P0.7CALL DelaySETB P0.7LPP1:JB ACC.3,LPP2 ;显示秒分位CLR P0.7CALL DelaySETB P0.7LPP2: JNB ACC.7,ENDOUT ;扫到第六位时结束RR A ;A中数据循环左移MOV R4,A ;放回R4内LCALL Delay ;每位数码管显示间隔时间为2msSETB P0.7 ;关闭分位显示点AJMP PLAY ;跳回PLAY循环ENDOUT:MOV P0,#0FFH ;P0口复位RETTAB: DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H,7FH,0B7H,0FFH;共阳段码表"0""1""2" "3""4""5""6""7" "8""9"".""=""不亮";****************************************************; 时钟内容加1秒的子程序(1秒时间到);****************************************************Clock:MOV A,3CH ;将原秒值送入aADD A,#1 ;加1秒MOV 3CH,aCJNE A,#3CH,NotOverFlowMOV 3CH,#0MOV A,3BHADD A,#1MOV 3BH,A;CJNE A,#3CH,NotOverFlowMOV 3BH,#0MOV A,3AHADD A,#1MOV 3AH,ACJNE A,#18H,NotOverFlowMOV 3AH,#0NotOverFlow:JNB 20H.1,NotAlarm ;闹钟开启了吗?如没有开启则无需理会是否到闹时时间MOV A,3CHJNZ NotAlarm ;秒为零吗?MOV A,3BHCJNE A,2FH,NotAlarm ;时间分钟值和闹时设置分钟值相等吗?MOV A,3AHCJNE A,2EH,NotAlarm ;时间小时值和闹时设置小时值相等吗?SETB 20H.2 ;到了闹时时间则将"闹时时间到"标志设为1NotAlarm:RET;**************************************************************************; 将时钟内容或闹时设置值转换到显示缓冲区子程序;************************************************************************** ConvertoBuffer:MOV R1,#30HJB 20H.0,DispAlarmSet ;判断时钟模式,以决定是显示实时时间还是闹时时间,20H.0,0为正常走时,1为闹钟设定MOV A,3CHMOV 23H,AMOV A,3BHMOV 22H,AMOV A,3AHMOV 21H,AAJMP Convert ;在数码管显示缓冲区的数值DispAlarmSet: ;闹钟设定JB 20H.1,AlarmOn ;闹钟开关,0为关,1为开MOV 23H,#00HAJMP NextAlarmOn:MOV 23H,#1 ;显示闹时时间及显示闹钟状态:显示"00"表示关闭闹钟,NExt: ;"01"表示开启闹钟MOV a,2FH;MOV 22H,A;MOV A,2EH;MOV 21H,A ;将数值显示到数码管Convert:MOV A,23H ;取秒值,将待显示的数值存储到缓冲区MOV B,#10DIV ABMOV @R1,BINC R1 ;缓冲寄存器的地址加1MOV @R1,AINC R1MOV A,22HMOV B,#10DIV ABMOV @R1,B;INC R1 ;缓冲寄存器的地址加1MOV @R1,A ;将秒值的十位值存入缓冲区INC R1MOV A,21HMOV B,#10DIV ABMOV @R1,B;INC R1 ;缓冲寄存器的地址加1MOV @R1,A ;将秒值的十位值存入缓冲区RET;**************************************************; 闹钟时间设置子程序;**************************************************AlarmSet:JNB P3.2,$CALL Delay2 ;等待"P3.2"键释放CheckArmPM: ;JB P3.4,CheckArmPN ;分设置键按下了吗?没有则转去检测小时设置键p3.5 CALL Delay2JB P3.4,CheckArmPNSETB 20H.1 ;闹钟开MOV A,2FHADD A,#1 ;如果按下则将分钟加1,MOV 2FH,ACJNE A,#3CH,ArmNotOver1 ;到60分钟了吗?MOV 2FH,#0 ;到60分钟则将分钟清0ArmNotOver1: ;以下等待按键释放及防抖动JNB P3.4,$ ;等待对应设置时间的按键释放CheckArmPN:JB P3.3,AlarmSetEnd ;小时设置键按下了吗?没有则返回反复检测CALL Delay2JB P3.3,AlarmSetEndSETB 20H.1MOV A ,2EHADD A,#1 ;如果按下则将小时加1MOV 2EH,ACJNE A,#18H,ArmNotOver2MOV 2EH,#0 ;到24小时则将小时清0ArmNotOver2: ;以下等待按键释放及防抖动JNB P3.3,$AlarmSetEnd:JB P3.2,AlarmSet ;闹钟设置完毕了吗?CALL Delay2JB P3.2,AlarmSetJNB P3.2,$CLR 20H.0 ;从设置模式转为走时模式RET;**************************************************; 闹时服务子程序;************************************************** AlarmProcess:MOV R2,#10loop2:CPL P3.0CPL P3.5CALL Delay1JB P3.2,AlarmReturn ;停止闹时键(即闹时设置键)按下了吗?CALL Delay2JB P3.2,AlarmReturnCLR 20H.1 ;关闭闹钟JNB P3.2,$SETB P3.0 ;如停止闹时键按下则停止闹时SETB P3.5CLR 20H.2AJMP loop6AlarmReturn:DEC R2MOV A,R2CJNE A,#00H,loop2SETB P3.0 ;如停止闹时键按下则停止闹时SETB P3.5CLR 20H.1 ;关闭闹钟CLR 20H.2loop6:RET;**************************************************; 延时子程序;**************************************************Delay:MOV R6,#2 ;延时产生1ms,数码管动态显示间隔时间del: MOV R7,#249DJNZ R7,$DJNZ R6,delRETDelay1:MOV R5,#2 ;延时间产生1s,扬声器的震动间隔时间de3:MOV R6,#200de2:MOV R7,#250DJNZ R7,$DJNZ R6,dE2DJNZ R5,dE3RETDelay2:MOV R6,#10 ;延时产生15ms,按键防止抖动时间de4:MOV R7,#245DJNZ R7,$DJNZ r6,de4RETEnd。

相关文档
最新文档