89C51单片机时钟程序

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

89C51单片机时钟程序
第一篇:89C51单片机时钟程序
SECOND EQU 40H
;给内存RAM空间中40H单元起名SECOND MINUTE EQU 41H ;给内存RAM空间中41H单元起名MINUTE HOUR EQU 42H
;给内存RAM空间中42H单元起名HOUR SECONDGEWEI EQU 43H
;给43H单元起名SECONDGEWEI存秒的个位SECONDSHIWEI EQU 44H
;给44H单元起名SECONDSHIWEI存秒的十位MINUTEGEWEI EQU 45H
;给45H单元起名MINUTEGEWEI存分的个位MINUTESHIWEI EQU 46H
;给46H单元起名MINUTESHIWEI存分的十位HOURGEWEI EQU 47H
;给47H单元起名HOURGEWEI存小时的个位HOURSHIWEI EQU 48H
;给48H单元起名HOURSHIWEI存小时的十位 ORG 0000H
;复位时程序从此开始 SJMP START
;跳到START进行初始化 ORG 000BH
;定时器 0中断入口 AJMP TIMER0
;跳转到TIMER0处
ORG 0030H
;初始化程序从30H开始;---------------初始化START------------------------------START:
MOV SECOND, #0
;给秒存储单元SECOND赋初始值0 MOV MINUTE, #0
;给分存储单元MINUTE赋初始值0 MOV HOUR , #12
;给小时存储单元HOUR赋初始值12 MOV DPTR , #TAB
;给数据指针赋值,将DPTR指向TAB数据表头处 MOV 30H, #0 ;给30H单元赋初始值0(用于计20次的50ms中断)MOV TH0,#3CH
;给计数容器的高8位TH0赋初始值3CH MOV TL0,#0B0H
;给计数容器的低8位TL0赋初始值B0H MOV TMOD,#00000001B
;C/T位设置为0,M1M0设置位10,即模式1定时MOV TCON,#00010000B
;TR0设置为1,即启动定时器0开始工作 SETB ET0
;IE中的ET0位设置为1,开定制器中断0 SETB EA
;IE中的EA位设置为1,开总中断;-----------------------主程序MAIN-----------------------------MAIN:CALL KEY
;调按键子程序KEY CALL PROCESS
;调数据处理子程序PROCESS CALL DISPLAY
;调显示子程序DISPLAY SJMP MAIN
;跳转到MAIN标号处;------------------------------按键子程序KEY调时-------------------KEY:MOV P1,#0FEH
;行扫描 LCALL DELAY
;JNB P1.4,HOURJIA
;P1.4引脚如果是低电平就跳到HOURJIA处
JNB P1.5,HOURJIAN
;P1.5引脚如果是低电平就跳到HOURJIAN处JNB P1.6,MINUTEJIA
;P1.6引脚如果是低电平就跳到MIMUTEJIA处JNB P1.7,MINUTEJIAN
;P1.7引脚如果是低电平就跳到MIMUTEJIAN处 FANHUI:RET
;子程序返回(如果没有按键按下)
HOURJIA:CALL DELAY
;调延时程序目的是跳过按键抖动期(去抖)JB P1.4,FANHUI
;P1.4如果是高电平就跳到FANHUI处(没键按)JNB P1.4,$
;如果P1.4是低电平就停在当前位置等键释放MOV R4,HOUR CJNE R4,#23,A1
;判断时数字是否为23 AJMP A2
A1:INC HOUR
;把小时位加1 MOV SECOND, #0
;小时进位,秒归0
RET
A2:MOV HOUR,#0
;小时数为23时加一为0
MOV SECOND, #0
;小时进位,秒归0
RET
;子程序返回
HOURJIAN:CALL DELAY
;调延时程序目的是跳过按键抖动期(去抖)JB P1.5,FANHUI
JNB P1.5,$
MOV R5,HOUR CJNE R5,#0,A3
AJMP A4 A3:DEC HOUR
MOV SECOND, #0
RET A4:MOV HOUR,#23
MOV SECOND, #0 RET
MINUTEJIA:CALL DELAY
JB P1.6,FANHUI
JNB P1.6,$
MOV R6,MINUTE
CJNE R6,#59,A5
AJMP A6 A5:INC MINUTE
MOV SECOND, #0
RET A6:MOV SECOND, #0
MOV MINUTE, #0
MOV R4,HOUR CJNE R4,#23,A10
MOV HOUR,#0
RET A10:INC HOUR
RET
MINUTEJIAN:CALL DELAY
JB P1.7,FANHUI
JNB P1.7,$
MOV R7,MINUTE CJNE R7,#0,A7
AJMP A8 A7:DEC MINUTE
;P1.5如果是高电平就跳到FANHUI处(没键按) ;如果P1.5是低电平就停在当前位置等键释放;判断时数字是否为23
;把小时位减1
;小时数为0时减一为23
;子程序返回
;调延时程序目的是跳过按键抖动期(去抖)
;P1.6如果是高电平就跳到FANHUI处(没键按) ;如果P1.6是低电平就停在当前位置等键释放;判断分钟数是否为59
;把分钟位加1
;给秒存储单元SECOND赋初始值0
;分钟数为59则分钟归0
;判断时数字是否为23
;23时增1归0
;分钟数为59 自增1后小时增1
;子程序返回
;调延时程序目的是跳过按键抖动期(去抖)
;P1.7如果是高电平就跳到FANHUI处(没键按) ;如果P1.7是低电平就停在当前位置等键释放;判断分钟数是否为0
;分钟不为0把分钟位减1
MOV SECOND, #0
RET
A8:MOV MINUTE, #59
;分钟数为0时减一为59 MOV R4,HOUR CJNE R4,#0,A9
;判断时钟数是否为0 MOV HOUR,#23
;时钟数为0减1为23 MOV SECOND, #0 RET
A9:DEC HOUR
;时钟数不为0则减1 MOV SECOND, #0
RET
;子程序返回;-------------------处理子程序PROCESS-----------------------PROCESS:MOV A, SECOND
;把SECOND中的秒值拷贝给A MOV B, #10
;给寄存器B赋值10 DIV AB
;A除以B,结果存入A中,余数存入B中 MOV SECONDSHIWEI , A
;结果即秒的十位数拷贝给SECONDSHIWEI MOV SECONDGEWEI , B
;余数即秒的个位拷贝给SECONDGEWEI MOV A, MINUTE
;把MINUTE中的分值拷贝给A MOV B, #10
;给寄存器B赋值10 DIV AB
;A除以B,结果存入A中,余数存入B中 MOV MINUTESHIWEI , A
;结果即分的十位拷贝给MINUTESHIWEI MOV MINUTEGEWEI , B
;余数即分的个位拷贝给MINUTEGEWEI MOV A, HOUR
;把HOUR中的小时值拷贝给A MOV B, #10
;给寄存器B赋值10 DIV AB
;A除以B,结果存入A中,余数存入B中 MOV HOURSHIWEI , A
;结果即小时的十位拷贝给HOURSHIWEI MOV HOURGEWEI , B ;余数即小时的个位拷贝给HOURGEWEI RET
;子程序结束返回到主程序;-----------------显示子程序DISPLAY--------------DISPLAY:MOV A, HOURSHIWEI
;小时的十位拷贝给A MOVC A, @A+DPTR
;到A+DPRT这个数对应的地方找显示段码拷贝给A MOV P0, A ;把显示段码(小时的十位)送到P0 CLR P2.0
;将P2.0置低电平,对应的三极管导通 CALL DELAY
;调延时(让显示小时十位的数码管持续亮一段时间)SETB P2.0 ;将P2.0置高电平,对应三极管截止,对应数码管灭MOV A, HOURGEWEI
;小时的个位拷贝给A MOVC A,@A+DPTR
;到A+DPRT这个数对应的地方找显示段码拷贝给A MOV P0, A ;把显示段码(小时的个位)送到P0 CLR P2.1
;将P2.1置低电平,对应的三极管导通
CALL DELAY
;调延时(让显示小时个位的数码管持续亮一段时间)SETB P2.1 MOV P0,#7FH CLR P2.1 CALL DELAY SETB P2.1
;将P2.1置高电平,对应三极管截止,对应数码管灭MOV A, MINUTESHIWEI
;分钟的十位拷贝给A MOVC A,@A+DPTR
;到A+DPRT这个数对应的地方找显示段码拷贝给A MOV P0, A ;把显示段码(分钟的十位)送到P0 CLR P2.2
;将P2.2置低电平,对应的三极管导通 CALL DELAY
;调延时(让显示分钟十位的数码管持续亮一段时间)SETB P2.2 ;将P2.2置高电平,对应三极管截止,对应数码管灭MOV A, MINUTEGEWEI
;分钟的个位拷贝给A MOVC A,@A+DPTR
;到A+DPRT这个数对应的地方找显示段码拷贝给A MOV P0, A ;把显示段码(分钟的个位)送到P0 CLR P2.3
;将P2.3置低电平,对应的三极管导通
CALL DELAY
;调延时(让显示分钟个位的数码管持续亮一段时间)SETB P2.3 ;将P2.3置高电平,对应三极管截止,对应数码管灭
MOV P0,#7FH CLR P2.3 CALL DELAY SETB P2.3
MOV A, SECONDSHIWEI
;秒的十位拷贝给A MOVC A,@A+DPTR
;到A+DPRT这个数对应的地方找显示段码拷贝给A MOV P0, A ;把显示段码(秒钟的十位)送到P0 CLR P2.4
;将P2.4置低电平,对应的三极管导通 CALL DELAY
;调延时(让显示秒钟十位的数码管持续亮一段时间)SETB P2.4 ;将P2.4置高电平,对应三极管截止,对应数码管灭MOV A, SECONDGEWEI
;秒的个位拷贝给A MOVC A,@A+DPTR
;到A+DPRT这个数对应的地方找显示段码拷贝给A MOV P0, A ;把显示段码(秒钟的个位)送到P0 CLR P2.5
;将P2.5置低电平,对应的三极管导通
CALL DELAY
;调延时(让显示秒钟个位的数码管持续亮一段时间)SETB P2.5 ;将P2.5置高电平,对应三极管截止,对应数码管灭 RET
;显示子程序结束返回主程序;--------------------中断服务子程序----------------------------TIMER0:MOV R3, A
;把A中的数据送入R3保护起来 INC 30H
;30H单元中的数加1 MOV A, 30H
;30H单元中的数据拷贝给A CJNE A,#20,JIXU
;A中的数据与20比较不相等就跳转到JIXU处 MOV 30H,#0
;(如果30H单元计满20了)给30H赋值0 INC SECOND
;把SECOND中的秒钟数加1 MOV A,SECOND
;把SECOND中的数据拷贝给A CJNE A, #60, JIXU
;A中的数据与60比较不相等就跳转到JIXU处MOV SECOND,
#0
;给秒SECOND赋值0 INC MINUTE
;把MINUTE中的分钟数加1 MOV A, MINUTE
;把MINUTE中的数据拷贝给A CJNE A, #60, JIXU
;A中的数据与60比较不相等就跳转到JIXU处 MOV MINUTE, #0 ;给分钟MINUTE赋值0 INC HOUR
;把HOUR中的小时数据加1 MOV A, HOUR
;把HOUR中的数据拷贝给A CJNE A, #24, JIXU
;A中的数据与24比较不相等就跳转到JIXU处 MOV HOUR, #0 ;给小时HOUR赋值0 JIXU: MOV A,R3
;把刚才送入R3中的数据还给A MOV TH0,#3CH
;给计数容器的高8位TH0赋初始值3CH MOV TL0,#0B0H
;给计数容器的低8位TL0赋初始值B0H RETI
;中断子程序返回主程序;---------------------------延时子程序----------------------------DELAY:MOV R0, #50
;给R0赋值50 D2:MOV R1, #10
;给R1赋值10 D1:DJNZ R1, D1
;R1减1不等于0跳到D1处 DJNZ R0, D2
;R0减1不等于0跳到D2处
RET
;延时子程序结束返回调用该程序的下一条;---------------下面的数据表中存储的是显示段码(共阳)-------------------TAB:DB 0C0H,0F9H,0A4H,0B0H,99H
;从TAB处开始存储0、1、2、3、4
DB 92H ,82H ,0F8H,80H ,90H
;5、6、7、8、9对应的显示段码 END
;程序结束
第二篇:基于单片机的时钟控制器设计
时钟控制器设计任务书
1.设计目的与要求
设计出一个用于数字时钟的控制器,准确地理解有关要求,独立完成系统设计,要求所设计的电路具有以下功能:
(1)显示:可以显示时、分和秒
(2)调时功能:时(0-24)、分和秒(0-60)可以连续可调(3)时间日误差< 2秒(4)增加整点报时功能(5)增加闹钟任意设定功能 2.设计内容
(1)画出电路原理图,正确使用逻辑关系;(2)确定元器件及元件参数;(3)进行电路模拟仿真;(4)SCH文件生成与打印输出;(5)PCB文件生成与打印输出; 3.编写设计报告
写出设计的全过程,附上有关资料和图纸,有心得体会。

4.答辩在规定时间内,完成叙述并回答问题。

目录
1.引言…………………………………………………………………………-1-2 总体设计方案………………………………………………………………-1-
2.1 设计思路…………………………………………………………………-1-2.2 方案确立…………………………………………………………………-1-2.3 设计方框图………………………………………………………………-2-3 设计原理分析………………………………………………………………-2-
3.1 系统硬件电路设计……………………………………………………-2-3.2 主控器件AT89S51 ………………………………………………………-2-3.3 译码器74HC245 …………………………………………………………-3-3.4 显示电路…………………………………………………………………3-3.5 按键电路…………………………………………………………………-4-3.6 复位电路…………………………………………………………………-4-3.7 蜂鸣电路…………………………………………………………………-5-3.8 时钟电路…………………………………………………………………-5-3.9 总体原理图………………………………………………………………-5-3.10程序框图…………………………………………………………………-5-4 结束语………………………………………………………………………-7-参考文献………………………………………………………………………-8-附录 1 电路总
原理图...............................................................-9-附录 2 总程序 (10)
基于单片机控制的时钟控制器
摘要:本设计以Atmel公司的AT89S51单片机为控制系统的核心,模型采用单片机作为主控制器,以汇编语言为程序设计的基础,设计的一个用两个四位一体数码管串口显示的时钟控制电路,包含了时钟控制电路的基本功能:数码显示,时间调整,闹钟设定,秒表显示等,按照二十四小时循环,具有调节方便,简单实用,可靠性强的优点,有很高的利用价值。

关键词:单片机AT89C51 74LS245 数码管引言
数字钟是采用数字电路实现对时、分、秒及数字显示的计时装置,广泛用于个人家庭、车站、码头、办公室等公共场所,成为人们日常生活中不可少的必需品,由于数字集成电路的发展和石英晶体振荡器的广泛应用,使得数字钟的精度,远远超过老式钟表,钟表的数字化给人们生产生活带来了极大的方便,而且大大地扩展了钟表原先的报时功能。

诸如定时自动报警、按时自动打铃、时间程序自动控制、定时广播、自动起闭路灯、定时开关烘箱、通断动力设备、甚至各种定时电气的自动启用等,所有这些,都是以钟表数字化为基础的。

因此,研究数字钟及扩大其应用,有着非常现实的意义。

为了适应时代的潮流,本设计采用AT89S51单片机为核心,使得计时的精度有了很大的提高,而且调节也变的简单实用,采用数字显示也跟加的直观方便。

总体设计方案
2.1 设计思路
本设计采用AT89S51单片机为控制核心,产生精确的时钟震荡,来控制数码管显示电路来进行数码显示,外围电路主要有复位电路,震荡电路,按键电路,显示电路,蜂鸣电路组成;复位电路可及时的对单片机进行复位,恢复到初始的状态,震荡电路主要用于计数,定时,产生合适的波特率,按键电路主要是给人们提供一个合适的人机对话的界面,方便人们进行实时的调节,显示电路主要用于数码的显示,蜂鸣电路用于闹铃设定等辅助功能。

2.2 方案确立
本设计主要有包含了时钟电路,按键扫描,显示电路等几个部分。

由单片机实现时钟功能单片机内部具有定时器,可方便实现定时功能。

按键电路:键盘分为矩阵式键盘扫描电路和独立式按键电路。

矩阵式键盘电路,此类键盘是采用行列扫描方式,优点是当按键较多时可以降低占用单片机的I/O口数目,缺点是电路复杂且会加大编程难度。

独立按键电路,每个键单独占有一根I/O接口线,每个I/O口的工作状态互不影响,此类键盘采用端口直接扫描方式。

缺点是当按键较多时占用单片机的I/O数目较多,优点是电路设计简单,且编程极其容易。

由于该系统采用了常规钟表式的校对方式,用键较少,系统资源足够用,故采用了独立按键电路。

显示电路分为:静态显示法与动态显示法,由于静态显示法需要数据锁存器等硬件,接口复杂一些,又考虑到时钟显示只有6位,且系统没有其它复杂的处理任务,所以决定采用动态显示法。

2.3 硬件设计方框图
电路的设计以AT89S51单片机为核心,包含了按键电路,复位电路,震荡电路,数码显示电路,整点报时电路等一系列独立环节,下面介绍一下电路设计过程中的总体框图,如图1所示。

图1 时钟电路总体框图设计原理分析
用AT89S51单片机控制的数字时钟电路,外接震荡电路,按键电路,显示电路,蜂鸣电路等:用单片机电路P0口来输出7段码数据,P2.0~P2.5口作列扫描输出;按键用P1口控制,分别用于调节时,分,以及秒表和闹钟的设定;P1.7口接5V的小蜂鸣器,用于按键发音以及定时提醒,整点报时提醒等;采用74HC245作为数码管的段码驱动,为了提供共阳LED数码管的列扫描驱动电压,用三极管8550做电源的驱动输出;采用12MHZ晶振,可提高秒计时的精确性;在软件设计方面,应完成时钟控制电路的各项要求。

3.1 系统硬件电路设计
系统硬件电路主要组成:主控制器AT89S52、译码器74HC245、显示电路、蜂鸣器电路,复位电路时钟电路。

3.2 主控器件AT89C51 AT89S51是一款低功耗,高性能CMOS 8位单片机,片内含4k Bytes ISP(In-system programmable)的可反复擦写1000次的Flash只读程
序存储器,器件采用ATMEL公司的高密度、非易失性存储技术制造,兼容标准MCS-51指令系统及80C51引脚结构,芯片内集成了通用8位中央处理器和ISP Flash存储单元,AT89S51在众多嵌入式控制应用系统中得到广泛应用。

管脚如图2所示。

图2 DIP-40封装89C51引脚图
3.3译码器74LS245 74LS245是我们常用的芯片,用来驱动led 或者其他的设备,它是8路同相三态双向总线收发器,可双向传输数据。

74LS245还具有双向三态功能,既可以输出,也可以输入数据。

当89S51单片机的P0口总线负载达到或超过P0最大负载能力时,必须接入74LS245等总线驱动器。

当片选端/CE低电平有效时,DIR=“0”,信号由 B 向 A 传输;(接收)DIR=“1”,信号由 A 向B 传输;(发送)当CE为高电平时,A、B均为高阻态。

P0口与74LS245输入端相连,E端接地,保证数据线畅通。

管脚如图3所示。

图3 74LS245管脚图
3.4 显示电路
LED显示块是由发光二极管显示字段的显示器件。

这种显示块有共阴与共阳两种结构。

共阴极LED显示块的发光二极管阴极共地,当某个发光二极管的阳极为高电平时,发光二极管点亮。

共阳极LED显示块的放光二极管阳极并接。

显示块与单片机接口非常容易,只要将一个8位并行输出口语显示块的发光二极管引脚相连即可(AT89S51需要加上拉电阻)。

此次电路采用2个4位共阳LED数码管,从P0口输出段码,列扫描用P2.0~P2.7来实现。

如图4所示。

图4 74LS245驱动段码显示电路图
3.5 按键电路
按键调节电路有四个独立的按键接到P1口的P1.0—P1.3端口,控制着电路的调时,调分以及秒表功能和闹钟的设定。

具体电路如下图5所示。

图5 按键电路图
3.6 复位电路
AT89S51单片机的复位电路,如图5所示中左边电路。

在RESET
输入端出现高电平时实现复位和初始化。

在震荡器运行的情况下,要实现复位操作,必须使RST引脚至少保持两个机器周期的高电平。

在CPU在第二个机器周期内执行内部复位操作,以后每一个机器周期重复一次,直至RST端电平变低复位期间不产生ALE信号。

当RST引脚返回低电平以后,CPU从0地址开始执行程序。

3.7 蜂鸣电路蜂鸣器是广泛应用于各种电子产品的一种元器件,它用于提示、报警、音乐等许多应用场合。

三极管8550作蜂鸣器的驱动,增加了蜂鸣器的驱动电流。

蜂鸣器的正极性的一端接到三极管的集电极,另一端连接到地,三极管的基极由单片机的P1.7管脚控制,底电平时蜂鸣器响,高电平时不响。

另外,蜂鸣器的声音大小及音调可以通过调整P1.7管脚的置低时间及输出的波形进行控制。

蜂鸣器的连接电路的原理图如图5所示。

3.8 时钟电路
AT89S51内部片内有一个由反相放大器构成的振荡电路,XTAL1和XTAL2分别为震荡电路的输入端和输出端。

时钟可以由内部方式产生或外部方式产生。

在XTAL1和XTAL2引脚上外接定时元件,内部震荡电路就产生自己震荡。

定时元件通常采用石英晶体和电容组成的并联谐振回路。

外部方式的时钟电路,XTAL1接地,XTAL2接外部振荡器。

一般要求输入方波信号的频率低于33Mhz。

本文设计的系统采用的是内部方式的时钟电路。

如图6所示。

图6 时钟电路原理图
3.9 总体原理图
见附录1 3.10程序框图
主程序如图7所示首先是初始化部分,主要是计时单元清零,中断初始化,启动定时器工作,然后是调用显示子程序,接着是判断有无按键。

无按键则回到调用显示子程序处;有按键,则执行按键处理子程序,执行完后回到调用显示子程序处,重复循环。

定时器T0中断如图8所示
图7 主程序流程图
图8 中断程序流程图结束语
三周实习很快就过去了,通过自行设计、焊接和调试一个单片机
系统,我熟悉了单片机基本的开发流程和单片机的深入学习。

在完成这个设计的同时,我复习了书本上的许多相关内容,受益匪浅。

因此我在获得理论知识的同时,实践中也获得了许多书本上没有的东西。

提高了调试以及查找并解决问题的能力,我深入了解了焊普通元件与电路元件的技巧、数字时钟的工作原理及其它各电路元件的作用等。

这些知识不仅在课堂上有效,对以后的学习工作有很大的指导意义,在日常生活中更是有着现实意义;也对自己的动手能力是个很大的锻炼。

实践出真知,纵观古今,所有发明创造无一不是在实践中得到检验的。

没有足够的动手能力,就奢谈在未来的科研尤其是实验研究中有所成就。

最后,感谢老师对我们这次实习的辛勤指导和帮助。

参考文献
[1] 李光飞,楼然苗,胡佳文编著.单片机课程设计实例指导.北京:北京航空航天大学出版社.2004 [2] 黄仁欣主编.单片机原理及应用技术.北京:清华大学出版社.2005.[3] 高吉祥主编.电子技术基础实验与课程设计.北京:电子工业出版社.2002 [4] 肖玲妮.印刷电路板设计教程.[M].北京:清华大学出版社,2003.[5] 康华光.电子技术基础.[M].北京;高等教育出版社,2006.[6] 余小平等.电子系统设计.[M].北京:北京航空航天大学出版社,2007.附录1: 11 电路总原理图
附录2:总程序
ORG 0000H LJMP START ORG 000BH LJMP INIT0 START: MOV 70H,#0 MOV 71H,#0 MOV 72H,#0 MOV 73H,#0 MOV 74H,#0 MOV 75H,#0 MOV 76H,#0 MOV 77H,#0 MOV 78H,#0 MOV 79H,#0 MOV 7AH,#0 MOV 7BH,#0 MOV 7CH,#0 MOV 7DH,#0 MOV 7EH,#0 MOV 72H,#0AH;对连字符进行装值MOV 75H,#0AH MOV 60H,#0 MOV 61H,#0 MOV 63H,#0 MOV 64H,#0 CLR P1.7 MOV TMOD,#01H;选择定时器/计数器T0的方式1 MOV TL0,#0B0H;对低位赋初值 MOV TH0,#03CH;高位赋初值SETB EA SETB ET0 SETB TR0 START1: LCALL SCAN LCALL KEYSCAN SJMP START1 DL1MS: MOV R6,#14H;延时1子程序 DL1: MOV R7,#19H DL2: DJNZ R7,DL2 DJNZ R6,DL1 RET DELAY: MOV
R6,#10 D1: MOV R7,#30 DJNZ R7,$ DJNZ R6,D1 RET
DL20MS: ACALL SCAN;延时20ms子程序 ACALL SCAN ACALL SCAN RET
;整点报时将秒和分的单元与零比较SCAN: MOV A,7EH;7F单元的内容为0
CJNE A,79H,NEXT MOV A,7DH
CJNE A,7AH,NEXT SETB P1.7 AJMP NEXT1 NEXT: CLR P1.7 NEXT1:
MOV A,79H
CJNE A,#0,NEXT2 MOV A,78H
CJNE A,#0,NEXT2 SETB P1.7 LJMP NEXT3 NEXT2:CLR P1.7
;数码管总显示程序开始分两部分
;校正时间和数码管正常工作的显示程序NEXT3: MOV A,78H MOV B,#0AH
DIV AB;时间秒的十位送给A,时间秒的个位送B
MOV 71H,A;时间秒要显示的十位
MOV 70H,B;时间秒要显示的个位
MOV A,79H MOV B,#0AH
DIV AB;时间分的十位送给A,时间分的个位送B
MOV 74H,A;时间分要显示的十位送地址
MOV 73H,B;时间分要显示的个位送地址
MOV A,7AH MOV B,#0AH DIV AB;时间时的十位送给A,时间时的个位送B MOV 77H,A;时间时显示的十位送地址
MOV 76H,B;时间时要显示的个位送地址
MOV R1,#70H LCALL DL1MS JB P1.2,LAST HERE3:JNB P1.2,HERE3 INC 7EH MOV A,7EH
CJNE A,#3CH,LOOP3 MOV 7EH,#00H;调制闹铃的时间显示LOOP3: MOV DPTR,#TAB MOV R5,#0FEH MOV A,7DH MOV R3,#09H
MOV B,#10 SCAN1: MOV A,R5;数码管正常工作的显 DIV AB 示
程序
MOV 64H,A MOV P2,A MOV 63H,B MOV A,@R1 MOV A,7EH MOV DPTR,#TAB
MOV B,#10 MOVC A,@A+DPTR;对字段表取值 DIV AB 显示
MOV 61H,A MOV P0,A MOV 60H,B MOV A,R5 MOV P2,#0F7H LCALL DL1MS MOV A,60H INC R1 MOVC A,@A+DPTR MOV A,R5 MOV P0,A RL A LCALL DELAY MOV R5,A MOV P2,#0EFH DJNZ R3,SCAN1 MOV A,61H MOV P2,#00H MOVC A,@A+DPTR MOV P0,#00H MOV P0,A JB P1.3,QQ LCALL DELAY LCALL DL1MS MOV P2,#0DFH JB P1.3,QQ MOV P0,#40H HERE: JNB P1.3,HERE LCALL DELAY SJMP LOOP1 MOV P2,#0BFH MOV A,63H QQ: LJMP LAST MOVC A,@A+DPTR LOOP1:JB P1.1,LOOP2 MOV P0,A LCALL DL1MS LCALL DELAY JB P1.1,LOOP2 MOV P2,#07FH HERE1:JNB P1.1,HERE1 MOV A,64H INC 7DH MOVC A,@A+DPTR MOV A,7DH
MOV P0,A CJNE A,#18H,LOOP2 LCALL DELAY MOV 7DH,#00H JB P1.3,LOOP4 LOOP2:JB P1.2,LOOP3 LCALL DL1MS 14 JB P1.3,LOOP4 HERE4:JNB P1.3,HERE4 LJMP LAST LOOP4:LJMP LOOP1 LAST: RET;“0~9”和“-”的字段表 TAB:
DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,40H
;定时/计数器T0中断程序 INIT0: PUSH ACC PUSH PSW CLR ET0 CLR TR0 MOV TL0,#0B0H MOV TH0,#03CH SETB TR0 INC 7BH MOV A,7BH CJNE A,#14H,OUTT0;50ms是否到20次,没有到就继续执行50ms的延时
MOV 7BH,#00 INC 78H MOV A,78H CJNE A,#3CH,OUTT0;一秒的延时是否计到60次,没有就继续执行
MOV 78H,#00 INC 79H MOV A,79H CJNE A,#3CH,OUTT0 MOV 79H,#00 INC 7AH MOV A,7AH CJNE A,#18H,OUTT0;60分钟的延时是否计到24次,没有就继续执行程序MOV 7AH,#00 OUTT0: SETB ET0;启动定时器T0 POP PSW POP ACC RETI;按键处理
程序 KEYSCAN:CLR EA
JNB P1.0,KEYSCAN0;P1.0有按键按下则跳转到子程序
JNB P1.1,KEYSCAN1;P1.1有按键按下则跳转到子程序
JNB P1.2,KEYSCAN2;P1.2有按键按下则跳转到子程序
KEYOUT: SETB EA RET
KEYSCAN0:LCALL DL20MS;20ms的延时消抖
JB P1.0,KEYOUT WAIT0: JNB P1.0,WAIT0;判断按键是否松手,松手就往下执行程序 INC 7CH MOV A,7CH CLR ET0 CLR TR0 CJNE A,#04H,KEYOUT;按下第一次和第二次对时、分选定
MOV 7CH,#00;按下第三次时就启动计时
SETB ET0 SETB TR0 LJMP KEYOUT
KEYSCAN1:LCALL DL20MS;按键加一的程序
JB P1.1,KEYOUT WAIT1: JNB P1.1,WAIT1 MOV A,7CH
CJNE A,#03H,KSCAN11;如果功能键按下则对时加一调整INC 78H MOV A,78H
CJNE A,#60,KEYOUT MOV 78H,#00 LJMP KEYOUT
KSCAN11: CJNE A,#02H,KSCAN12 INC 79H MOV A,79H
CJNE A,#60,KEYOUT;如果加到60则清零
MOV 79H,#00 LJMP KEYOUT KSCAN12:CJNE A,#01H,KEYOUT INC 7AH;如果功能键是按下第二次则对分进行加一调整
MOV A,7AH CJNE A,#18H,KEYOUT MOV 7AH,#00 LJMP KEYOUT KEYSCAN2:LCALL DL20MS;延时消抖程序 JB P1.2,KEYOUT WAIT2: JNB P1.2,WAIT2;判断是否放开按键
MOV A,7CH;如果功能键是按下第一次对时进行减一CJNE A,#03H,KSCAN22 DEC 78H MOV A,78H CJNE A,#00H,KEYOUT MOV 78H,#3BH LJMP KEYOUT KSCAN22:CJNE A,#02H,KSCAN23 DEC 79H MOV A,79H CJNE A,#00H,KEYOUT1 MOV 79H,#3BH LJMP KEYOUT KSCAN23:CJNE A,#01H,KEYOUT1 DEC 7AH MOV A,7AH;如果功能键是按下第二次则对分进行减一CJNE
A,#00H,KEYOUT1 MOV 7AH,#17H LJMP KEYOUT1 KEYOUT1: SETB EA RET END
第三篇:单片机课程设计电子时钟说明书
《电子时钟》课程设计说明书
专业班级:
11级自动化<3>班

名:欧阳明长李徐军
陈龙
指导教师:


设计时间:
2013--12--17
物理与电气工程学院
2013年12月17日
摘要
电子钟在生活中应用非常广泛,而一种简单方便的数字电子钟则更能受到人们的欢迎。

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

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

该电子钟设有四个按键S12、S13、S14和S15键,进行相应的操作就可实现小时调整、分钟调整和启停功能。

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

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

关键词电子钟;AT89S52;硬件设计;软件设计
目录设计课题任务、功能要求说明及方案介绍……………………………………3 1.1 设计课题任务………………………………………………………………3 1.2 功能要求说
明………………………………………………………………3 1.3 设计总体方案介绍及原理说明……………………………………………3 2 设计课题硬件系统的设计………………………………………………………3 2.1 设计课题硬件系统各模块功能简要介绍…………………………………4 3 设计课题软件系统的设计………………………………………………………4 3.1 设计课题软件系统各模块功能简要介绍…………………………………4 3.2 设计课题软件系统程序流程框图…………………………………………4 4 设计结论、仿真结果、误差分析………………………………………………7 4.1 设计课题的设计结论及使用说明…………………………………………4 4.2 设计课题的误差分析………………………………………………………7 4.3 设计体会……………………………………………………………………7 参考文献……………………………………………………………………………7 附录……………………………………………………………………………8 1 设计课题任务、功能要求说明及方案介绍
1.1 设计课题任务
设计一个具有特定功能的电子钟。

具有启停、时间显示、报时等功能。

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

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

电子钟上电从12时0分0秒开始运行,按下启停键进入时钟运行状态;再按启停键暂停运行,并且再次按下时能够在原来的时间上继续计时;运行到整点是能够自动响铃,通过外部按键可以进行实践的调整,并且在运行时相应的LED灯等同步亮灭。

1.3 设计课题总体方案介绍及工作原理说明
本电子钟主要由单片机、4*4独立键盘、显示接口电路和电源电路构成,设计课题的总体方案如图1.1所示:
图1.1 总体设计方案图
本电子钟的所有的程序、参数均存放在AT89S52的内部RAM中。

键盘采用动态扫描方式。

利用单片机定时器产生定时效果通过编程形成数字钟效果,再利用数码管动态扫描显示单片机内部处理的数据,
同时通过端口读入当前外部控制状态来改变程序的不同状态,实现不同功能。

设计课题硬件系统的设计2.1 设计课题硬件系统各模块功能简要介绍
本设计的硬件系统主要采用以下基本模块来实现,单片机最小系统模块,输入模块、输出模块、电源模块。

(1)单片机最小系统模块:包括8位微控制器AT89S52;电源复位电路;晶振电路。

本模块AT89S52系统控制核心,单片机系统复位由电源上电完成。

(2)输入模块:本模块共用到了4个按键(S12、S13、S14、S15),分别完成时间的调整、启停。

1个电源开关(具有复位功能)。

(3)输出模块:本次设计显示为8位,采用两个四位一体数码管(共阳极)8个PNP三极管驱动,并且还有蜂鸣器模块。

(4)电源模块:USB供电及下载器。

设计课题软件系统的设计
3.1 设计课题软件系统个模块功能简要介绍
本设计的软件系统主要采用以下基本模块来实现,主程序、中断服务程序、键盘输入程序模块、数码管及其驱动模块和延时模块。

主程序:主要是用于对输入信号的处理、输出信号的控制和对各个功能程序模块的控制。

中断服务程序:主要是用于电子钟的1S延时。

键盘输入程序模块:主要是用于完成特定时间调整。

数码管及其驱动模块:主要是用于驱动数码管及利用数码管显示时间。

延时模块:短延时用于数据的动态显示,按键的判断。

3.2 设计课题软件系统程序流程框图
系统程序采用汇编语言按模块化方式进行设计,然后通过Keil软件开发平台将程序转变成可烧写文件。

主循环程序框图如3.1所示;判断进位程序如3.2所示;计时一秒中断程序如3.3所示;启停中断框图如3.4所示;延时子程序框图如3.5所示;图3.1 主循环程序 5
图3.2 判断进位子程序。

相关文档
最新文档