单片机数字电子钟汇编课程设计
个性化电子钟课程设计学院材料与能源学院专业微电子科学与工程年级班别 2013级2班学生姓名馥语甄心目录一、设计任务书.....................................P1二、个性化电子钟功能...............................P2三、单片机系统原理图和工作原理描述.................P4四、电路原理图设计.................................P11五、程序模块图.....................................P12六、程序清单.......................................P13七、设计或调试的过程中遇到的问题及解决方法.........P27八、测试数据与误差校准.............................P29九、收获与体会.....................................P30一、设计任务书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.在程序调试通过后,测试计时精度,分析误差来源,提出补偿方法,用数据说明补偿前后计时精度。
二、个性化电子钟功能1.常规上电和手动复位(K1)2.CHOICE按键:4位LED数码显示器(带钟点),共5种显示选择:分别显示“小时:分钟”、“分钟:秒”、闹钟的“小时:分钟”、“N分钟都响铃设置”、“秒表”3.MODE按键:共有6种模式,“小时校准(闪烁)”、“分钟校准(闪烁)”、“秒校准(闪烁)”、“小时闹铃校准(闪烁)”、“分钟闹铃校准(闪烁)”、“闹钟重响时间设置”4.UP按键:按下,对应的项目加1(MODE 0模式下,可以停止闹钟或者复位秒表)DOWN按键:按下,对应的项目减1(MODE 0模式下,可以启动或停止秒表或者停止重响的闹钟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.秒表功能:选择MODE 0模式下选择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口。
表3 P3.0口的第二功能: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、上电复位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口置为低电平四、电路原理图设计五、程序模块框图六、程序清单LED1 EQU 7FHLED2 EQU 7EHLED3 EQU 7DHLED4 EQU 7CHH_MEM EQU 7BH ;系统小时M_MEM EQU 7AH ;系统分钟S_MEM EQU 79H ;系统秒MODE_REG EQU 78H ;模式值INT_CNT EQU 77H ;计时中断计数变量SCAN_CNT EQU 76H ;显示扫描变量TEMP EQU 75HH_CL EQU 74H ;闹钟小时M_CL EQU 73H ;闹钟分钟FLASH_BIT EQU 72H ;小数点值CHOICE EQU 71H ;选择值CHOICE_ALLA EQU 70H ;“分钟”位置显示变量CHOICE_ALLB EQU 69H ;“小时”位置显示变量CL_CNT EQU 68H ;闹钟重响判断变量RECL_CNT EQU 67H ;闹钟重响时间变量SEC_CNT1 EQU 66HSEC_CNT2 EQU 65HSEC_CNT3 EQU 64HORG 0000HLJMP MAINORG 0003HRETIORG 000BHLJMP INT_T0ORG 0013HRETIORG 001BHLJMP INT_T1ORG 0023HRETI;-----------------------主程序初始化----------------------ORG 0030HMAIN: MOV SP,#2FHMOV H_MEM,#1MOV M_MEM,#0MOV S_MEM,#0MOV INT_CNT,#26MOV SCAN_CNT,#0MOV H_CL,#0MOV M_CL,#0MOV CHOICE,#0MOV MODE_REG,#0MOV CL_CNT,#3DMOV CL_CNT,#3DH ;各种参数初始化MOV SEC_CNT1,#0MOV SEC_CNT2,#0MOV SEC_CNT3,#0SETB ET0 ;开放T0中断SETB ET1 ;开放T1中断SETB EA ;开放总中断控制SETB PT0 ;计时优先MOV TL0,#0E0HMOV TH0,#0B1H ;设置20ms定时初值MOV TL1,#78HMOV TH1,#0ECH ;设置5ms定时初值MOV TMOD,#00010001B ;使T1、T2处于工作方式1SETB TR0 ;开放T0中断SETB TR1 ;开放T1中断;-------------主程序,无限循环-----------------WAIT:LCALL KEY_SCAN ;调用按键扫描子程序LCALL CONVERT_BCD;调用拆字转码子程序SJMP WAIT ;原地等待中断来临;---------------数码管显示子程序---------------------------CONVERT_BCD:MOV R2,#0LCALL WHICH_CHOICE ;判断当前的显示选择MOV R3,CHOICE_ALLA ;CHOICE_ALLA内容显示LCALL BTID ;调用二翻十子程序MOV A,R6ANL A,#0FH ;取低4位MOV DPTR,#LED_CODEMOVC A,@A+DPTRMOV LED1,A ;在LED1显示MOV A,R6ANL A,#0F0H ;取高4位SWAP AMOVC A,@A+DPTRMOV LED2,A ;在LED2显示MOV R2,#0MOV R3,CHOICE_ALLB ;CHOICE_ALLB内容显示LCALL BTID ;调用二翻十子程序MOV A,R6ANL A,#0FH ;取低4位MOVC A,@A+DPTRMOV C,FLASH_BITMOV ACC.7,C ;LED3的小数点显示MOV LED3,A ;在LED3显示MOV A,R6ANL A,#0F0H ;取高4位SWAP AMOVC A,@A+DPTRMOV LED4,A ;在LED4显示RET;-----------------------T0=20ms中断---------------------------------INT_T0: PUSH ACCPUSH PSW ;入栈保护MOV TL0,#0E0HMOV TH0,#0B1H ;重新装载20ms中断初值DJNZ INT_CNT,T0_EXIT ;判断跑够500ms没有MOV INT_CNT,#23 ;够了,重新再跑500msCPL FLASH_BIT ;让小数点亮JNB FLASH_BIT,T0_EXIT ;判断小数点是否亮,亮,返回LCALL DELAY5MSINC S_MEM ;再跑了500ms,小数点灭,秒加1MOV A,S_MEMCJNE A,#60,T0_EXIT ;判断秒是否超过60MOV S_MEM,#0 ;超过,秒清零INC M_MEM ;分加1LCALL SOUND ;发出满1分钟提示音MOV A,M_MEMCJNE A,#60,T0_EXIT ;判断分钟是否超过60MOV M_MEM,#0 ;超过,分钟清0INC H_MEM ;小时加1LCALL SOUND ;发出满1小时提示音MOV A,H_MEMCJNE A,#24,T0_EXIT ;判断小时是否超过24MOV H_MEM,#0 ;超过,小时清零T0_EXIT: POP PSWPOP ACCRETISOUND1: CLR P1.6LCALL DELAY1MSSETB P1.6LCALL DELAY1MS ;发出声音;-----------------------T1=5毫秒中断,4个数码管轮流显示--------------------------------;用得是共阳极数码管,由P0和P2共同控制,每一次5ms中断依次使P2.3~P2.0分别为低电平,LED1~LED4依次给P0输出,从而实现了每个5ms让一个数码管亮,轮流来,由于频率快,就实现了视觉上的4个数码管同时亮INT_T1: PUSH ACCPUSH PSWPUSH DPLPUSH DPHMOV TL1,#78H ;5毫秒中断MOV TH1,#0ECHSETB RS0 ;切换键区LCALL SECONDMOV DPTR,#SCAN_TABLEMOV A,SCAN_CNTADD A,SCAN_CNT ;乘以2(0、2、4、6)调整偏移量MOV R1,AMOVC A,@A+DPTRMOV R0,AMOV A,@R0MOV P0,A ;把LED1给P0口INC DPTRMOV A,R1MOVC A,@A+DPTRMOV P2,A ;把让P3.3为低电平,驱动数码管INC SCAN_CNTMOV A,SCAN_CNTCJNE A,#4,T1_EXITMOV SCAN_CNT,#0T1_EXIT: POP DPHPOP DPLPOP PSWPOP ACCRETI;秒表程序SECOND: MOV A,CHOICECJNE A,#4,SEC_EXITMOV A,MODE_REGCJNE A,#0,SEC_EXITJNB P3.3,SEC_RESET ;处于模式0,选择秒表显示,按下DOWN键JNB P3.4,SET1JB P3.0,SEC_EXITINC SEC_CNT1MOV A,SEC_CNT1CJNE A,#4,SEC_EXIT ;判断是否够20msINC SEC_CNT2 ;够,秒秒显示加1(显示的1分度就是20ms)MOV SEC_CNT1,#0MOV A,SEC_CNT2CJNE A,#48 ,SEC_EXIT ;判断是否够1sMOV SEC_CNT2,#0 ;够,秒秒清零INC SEC_CNT3 ;秒加1MOV A,SEC_CNT3CJNE A,#60,SEC_EXIT ;判断秒是否超过60MOV SEC_CNT3,#0 ;超过,秒清零RETSET1: CPL P3.0 ;取反电平RETSEC_RESET: MOV SEC_CNT1,#0 ;秒表复位MOV SEC_CNT2,#0MOV SEC_CNT3,#0SEC_EXIT: RETI;----------------按键扫描子程序---------------------------------;按键扫描KEY_SCAN: JNB P3.2,KEY_MODE ;校准功能模式键JNB P3.3,KEY_UP9 ;加1键JNB P3.4,KEY_DOW9 ;减1键JNB P3.5,KEY_CHOICE ;显示选择键LCALL SCNFLASH ;调用扫描闪烁子程序LCALL CL_SCAN ;调用闹钟扫描子程序LCALL CLCON ;调用闹钟关闭控制子程序LCALL CL_RESCAN ;调用闹钟重响扫描子程序LCALL SCANMODE ;调用模式扫描子程序KEY_SCAN1: RETKEY_UP9: LCALL KEY_UP ;调用加校准子程序LCALL SOUND ;按键声KEY_DOW9: LCALL KEY_DOW ;调用减校准子程序LCALL SOUND ;按键声KEY_CHOICE: LCALL KEY_CHOICE1 ;调用显示选择子程序LCALL SOUND ;按键声KEY_MODE: LCALL DELAY50MSJB P3.2,KEY_MODE2 ;判断按键按下INC MODE_REG ;按下,模式加1LCALL SOUNDMOV A,MODE_REGCJNE A,#7,KEY_MODE1MOV MODE_REG,#0KEY_MODE1: LCALL DELAY10MSJNB P3.2,KEY_MODE1 ;按键是否释放,没释放,等待KEY_MODE2: RET ;释放,返回;闹钟扫描子程序CL_SCAN: MOV A,H_MEMCJNE A,H_CL,CL_SCAN2MOV A,M_MEMCJNE A,M_CL,CL_SCAN2 ;判断系统的小时分钟和闹钟的是否相等CL_SCAN1: CLR P1.6 ;相等,驱动蜂鸣器LCALL DELAY10MSSETB P1.6LCALL DELAY10MS ;输出方波,驱动蜂鸣器响MOV M_CL,M_MEMMOV H_CL,H_MEM ;让闹钟没人为停止则无限响下去CL_SCAN2: RET;闹钟关闭控制子程序CLCON: MOV A,MODE_REGCJNE A,#0,CLCON1 ;MODE处于0模式JB P3.3,CLCON1 ;按下UPMOV H_CL,#25 ;闹钟停MOV A,M_MEMADD A,RECL_CNTMOV CL_CNT,A ;设置重响CLCON1: RETCL_RESCAN : MOV A,CL_CNTCJNE A,M_MEM, CL_RESCAN1 ;是否满足重响条件CLR P1.6 ;满足,蜂鸣器响LCALL DELAY10MSSETB P1.6LCALL DELAY10MSMOV A,MODE_REGCJNE A,#0,CL_RESCAN1 ;是否按下闹钟停止JB P3.4,CL_RESCAN1 ;MODE处于0,DOWN按下MOV CL_CNT,#61 ;闹钟停CL_RESCAN1: RETSOUND: CLR P1.6LCALL DELAY10MSSETB P1.6LCALL DELAY10MSRET;闪烁扫描电路SCNFLASH: MOV A,MODE_REGCJNE A,#0,FLASH1 ;处于模式0RETFLASH1: CJNE A,#1,FLASH2 ;处于模式1PUSH LED3PUSH LED4SETB P2.0SETB P2.1LCALL DELAY5MSPOP LED4POP LED3 ;小时(系统)位置闪烁RETFLASH2: CJNE A,#2,FLASH3 ;处于模式2PUSH LED1PUSH LED2SETB P2.2SETB P2.3LCALL DELAY5MSPOP LED2POP LED1 ;分钟(系统)位置闪烁RETFLASH3: CJNE A,#3,FLASH4 ;处于模式3PUSH LED1PUSH LED2SETB P2.2SETB P2.3LCALL DELAY5MSPOP LED2POP LED1 ;秒(系统)位置闪烁RETFLASH4: CJNE A,#4,FLASH5 ;处于模式4PUSH LED3PUSH LED4SETB P2.0SETB P2.1LCALL DELAY5MSPOP LED4POP LED3 ;小时(闹钟)位置闪烁RETFLASH5: CJNE A,#5,FLASH6PUSH LED1PUSH LED2SETB P2.3SETB P2.2LCALL DELAY5MSPOP LED2POP LED1 ;分钟(闹钟)位置闪烁FLASH6: RET;模式扫描子程序SCANMODE: MOV A,MODE_REGSCANMODE0: CJNE A,#0,SCANMODE1 ;模式0MOV P1,#7FH ;D8亮SCANMODE1: CJNE A,#1,SCANMODE2 ;模式1MOV P1,#0FEH ;D1亮SCANMODE2: CJNE A,#2,SCANMODE3 ;模式2MOV P1,#0FDH ;D2亮SCANMODE3: CJNE A,#3,SCANMODE4MOV P1,#0FBH ;D3亮SCANMODE4: CJNE A,#4,SCANMODE5MOV P1,#0F7H ;D4亮SCANMODE5: CJNE A,#5,SCANMODE6MOV P1,#0EFH ;D5亮SCANMODE6: CJNE A,#6,SCANMODE7MOV P1,#0DFH ;D6亮SCANMODE7: RET;----------------------加校准子程序-------------------------------KEY_UP: LCALL DELAY10MSJB P3.3,KEY_UP6MOV A,MODE_REGCJNE A,#0,KEY_UP1 ;处于模式0,UP按下无响应RETKEY_UP1: CJNE A,#1,KEY_UP2LJMP H_UP ;系统小时加1KEY_UP2:CJNE A,#2,KEY_UP3LJMP M_UP ; 系统分钟加1KEY_UP3:CJNE A,#3,KEY_UP4LJMP S_UP ;系统秒加1KEY_UP4: CJNE A,#4,KEY_UP5LJMP H_CLUP ;闹钟小时加1KEY_UP5: CJNE A,#5,KEY_UP6LJMP M_CLUP ;闹钟分钟加1KEY_UP6: CJNE A,#6,KEY_UP7LJMP RECL_CNTUP ;重响时间变量加1 KEY_UP7: RET;减校准子程序KEY_DOW: LCALL DELAY20MSJB P3.4,KEY_DOW6MOV A,MODE_REGCJNE A,#0,KEY_DOW1 ;处于模式0,DOWN按键无效RETKEY_DOW1: CJNE A,#1,KEY_DOW2LJMP H_DOW ;系统小时减1KEY_DOW2:CJNE A,#2,KEY_DOW3LJMP M_DOW ;系统分钟减1KEY_DOW3:CJNE A,#3,KEY_DOW4LJMP S_DOW ;系统秒减1KEY_DOW4:CJNE A,#4,KEY_DOW5LJMP H_CLDOW ;闹钟小时减1KEY_DOW5:CJNE A,#5,KEY_DOW6LJMP M_CLDOW ;闹钟分钟减1KEY_DOW6: CJNE A,#6,KEY_DOW7LJMP RECL_CNTDOW ;重响时间变量减1KEY_DOW7: RETH_UP: INC H_MEMMOV A,H_MEMCJNE A,#24,H_UP1 ;小时超过24,清零MOV H_MEM,#0H_UP1: RETM_UP: INC M_MEMMOV A,M_MEMCJNE A,#60,M_UP1 ;分钟超过60,清零MOV M_MEM,#0M_UP1: RETS_UP: INC S_MEMMOV A,S_MEMCJNE A,#60,S_UP1 ;秒超过60,清零MOV S_MEM,#0S_UP1: RETH_CLUP: INC H_CLMOV A,H_CLCJNE A,#24,H_CLUP1 ;闹钟小时超过24,清0MOV H_CL,#0H_CLUP1: RETM_CLUP: INC M_CLMOV A,M_CLCJNE A,#60,M_UP1 ;闹钟分钟超过60,清0MOV M_CL,#0M_CLUP1: RETRECL_CNTUP: INC RECL_CNTMOV A,RECL_CNTCJNE A,#60,RECL_CNTUP1 ;重响时间设置超过60,清零MOV RECL_CNT,#0RECL_CNTUP1: RETH_DOW: DEC H_MEMMOV A,H_MEMCJNE A,#-1,H_DOW1MOV H_MEM,#23H_DOW1: RETM_DOW: DEC M_MEMMOV A,M_MEMCJNE A,#-1,M_DOW1MOV M_MEM,#59M_DOW1: RETS_DOW: DEC S_MEMMOV A,S_MEMCJNE A,#-1,S_DOW1MOV S_MEM,#59S_DOW1: RETH_CLDOW: DEC H_CLMOV A,H_CLCJNE A,#-1,H_CLDOW1MOV H_CL,#0H_CLDOW1: RETM_CLDOW: DEC M_CLMOV A,M_CLCJNE A,#-1,M_CLDOW1MOV M_CL,#0M_CLDOW1: RETRECL_CNTDOW: DEC RECL_CNTMOV A,RECL_CNTCJNE A,#-1,RECL_CNTDOW1MOV RECL_CNT,#0RECL_CNTDOW1: RET;显示选择子程序KEY_CHOICE1: LCALL DELAY20MSJB P3.5,KEY_CHOICE2INC CHOICEMOV A,CHOICECJNE A,#5,KEY_CHOICE2 ;选择超过4,回0MOV CHOICE,#0KEY_CHOICE2: RETWHICH_CHOICE: MOV A,CHOICECJNE A,#0,WHICH_CHOICE1MOV CHOICE_ALLA,M_MEMMOV CHOICE_ALLB,H_MEM ;选择1,显示系统小时:分钟RETWHICH_CHOICE1: CJNE A,#1,WHICH_CHOICE2MOV CHOICE_ALLA,S_MEMMOV CHOICE_ALLB,M_MEM ;选择2,显示系统分钟:秒RETWHICH_CHOICE2: CJNE A,#2,WHICH_CHOICE3MOV CHOICE_ALLA,M_CLMOV CHOICE_ALLB,H_CL ;选择3,显示闹钟小时:分钟WHICH_CHOICE3: CJNE A,#3,WHICH_CHOICE4MOV CHOICE_ALLA,RECL_CNTMOV CHOICE_ALLB,#77 ;选择4,显示77:重响时间参数WHICH_CHOICE4: CJNE A,#4,WHICH_CHOICE5MOV CHOICE_ALLA,SEC_CNT2MOV CHOICE_ALLB,SEC_CNT3WHICH_CHOICE5: RET;-----------------------------各种延时程序-----------------------------------DELAY500MS: MOV R6,#10DELAY500MS1: LCALL DELAY50MSDJNZ R6,DELAY500MS1RETDELAY200MS: MOV R6,#4LCALL DELAY50MSDJNZ R6,DELAY200MS1DELAY200MS1: RETDELAY100MS: MOV R6,#2LCALL DELAY50MSDJNZ R6,DELAY100MS1DELAY100MS1: RETDELAY50MS: MOV R5,#5DELAY50MS1: LCALL DELAY10MSDJNZ R5,DELAY50MS1RETDELAY20MS: MOV R5,#20DELAY20MS1: LCALL DELAY1MSDJNZ R5,DELAY20MS1DELAY10MS: MOV R7,#10DELAY10MS1: LCALL DELAY1MSDJNZ R7,DELAY10MS1RETDELAY5MS: MOV R6,#5DELAY5MS1: LCALL DELAY1MSDJNZ R6,DELAY5MS1DELAY1MS: MOV R4,#249DELAY1MS1: NOPNOPDJNZ R4,DELAY1MS1RET;------------二翻十---------------------------------------;R2R3 TO R4(0,万位),R5(千位,百位),R6(十位,个位) ;INPUT=R2R3 (BIN);OUT =R4R5R6 (BCD);USER REGISTER:R2 R3 R4 R5 R6 R7 ACC PSWBTID: CLR AMOV R4,AMOV R5,AMOV R6,AMOV R7,#16IBTL: CLR CMOV A,R3RLC AMOV R3,AMOV A,R2RLC AMOV R2,AMOV A,R6ADDC A,R6DA AMOV R6,AMOV A,R5ADDC A,R5DA AMOV R5,AMOV A,R4ADDC A,R4DA AMOV R4,ADJNZ R7,IBTLRET;---------------------字形码------------------------------- LED_CODE: DB 0C0H ;"0"DB 0F9H ;"1"DB 0A4H ;"2"DB 0B0H ;"3"DB 099H ;"4"DB 092H ;"5"DB 082H ;"6"DB 0F8H ;"7"DB 080H ;"8"DB 090H ;"9"DB 088H ;"A"DB 083H ;"B"DB 0C6H ;"C"DB 0A1H ;"D"DB 086H ;"E"DB 08EH ;"F"SCAN_TABLE: DB LED1,11110111BDB LED2,11111011B DB LED3,11111101BDB LED4,11111110BEND六、设计或调试过程中碰到的问题及解决方法1.如何实现秒的计时,满60s进1分钟,满60分钟进1小时?通过定时器的应用,设置一个50ms中断,循环跑20次就是1s,从而实现了1s 的计时。
51电子时钟课程设计
51电子时钟课程设计一、课程目标知识目标:1. 学生能理解51单片机的内部结构及其工作原理;2. 学生能掌握电子时钟的基本原理,包括时钟芯片的初始化和使用方法;3. 学生能运用C语言编写程序,实现电子时钟的基本功能,如时、分、秒显示。
技能目标:1. 学生能运用已学的电子知识和编程技巧,完成51电子时钟的电路设计和程序编写;2. 学生通过实际操作,培养动手能力,提高解决实际问题的能力;3. 学生能通过课程学习,掌握基本的焊接技能,完成电子时钟的制作。
情感态度价值观目标:1. 学生在课程学习过程中,培养对电子技术和编程的兴趣,提高主动学习的积极性;2. 学生通过团队协作,培养沟通与合作的意识,增强团队精神;3. 学生在作品展示环节,学会欣赏他人的优点,提高自信心,培养创新精神和实践能力。
课程性质:本课程为实践性较强的课程,结合51单片机技术和电子时钟原理,注重培养学生的动手能力和实际问题解决能力。
学生特点:学生在前期课程中已掌握基本的电子知识和编程技巧,具备一定的实践基础。
教学要求:教师需引导学生运用所学知识,完成电子时钟的设计与制作,注重培养学生的创新思维和团队协作能力。
在教学过程中,关注学生的个体差异,提供个性化的指导。
通过课程目标的分解,确保学生能够实现预期的学习成果。
二、教学内容本课程教学内容主要包括以下几部分:1. 51单片机基础:复习51单片机的内部结构、工作原理,重点掌握时钟电路、复位电路和I/O口的使用。
2. 电子时钟原理:介绍电子时钟的基本构成,包括时钟芯片、晶振、显示屏等,分析时钟芯片的初始化和使用方法。
3. C语言编程:回顾C语言基础知识,重点讲解51单片机编程的语法和技巧,为编写电子时钟程序打下基础。
4. 电路设计与制作:指导学生进行电子时钟的电路设计,包括元器件的选择、电路图的绘制和PCB板的设计。
5. 程序编写与调试:教授学生编写电子时钟程序,实现时、分、秒的显示功能,并进行程序调试。
单片机课程设--电子钟设计
单片机MCS-51数钟课程设计系别:专业:班级:姓名及学号:日期:目录单片机MCS-51数钟 (1)课程设计 (1)一、课程设计的目的 (3)二、课程设计任务 (3)三、硬件结构概述 (4)(一)复位电路 (4)(二)晶振电路 (4)(三)按键电路 (4)(四)显示部分 (5)四、软件结构概述 (5)(一)代码说明 (5)(二)按键处理思路 (10)(三)秒表设计思路 (11)五、调试过程 (12)(一)系统仿真 (12)(二)仿真过程中出现的问题及解决方案 (12)六、心得体会 (13)七、参考文献 (14)一、课程设计的目的(1)巩固、加深和扩大单片机应用的知识面, 提高综合及灵活运用所学知识解决工业控制的能力;二、(2)培养针对课题需要, 选择和查阅有关手册、图表及文献资料的自学能力, 提高组成系统、编程、调试的动手能力;三、(3)过对课题设计方案的分析、选择、比较、熟悉单片机用系统开发、研制的过程, 软硬件设计的方法、内容及步骤。
四、课程设计任务(1)在ZY15MCU12BD型综合单片机实验箱的硬件结构上编写软件完成设计。
也可以在其它MCS—51单片机硬件板上完成, 或自行设计硬件并制做完成。
(2)程序的首地址应使目标机可以直接运行, 即从0000H开始。
在主程序的开始部分必须设置一个合适的栈底。
程序放置的地址须连续且靠前, 不要在中间留下大量的空闲地址, 以使目标机可以使用较少的硬件资源。
(3)6位LED数码管从左到右分别显示时、分、秒(各占用2位), 采用24小时标准计时制。
开始计时时为000000, 到235959后又变成000000。
(4)在键盘上选定3个键分别作为小时、分、秒的调校键。
每按一次键, 对应的显示值便加1。
分、秒加到59后再按键即变为00;小时加到23后再按键即变为00。
在调校时均不向上一单位进位 (例如分加到59后变为00, 但小时不发生改变)。
(5) 软件设计必须使用MCS-51片内定时器, 采用定时中断结构, 不得使用软件延时法。
基于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.硬件电路原理图2.元件清单五、系统软件设计·········1.软件流程图2.程序清单六、系统实物图········七、课程设计体会········八、参考文献及网站·········九、附录·········一.引言单片机因将其主要组成部分集成在一个芯片上而得名,就是把中央处理器、随机存储器、只读存储器、中断系统、定时器/计数器以及I/O接口电路等部件集成在一个芯片上。
基于单片机设计的数字钟精确度较高,因为在程序的执行过程中,任何指令都不影响定时器的正常计数,即便程序很长也不会影响中断的时间。
数字钟是采用数字电路实现对日期、时、分、秒,数字显示的计时装置,由于数字集成电路的发展和石英晶体振荡器的广泛应用,使得数字钟的精度,远远超过老式钟表,钟表的数字化给人们生产生活带来了极大的方便,而且大大地扩展了钟表的报时功能。
数字钟已成为人们日常生活中的必需品,广泛应用于家庭、车站、码头、剧院、办公室等场所,给人们的生活、学习、工作带来极大的方便。
单片机课程设计报告--电子时钟(2021整理)
一、设计内容该课程设计是利用MCS-51单片机内部的定时/计数器、中断系统、以及行列键盘和LED显示器等部件,设计一个单片机电子时钟。
设计的电子时钟通过数码管显示,并能通过按键实现设置时间和暂停、启动控制等。
二、电子时钟设计思想:用定时/计数器T0,工作于定时,采用方式1,对12MHZ的系统时钟进行定时计数,初值设为XXYY〔自己计算〕。
形成定时时间为50ms。
用片内RAM的7BH单元对50ms 计数,计20次产生秒计数器78H单元加1,秒计数器加到60那么分计数器79H单元加1,分计数器加到60那么时计数器7AH单元加1,时计数器加到24那么时计数器清0。
然后把秒、分、时计数器分成十位和个位放到8个数码管的显示缓冲区,通过数码管显示出来。
显示格式为小时十位、小时个位---分十位、分个位---秒十位、秒个位。
在处理过程中加上了按键判断程序,能对按键处理。
三、MCS-51单片机系统简介单片机应用系统由硬件系统和软件系统两局部组成。
硬件系统是指单片机以及扩展的存储器、I\O接口、外围扩展的功能芯片以及接口电路。
软件系统包括监控程序和各种应用程序。
在单片机应用系统中,单片机是整个系统的核心,对整个系统的信息输入、处理、信息输出进行控制。
与单片机配套的有相应的复位电路、时钟电路以及扩展的存储器和I\O接口,使单片机应用系统能够运行。
在一个单片机应用系统中,往往都会输入信息和显示信息,这就涉及键盘和显示器。
在单片机应用系统中,一般都根据系统的要求配置相应的键盘和显示器。
配置键盘和显示器一般都没有统一的规定,有的系统功能复杂,需输入的信息和显示的信息量大,配置的键盘和显示器功能相对强大,而有些系统输入/输出的信息少,这时可能用几个按键和几个LED 指示灯就可以进行处理了。
在单片机应用系统在中配置的键盘可以是独立键盘,也可能是矩阵键盘。
显示器可以是LED指示灯,也可以是LED数码管,也可以是LCD显示器,还可以使用CRT显示器。
单片机电子时钟课程设计设计报告
单片机电子时钟设计一、作品功能介绍该作品是个性化电子钟设计,技术上主要用单片机(AT89S52)主控,6位LED数码显示,分别显示“小时:分钟:秒”。
该作品主要用于24小时计时显示,能整时报时,能作为秒表使用,能定时闹铃1分钟。
功能介绍:(1)上电以后自动进入计时状态,起始于00:00:00。
(2)设计键盘调整时间,完成时间设计,并设置闹钟。
(3)定时时间为1/100秒,可采用定时器实现。
(4)采用LED数码管显示,时、分,秒采用数字显示。
(5)采用24小时制,具有方便的时间调校功能。
(6)具有时钟和秒表的切换功能。
使用方法:开机后时钟在00:00:00起开始计时。
(1)长按进入调分状态:分单元闪烁,按加1,按减1.再长按进入时调整状态,时单元闪烁,加减调整同调分.按长按退出调整状态。
(2)(2)按进入设定闹时状态: 12:00: ,可进行分设定,按分加1,再按为时调整,按时加1,按调闹钟结束.在闹铃时可按停闹,不按闹铃1分钟。
(3)按下进入秒表状态:再按秒表又启动,按暂停,再按秒表清零,按退出秒表回到时钟状态。
二、电路原理图如原理图所示,硬件系统主要由单片机最小应用系统、LED数码管显示模块、电源模块、晶振模块、按键模块等组成。
电子时钟原理图各个模块设计1.单片机系统 AT89S52 AT89S52概述:是一款非常适合单片机初学者学习的单片机,它完全兼容传统的8051,8031的指令系统,他的运行速度要比8051快最高支持达33MHz的晶体震荡器,在此系统中使用12MHz的晶振。
AT89S52具有以下标准功能: 8k字节Flash,256字节RAM,32 位I/O 口线,看门狗定时器,2 个数据指针,三个16 位定时器/计数器,一个6向量2级中断结构,全双工串行口,片内晶振及时钟电路。
另外,AT89S52 可降至0Hz 静态逻辑操作,支持2种软件可选择节电模式。
空闲模式下,CPU停止工作,允许RAM、定时器/计数器、串口、中断继续工作。
C52单片机电子时钟电路设计 课程设计
C52单片机电子时钟电路设计课程设计单片机原理及应用课程设计题目: C52单片机电子时钟电路设计姓名: 陶鹏鹏专业: 电子科学与技术班级: 121班指导教高海涛师:安徽科技学院数理学院目录1、基于单片机的电子时钟电路设计.........1.1设计任务与要求...................1.1.1设计目的:.................1.1.2设计要求:.................1.2方案设计 ........................2、单片机应用系统简介...................2.1AT89C52单片机的功能结构..........2.2单片机的引脚定义及功能...........2.3 定时/计数器....................2.3.1定时/计数器结构............2.3.2工作原理...................2.4键盘接口技术 ....................2.5复位操作 ........................2.6 显示控制模块....................3、硬件电路设计.........................3.1电子时钟的电路图.................3.2单元电路设计 ....................3.2.1晶振、复位电路模块.........3.2.2键盘控制模块...............3.2.3蜂鸣器电路模块.............3.2.4显示器电路模块.............4、软件设计.............................4.1系统主程序设计...................4.2主程序清单 ......................4.3系统仿真与调试...................5、结论与心得...........................摘要电子钟是一种利用数字电路来显示秒、分、时的计时装置,与传统的机械钟相比,它具有走时准确、显示直观、无机械传动装置等优点,因而得到广泛应用。
单片机电子时钟课程设计实验报告(1)
单片机电子时钟课程设计实验报告(1)单片机电子时钟课程设计实验报告一、实验内容本次实验的主要内容是使用单片机设计一个电子时钟,通过编程控制单片机,实现时钟的显示、报时、闹钟等功能。
二、实验步骤1.硬件设计根据实验要求,搭建电子时钟的硬件电路,包括单片机、时钟模块、显示模块、按键模块等。
2.软件设计通过C语言编写单片机程序,用于实现时钟功能。
3.程序实现(1)时钟显示功能通过读取时钟模块的时间信息,在显示模块上显示当前时间。
(2)报时功能设置定时器,在每个整点时,通过发出对应的蜂鸣声,提示时间到达整点。
(3)闹钟功能设置闹钟时间和闹铃时间,在闹钟时间到达时,发出提示蜂鸣,并在屏幕上显示“闹钟时间到了”。
(4)时间设置功能通过按键模块实现时间的设置,包括设置小时数、分钟数、秒数等。
(5)年月日设置功能通过按键模块实现年月日的设置,包括设置年份、月份、日期等。
三、实验结果经过调试,电子时钟的各项功能都能够正常实现。
在运行过程中,时钟能够准确、稳定地显示当前时间,并在整点时提示时间到达整点。
在设定的闹铃时间到达时,能够发出提示蜂鸣,并在屏幕上显示“闹钟时间到了”。
同时,在需要设置时间和年月日信息时,也能够通过按键进行相应的设置操作。
四、实验感悟通过本次实验,我深刻体会到了单片机在电子设备中的广泛应用以及C 语言在程序设计中的重要性。
通过实验,我不仅掌握了单片机的硬件设计与编程技术,还学会了在设计电子设备时,应重视系统的稳定性与可靠性,并善于寻找调试过程中的问题并解决。
在今后的学习和工作中,我将继续加强对单片机及其应用的学习与掌握,努力提升自己的实践能力,为未来的科研与工作做好充分准备。
单片机电子时钟课程设计报告
单片机电子时钟课程设计报告一、设计目的。
本课程设计旨在通过单片机技术的应用,设计并制作一个简单的电子时钟。
通过这一设计,学生将能够掌握单片机的基本原理和应用,培养学生的动手能力和创新意识,提高学生的实际操作能力。
二、设计原理。
本电子时钟采用单片机作为控制核心,通过晶振产生的时钟信号来实现时间的计时和显示。
利用数码管来显示小时和分钟,通过按键来调整时间。
同时,通过蜂鸣器发出报时信号,实现基本的闹钟功能。
三、设计方案。
1. 硬件设计。
(1)单片机选择,本设计选用常见的51单片机作为控制核心,具有成本低、易于编程的特点。
(2)时钟电路,采用晶振作为时钟信号源,通过单片机的定时器来实现时间的计时。
(3)显示模块,采用数码管来显示小时和分钟,通过数码管的扫描显示来实现时间的动态显示。
(4)按键输入,设计按键来调整时间,包括调整小时和分钟。
(5)报时功能,通过蜂鸣器来实现基本的报时功能,可以设置闹钟时间。
2. 软件设计。
(1)时钟控制,通过单片机的定时器来实现时间的计时和更新。
(2)显示控制,设计数码管的扫描显示程序,实现时间的动态显示。
(3)按键处理,设计按键扫描程序,实现对时间的调整。
(4)报时功能,设计蜂鸣器的报时程序,实现基本的闹钟功能。
四、设计实现。
1. 硬件实现。
根据上述设计方案,完成了电子时钟的硬件连接和布线,保证各个模块之间的正常通讯和工作。
2. 软件实现。
编写了单片机的程序,实现了时钟的计时、显示和控制功能,保证了电子时钟的正常运行。
五、实验结果。
经过调试,电子时钟能够准确显示当前的时间,并能够通过按键调整时间和设置闹钟功能,报时功能也能够正常工作。
六、总结与展望。
通过本课程设计,学生掌握了单片机的基本原理和应用,培养了动手能力和创新意识。
在今后的学习和工作中,学生将能够更好地应用单片机技术,设计和制作更加复杂的电子产品。
同时,也为学生今后的科研和创新工作奠定了良好的基础。
单片机课程设计电子钟
单片机课程设计 电子钟一、课程目标知识目标:1. 学生能理解单片机的基本原理,掌握单片机编程的基础知识。
2. 学生能掌握电子时钟的工作原理,理解时、分、秒的显示方式及其换算关系。
3. 学生能描述单片机在电子时钟中的应用,了解中断、定时器等概念。
技能目标:1. 学生能运用所学知识,设计并实现一个简单的电子时钟程序,具备初步的编程能力。
2. 学生能够通过实验操作,学会使用编程软件和烧录工具,完成程序的编写和下载。
3. 学生能够分析并解决电子时钟程序运行过程中出现的问题,提高问题解决能力。
情感态度价值观目标:1. 学生通过单片机课程的学习,培养对电子工程的兴趣,激发创新意识。
2. 学生在团队协作中学会沟通、分享和合作,培养良好的团队精神。
3. 学生在学习过程中,培养耐心、细致、严谨的科学态度,树立正确的价值观。
课程性质:本课程为实践性较强的课程,旨在让学生通过动手实践,掌握单片机编程和电子时钟的设计。
学生特点:学生为初中生,具备一定的物理知识和数学基础,对电子技术和编程有浓厚兴趣。
教学要求:教师需注重理论与实践相结合,引导学生通过动手实践,提高编程能力和问题解决能力。
在教学过程中,关注学生的个体差异,给予个性化指导。
同时,强调团队合作,培养学生的沟通与协作能力。
通过课程学习,使学生在知识、技能和情感态度价值观方面均取得具体的学习成果。
二、教学内容1. 单片机基本原理:介绍51单片机的内部结构、工作原理,重点讲解CPU、内存、I/O口等基础知识。
相关教材章节:第一章 单片机概述2. 单片机编程基础:讲解单片机编程语言(C语言),包括数据类型、运算符、控制语句等。
相关教材章节:第二章 单片机编程语言3. 电子时钟原理:介绍电子时钟的组成、工作原理,重点讲解时、分、秒的显示方式及换算关系。
相关教材章节:第三章 电子时钟原理4. 中断和定时器:讲解中断的概念、原理和应用,以及定时器的工作原理和编程方法。
相关教材章节:第四章 中断与定时器5. 电子时钟程序设计:结合以上知识,设计并实现一个简单的电子时钟程序,包括显示、计时等功能。
