1个性化电子钟课程设计学院材料与能源学院专业微电子科学与工程年级班别2013级2班学生姓名馥语甄心2目录一、设计任务书.....................................P1二、个性化电子钟功能...............................P2三、单片机系统原理图和工作原理描述.................P4四、电路原理图设计.................................P11五、程序模块图.....................................P12六、程序清单.......................................P13七、设计或调试的过程中遇到的问题及解决方法.........P27八、测试数据与误差校准.............................P29九、收获与体会.....................................P301一、设计任务书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二、个性化电子钟功能按键说明:K6MODE校准功能模式键时钟校准、设置闹钟参数(6种)K5UP加1键按下,对应的参数加1K4DOWN减1键按下,对应的参数减1K3CHOICE显示选择键选择要显示的界面(5种)K1REST复位键恢复初始状态CHOICE(K3)0小时:分钟(系统)MODE(K6)0加减不改变显示1分钟:秒(系统)1系统小时校准2小时:分钟(闹钟)2系统分钟校准3闹铃重响时间3系统秒校准4秒表4闹钟小时校准DOWN减15闹钟分钟校准秒表启动(秒表状态,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小时报警(滴一下)36.闹钟功能:闹钟设置:通过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键,使秒表复位4三、单片机系统原理图及工作原理描述1)CPU电路中央处理器(CPU)是整个单片机的核心部件,是8位数据宽度的处理器,能处理8位二进制数据或代码,CPU负责控制、指挥和调度整个单元系统协调的工作,完成运算和控制输入输出功能等操作。1、电源类引脚VCC(40脚):接+5V电源正端。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.0RXD(串行数据输入线)P3.1TXD(串行数据输出线)P3.2INT0(外部中断0输入引脚)P3.3INT1(外部中断1输入引脚)P3.4T0(定时器/计数器0的外部输入引脚)P3.5T1定时器/计数器0的外部输入引脚)5P3.6WR(外部数据存储器写选通信号引脚)P3.7RD(外部数据存储器读选通信号引脚)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端。手动按钮复位的电路如所示。由于人的动作再快也会使按钮保6持接通达数十毫秒,所以,完全能够满足复位的时间要求。2、上电复位3)时钟电路单片机要不断的从程序存储器中取出指令并执行,这些执行步骤是按节拍进行的,时钟电路就是提供CPU运行节拍的电路。AT89C51的时钟电路可以由内部或外部两种方式产生。AT89C51内部具有一个振荡电路,内部方式就是利用该电路在XTAL.1和XTAL.2两引脚之间外接晶振和电容C1、C2构成并联谐振电路,使内部震荡产生自激振荡如图所示。晶振频率可选择1.2-10MHZ,电容可选则15-100PF,以对时钟频率起微调作用。2、CPU时序的周期单位通过之中振荡电路,单片机的每一步工作都按照一定的节拍进行,步调得到同意.描述MCS-51系列单片机的时序单位有4中,即时钟周期.状态周期,机器周期和指令周期。时钟周期P:既振荡周期,是MCS-51系列单片机的最小时序单位.例如:若时钟频7率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的电流通常较小,一般均需在回路中接上限流电阻。假如我们8将b和c段接上正电源,其它端接地或悬空,那么b和c段发光,此时,数码管显示将显示数字“1”。而将a、b、d、e和g段都接上正电源,其它引脚悬空,此时数码管将显示“2”。其它字符的显示原理类同。我们的开发板用的数码管是共阳极的,由P0和P2共同控制,通过5ms中断来依次使4个管对应的口为低电平,即可达到同时显示4个数码管的要求5)蜂鸣器电路为了避免冲突,这次我采用的是P1.6输出方波来驱动蜂鸣器,所以用P1.6连接途中的2位置6)电源电路97)按键电路P3.2~P3.6分别对应控制按键K6~K3,按键按下,则对应的P3口置为低电平10四、电路原理图设计11五、程序模块框图12六、程序清单13LED1EQU7FHLED2EQU7EHLED3EQU7DHLED4EQU7CHH_MEMEQU7BH;系统小时M_MEMEQU7AH;系统分钟S_MEMEQU79H;系统秒MODE_REGEQU78H;模式值INT_CNTEQU77H;计时中断计数变量SCAN_CNTEQU76H;显示扫描变量TEMPEQU75HH_CLEQU74H;闹钟小时M_CLEQU73H;闹钟分钟FLASH_BITEQU72H;小数点值CHOICEEQU71H;选择值CHOICE_ALLAEQU70H;“分钟”位置显示变量CHOICE_ALLBEQU69H;“小时”位置显示变量CL_CNTEQU68H;闹钟重响判断变量RECL_CNTEQU67H;闹钟重响时间变量SEC_CNT1EQU66HSEC_CNT2EQU65HSEC_CNT3EQU64HORG0000HLJMPMAINORG0003HRETIORG000BHLJMPINT_T0ORG0013HRETIORG001BHLJMPINT_T1ORG0023HRETI;-----------------------主程序初始化----------------------14ORG0030HMAIN:MOVSP,#2FHMOVH_MEM,#1MOVM_MEM,#0MOVS_MEM,#0MOVINT_CNT,#26MOVSCAN_CNT,#0MOVH_CL,#0MOVM_CL,#0MOVCHOICE,#0MOVMODE_REG,#0MOVCL_CNT,#3DMOVCL_CNT,#3DH;各种参数初始化MOVSEC_CNT1,#0MOVSEC_CNT2,#0MOVSEC_CNT3,#0SETBET0;开放T0中断SETBET1;开放T1中断SETBEA;开放总中断控制SETBPT0;计