单片机数字电子钟汇编课程设计.docx
- 文档编号:26405935
- 上传时间:2023-06-19
- 格式:DOCX
- 页数:42
- 大小:598.02KB
单片机数字电子钟汇编课程设计.docx
《单片机数字电子钟汇编课程设计.docx》由会员分享,可在线阅读,更多相关《单片机数字电子钟汇编课程设计.docx(42页珍藏版)》请在冰豆网上搜索。
单片机数字电子钟汇编课程设计
个性化电子钟课程设计
学院材料与能源学院
专业微电子科学与工程
年级班别2013级2班
学生姓名馥语甄心
一、设计任务书.....................................P1
二、个性化电子钟功能...............................P2
三、单片机系统原理图和工作原理描述.................P4
四、电路原理图设计.................................P11
五、程序模块图.....................................P12
六、程序清单.......................................P13
七、设计或调试的过程中遇到的问题及解决方法.........P27
八、测试数据与误差校准.............................P29
九、收获与体会.....................................P30
1、设计任务书
1.AT89S51CPU,12MHZ时钟,常规上电和手动复位电路。
2.4位LED数码显示器(带钟点),分别显示“小时:
分钟”或“分钟:
秒”
3.3个独立试按键,具体功能描述如下:
[MODE]——模式转换键,具有“正常——小时(校准)——分钟(校准)——小时(闹铃)——分钟(闹铃)”等5种模式,每按一次,转换一种模式。
假设当前处于正常模式,按一下此键,“小时”闪烁,表示进入“小时”调校模式,再按一次,转入分钟模式,如此类推,正常模式下不闪烁。
[UP]——加“1”键,按下此键,被选中的项目加“1”
[DOWN]——减“1”键,按下此键,被选中的项目减“1”
4.设计1路蜂鸣器输出驱动电路,用于报警或按键声
5.电源:
9V交流输入,全波整流,滤波,7805稳压电路,输出5V直流电源共给单片机系统。
6.编写数字电字钟的所有软件,包括主程序,定时器中断计时程序,定时器中断扫描显示程序,键盘扫描及功能程序,BCD码转换程序,“二翻十﹑拆字﹑转码”程序,闹铃程序等等。
将这些程序整合成一个完整的电子钟程序,在软件模拟器上调试,在MCS51学习机上调试,并测试其功能及性能。
7.在程序调试通过后,测试计时精度,分析误差来源,提出补偿方法,
用数据说明补偿前后计时精度。
2、个性化电子钟功能
按键说明:
K6
MODE
校准功能模式键
时钟校准、设置闹钟参数(6种)
K5
UP
加1键
按下,对应的参数加1
K4
DOWN
减1键
按下,对应的参数减1
K3
CHOICE
显示选择键
选择要显示的界面(5种)
K1
REST
复位键
恢复初始状态
CHOICE
(K3)
0小时:
分钟(系统)
MODE
(K6)
0加减不改变显示
1分钟:
秒(系统)
1系统小时校准
2小时:
分钟(闹钟)
2系统分钟校准
3闹铃重响时间
3系统秒校准
4秒表
4闹钟小时校准
DOWN
减1
5闹钟分钟校准
秒表启动(秒表状态,MODE0)
6重响时间设置
停重响闹钟
UP
加1
禁止重响下,先按UP,再按DOWN停闹钟(MODE0)
秒表复位
停第一次闹钟(MODE0)
1.常规上电和手动复位(K1)
2.CHOICE按键:
4位LED数码显示器(带钟点),共5种显示选择:
分别显示“小时:
分钟”、“分钟:
秒”、闹钟的“小时:
分钟”、“N分钟都响铃设置”、“秒表”
3.MODE按键:
共有6种模式,“小时校准(闪烁)”、“分钟校准(闪烁)”、“秒校准(闪烁)”、“小时闹铃校准(闪烁)”、“分钟闹铃校准(闪烁)”、“闹钟重响时间设置”
4.UP按键:
按下,对应的项目加1(MODE0模式下,可以停止闹钟或者复位秒表)
DOWN按键:
按下,对应的项目减1(MODE0模式下,可以启动或停止秒表或者停止重响的闹钟
5.用P1.6口驱动1路蜂鸣器电路,用于闹钟响铃和按键声、满1分钟报警(滴一下)、满1小时报警(滴一下)
6.闹钟功能:
闹钟设置:
通过UP和DOWN键,调节好闹钟的小时和分钟,在设置N分钟后重响。
本程序设置的闹钟可选择一次的N分钟后重响,如果不想要这个功能,则在用户设置RECL_CNT(N分钟重响变量)时候,设为0,即可。
本闹钟最大可以设置59分钟后重响(太久了也用处不大)
闹钟的关闭:
如果设置的分钟重响变量为0,MODE按键处于模式0(此时的UP键和DOWN键不会改变系统时间),先按一下UP键,再按一下DOWN键,即可关闭闹钟,不会重响。
如果设置的分钟重响变量不是0,MODE按键处于模式0,第一次响铃按一下UP键停止闹钟,N分钟后重响,第二次响铃,按一下DOWN键,则关闭闹钟
7.用LED灯指示当前所选择的模式,模式1-6分别对应LED灯D1-D6,模式0对应D8(这样方便看出自己当前选择的是那种功能调节模式)
8.满1分钟提示音、满1小时提示音、按键音
9.钟点闪烁,以500ms闪烁一次的频率进行闪烁
10.秒表功能:
选择MODE0模式下选择CHOICE4,即为秒表界面,按下DOWN键,启动秒表或者停止秒表;按下UP键,使秒表复位
三、单片机系统原理图及工作原理描述
1)CPU电路
中央处理器(CPU)是整个单片机的核心部件,是8位数据宽度的处理器,能处理8位二进制数据或代码,CPU负责控制、指挥和调度整个单元系统协调的工作,完成运算和控制输入输出功能等操作。
1、电源类引脚
VCC(40脚):
接+5 V电源正端。
VSS(20脚):
接地端。
2、时钟类引脚
XTAL1(19脚)和XTAL2(18脚):
接外部石英晶体的一端。
P0口(39~32脚):
P0.0~P0.7统称为P0口。
P1口(1~8脚):
P1.0~P1.7统称为P1口,可作为准双向I/O口使用。
P2口(21~28脚):
P2.0~P2.7统称为P2口,一般可作为准双向I/O口使用。
P3口(10~17脚):
P3.0~P3.7统称为P3口。
表3P3.0口的第二功能:
口线
功能描述
P3.0
RXD(串行数据输入线)
P3.1
TXD(串行数据输出线)
P3.2
INT0(外部中断0输入引脚)
P3.3
INT1(外部中断1输入引脚)
P3.4
T0(定时器/计数器0的外部输入引脚)
P3.5
T1定时器/计数器0的外部输入引脚)
P3.6
WR(外部数据存储器写选通信号引脚)
P3.7
RD(外部数据存储器读选通信号引脚)
3、控制引脚
RST/VPP(9脚):
复位引脚,引脚上出现2个机器周期的高电平将使单片机复位。
LE/PROG(30脚):
地址锁存允许信号。
PSEN(29角):
外部存储器读选通信号。
EA/Vpp(31角):
程序存储器的内外部选通,接低电平从外部程序存储器读指令,如果接高电平则从内部程序存储器读指令
2)复位电路
单片机在启动时都需要复位,以使CPU及系统各部件处于确定的初始状态,并从初态开始工作。
89系列单片机的复位信号是从RST引脚输入到芯片内的施密特触发器中的。
当系统处于正常工作状态时,且振荡器稳定后,如果RST引脚上有一个高电平并维持2个机器周期(24个振荡周期)以上,则CPU就可以响应并将系统复位。
单片机系统的复位方式有:
手动按钮复位和上电复位。
1、手动按钮复位
手动按钮复位需要人为在复位输入端RST上加入高电平。
一般采用的办法是在RST端和正电源Vcc之间接一个按钮。
当人为按下按钮时,则Vcc的+5V电平会直接加到RST端。
手动按钮复位的电路如所示。
由于人的动作再快也会使按钮保持接通达数十毫秒,所以,完全能够满足复位的时间要求。
2、上电复位
AT89C51芯片的上电复位电路,只要在RST复位输入引脚上接一电容至Vcc端,下接一个电阻到地即可。
对于CMOS型单片机,由于在RST端内部有一个下拉电阻,故可将外部电阻去掉,而将外接电容减至22μF。
上电复位的工作过程是在加电时,复位电路通过电容加给RST端一个短暂的高电平信号,此高电平信号随着Vcc对电容的充电过程而逐渐回落,即RST端的高电平持续时间取决于电容的充电时间。
为了保证系统能够可靠地复位,RST端的高电平信号必须维持足够长的时间。
上电时,Vcc的上升时间约为10ms,而振荡器的起振时间取决于振荡频率,如晶振频率为10MHz,起振时间为1ms;晶振频率为1MHz,起振时间则为10ms。
在上图的复位电路中,当Vcc掉电时,必然会使RST端电压迅速下降到0V以下,但是,由于内部电路的限制作用,这个负电压将不会对器件产生损害。
另外,在复位期间,端口引脚处于随机状态,复位后,系统将端口置为全“l”态。
如果系统在上电时得不到有效的复位,则程序计数器PC将得不到一个合适的初值,因此,CPU可能会从一个未被定义的位置开始执行程序。
开发板采用的是按下K1键,即可手动复位,让程序恢复初始状态
3)时钟电路
单片机要不断的从程序存储器中取出指令并执行,这些执行步骤是按节拍进行的,时钟电路就是提供CPU运行节拍的电路。
AT89C51的时钟电路可以由内部或外部两种方式产生。
AT89C51内部具有一个振荡电路,内部方式就是利用该电路在XTAL.1和XTAL.2两引脚之间外接晶振和电容C1、C2构成并联谐振电路,使内部震荡产生自激振荡如图所示。
晶振频率可选择1.2-10MHZ,电容可选则15-100PF,以对时钟频率起微调作用。
2、CPU时序的周期单位
通过之中振荡电路,单片机的每一步工作都按照一定的节拍进行,步调得到同意.描述MCS-51系列单片机的时序单位有4中,即时钟周期.状态周期,机器周期和指令周期。
时钟周期P:
既振荡周期,是MCS-51系列单片机的最小时序单位.例如:
若时钟频率F=12MHZ,则时钟周期=1/F=0.0833us。
状态周期S:
连续两个振荡周期为一个状态周期。
机器周期:
单片机完成某种基本操作的时间称为机器周期。
一个机器周期由6个状态周期(12个振荡周期)构成。
指令周期:
执行一条指令所需要的时间。
MCS-51的指令周期一般需要1或2个机器周期,乘,除法指令为4个机器周期。
若采用上例钟12MHZ的晶振,则执行一条指令相应地需要1us,2us或4us。
晶振频率越高,指令执行的速度越快。
4)七段数码管的引脚图及使用
数码管使用条件:
a、段及小数点上加限流电阻。
b、使用电压:
段:
根据发光颜色决定;小数点:
根据发光颜色决定。
c、使用电流:
静态:
总电流80mA(每段10mA);动态:
平均电流4-5mA峰值电流100mA。
上面这个只是七段数码管引脚图,其中共阳极数码管引脚图和共阴极的是一样的。
LED数码管根据LED的接法不同分为共阴和共阳两类,右图是共阴和共阳极数码管的内部电路,它们的发光原理是一样的,只是它们的电源极性不同而已。
将多只LED的阴极连在一起即为共阴式,而将多只LED的阳极连在一起即为共阳式。
以共阴式为例,如把阴极接地,在相应段的阳极接上正电源,该段即会发光。
当然,LED的电流通常较小,一般均需在回路中接上限流电阻。
假如我们将"b"和"c"段接上正电源,其它端接地或悬空,那么"b"和"c"段发光,此时,数码管显示将显示数字“1”。
而将"a"、"b"、"d"、"e"和"g"段都接上正电源,其它引脚悬空,此时数码管将显示“2”。
其它字符的显示原理类同。
我们的开发板用的数码管是共阳极的,由P0和P2共同控制,通过5ms中断来依次使4个管对应的口为低电平,即可达到同时显示4个数码管的要求
5)蜂鸣器电路
为了避免冲突,这次我采用的是P1.6输出方波来驱动蜂鸣器,所以用P1.6连接途中的2位置
6)电源电路
7)按键电路
P3.2~P3.6分别对应控制按键K6~K3,按键按下,则对应的P3口置为低电平
4、电路原理图设计
5、程序模块框图
系统初始化
定时器初始化
是否按下按键
K6
模式
对应项目加1
K5
加1
K4
减1
K3
选择
K1
复位
回复初始
5种显示选择模式
对应项目减1
6种功能校准模式选择
正常显示数码管内容
设置完成
是
否
秒、分、时计时
控制数码管亮
(秒表计时)
20ms中断
5ms中断
六、程序清单
LED1EQU7FH
LED2EQU7EH
LED3EQU7DH
LED4EQU7CH
H_MEMEQU7BH;系统小时
M_MEMEQU7AH;系统分钟
S_MEMEQU79H;系统秒
MODE_REGEQU78H;模式值
INT_CNTEQU77H;计时中断计数变量
SCAN_CNTEQU76H;显示扫描变量
TEMPEQU75H
H_CLEQU74H;闹钟小时
M_CLEQU73H;闹钟分钟
FLASH_BITEQU72H;小数点值
CHOICEEQU71H;选择值
CHOICE_ALLAEQU70H;“分钟”位置显示变量
CHOICE_ALLBEQU69H;“小时”位置显示变量
CL_CNTEQU68H;闹钟重响判断变量
RECL_CNTEQU67H;闹钟重响时间变量
SEC_CNT1EQU66H
SEC_CNT2EQU65H
SEC_CNT3EQU64H
ORG0000H
LJMPMAIN
ORG0003H
RETI
ORG000BH
LJMPINT_T0
ORG0013H
RETI
ORG001BH
LJMPINT_T1
ORG0023H
RETI
;-----------------------主程序初始化----------------------
ORG0030H
MAIN:
MOVSP,#2FH
MOVH_MEM,#1
MOVM_MEM,#0
MOVS_MEM,#0
MOVINT_CNT,#26
MOVSCAN_CNT,#0
MOVH_CL,#0
MOVM_CL,#0
MOVCHOICE,#0
MOVMODE_REG,#0
MOVCL_CNT,#3D
MOVCL_CNT,#3DH;各种参数初始化
MOVSEC_CNT1,#0
MOVSEC_CNT2,#0
MOVSEC_CNT3,#0
SETBET0;开放T0中断
SETBET1;开放T1中断
SETBEA;开放总中断控制
SETBPT0;计时优先
MOVTL0,#0E0H
MOVTH0,#0B1H;设置20ms定时初值
MOVTL1,#78H
MOVTH1,#0ECH;设置5ms定时初值
MOVTMOD,#00010001B;使T1、T2处于工作方式1
SETBTR0;开放T0中断
SETBTR1;开放T1中断
;-------------主程序,无限循环-----------------
WAIT:
LCALLKEY_SCAN;调用按键扫描子程序
LCALLCONVERT_BCD;调用拆字转码子程序
SJMPWAIT;原地等待中断来临
;---------------数码管显示子程序---------------------------
CONVERT_BCD:
MOVR2,#0
LCALLWHICH_CHOICE;判断当前的显示选择
MOVR3,CHOICE_ALLA;CHOICE_ALLA内容显示
LCALLBTID;调用二翻十子程序
MOVA,R6
ANLA,#0FH;取低4位
MOVDPTR,#LED_CODE
MOVCA,@A+DPTR
MOVLED1,A;在LED1显示
MOVA,R6
ANLA,#0F0H;取高4位
SWAPA
MOVCA,@A+DPTR
MOVLED2,A;在LED2显示
MOVR2,#0
MOVR3,CHOICE_ALLB;CHOICE_ALLB内容显示
LCALLBTID;调用二翻十子程序
MOVA,R6
ANLA,#0FH;取低4位
MOVCA,@A+DPTR
MOVC,FLASH_BIT
MOVACC.7,C;LED3的小数点显示
MOVLED3,A;在LED3显示
MOVA,R6
ANLA,#0F0H;取高4位
SWAPA
MOVCA,@A+DPTR
MOVLED4,A;在LED4显示
RET
;-----------------------T0=20ms中断---------------------------------
INT_T0:
PUSHACC
PUSHPSW;入栈保护
MOVTL0,#0E0H
MOVTH0,#0B1H;重新装载20ms中断初值
DJNZINT_CNT,T0_EXIT;判断跑够500ms没有
MOVINT_CNT,#23;够了,重新再跑500ms
CPLFLASH_BIT;让小数点亮
JNBFLASH_BIT,T0_EXIT;判断小数点是否亮,亮,返回
LCALLDELAY5MS
INCS_MEM;再跑了500ms,小数点灭,秒加1
MOVA,S_MEM
CJNEA,#60,T0_EXIT;判断秒是否超过60
MOVS_MEM,#0;超过,秒清零
INCM_MEM;分加1
LCALLSOUND;发出满1分钟提示音
MOVA,M_MEM
CJNEA,#60,T0_EXIT;判断分钟是否超过60
MOVM_MEM,#0;超过,分钟清0
INCH_MEM;小时加1
LCALLSOUND;发出满1小时提示音
MOVA,H_MEM
CJNEA,#24,T0_EXIT;判断小时是否超过24
MOVH_MEM,#0;超过,小时清零
T0_EXIT:
POPPSW
POPACC
RETI
SOUND1:
CLRP1.6
LCALLDELAY1MS
SETBP1.6
LCALLDELAY1MS;发出声音
;-----------------------T1=5毫秒中断,4个数码管轮流显示--------------------------------
;用得是共阳极数码管,由P0和P2共同控制,每一次5ms中断依次使P2.3~P2.0分别为低电平,LED1~LED4依次给P0输出,从而实现了每个5ms让一个数码管亮,轮流来,由于频率快,就实现了视觉上的4个数码管同时亮
INT_T1:
PUSHACC
PUSHPSW
PUSHDPL
PUSHDPH
MOVTL1,#78H;5毫秒中断
MOVTH1,#0ECH
SETBRS0;切换键区
LCALLSECOND
MOVDPTR,#SCAN_TABLE
MOVA,SCAN_CNT
ADDA,SCAN_CNT;乘以2(0、2、4、6)调整偏移量
MOVR1,A
MOVCA,@A+DPTR
MOVR0,A
MOVA,@R0
MOVP0,A;把LED1给P0口
INCDPTR
MOVA,R1
MOVCA,@A+DPTR
MOVP2,A;把让P3.3为低电平,驱动数码管
INCSCAN_CNT
MOVA,SCAN_CNT
CJNEA,#4,T1_EXIT
MOVSCAN_CNT,#0
T1_EXIT:
POPDPH
POPDPL
POPPSW
POPACC
RETI
;秒表程序
SECOND:
MOVA,CHOICE
CJNEA,#4,SEC_EXIT
MOVA,MODE_REG
CJNEA,#0,SEC_EXIT
JNBP3.3,SEC_RESET;处于模式0,选择秒表显示,按下DOWN键
JNBP3.4,SET1
JBP3.0,SEC_EXIT
INCSEC_CNT1
MOVA,SEC_CNT1
CJNEA,#4,SEC_EXIT;判断是否够20ms
INCSEC_CNT2;够,秒秒显示加1(显示的1分度就是20ms)
MOVSEC_CNT1,#0
MOVA,SEC_CNT2
CJNEA,#48,SEC_EXIT;判断是否够1s
MOVSEC_CNT2,#0;够,秒秒清零
INCSEC_CNT3;秒加1
MOVA,SEC_CNT3
CJNEA,#60,SEC_EXIT;判断秒是否超过60
MOVSEC_CNT3,#0;超过,秒清零
RET
SET1:
CPLP3.0;取反电平
RET
SEC_RESET:
MOVSEC_CNT1,#0;秒表复位
MOVSEC_CNT2,#0
MOVSEC_CNT3,#0
SEC_EXIT:
RETI
;----------------按键扫描子程序------------
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 单片机 数字 电子钟 汇编 课程设计