1、单片机产品设计简资料单片机产品设计简资料一、一、设计要求设计要求 设计并制作出具有如下功能的电脑钟:设计并制作出具有如下功能的电脑钟:(1)(1)自动计时,由自动计时,由6 6位位LEDLED显示器显示时、分、秒。显示器显示时、分、秒。(2)(2)具备校准功能,可以直接由具备校准功能,可以直接由0 09 9数字键设置当前时间。数字键设置当前时间。(3)(3)具备定时起闹功能。具备定时起闹功能。(4)(4)一天时差不超过一天时差不超过1 1秒钟。秒钟。二、二、总体方案总体方案1.计时方案计时方案 方案一:采用实时时钟芯片。方案二:软件控制。2.键盘键盘/显示方案显示方案 方案一:串口扩展,LED
2、静态显示。方案二:8155扩展,LED动态显示。显示方式框图(a)静态显示框图;(b)动态显示框图移 位 寄 存 器LED1LED244键 盘8031串 行 口P1口移 位 寄 存 器80318155键 盘 显 示接 口LED显 示44键 盘(a)(b)三、三、硬件设计硬件设计 1.电路原理图电路原理图AD0PA0AD1PA1AD2PA2AD3PA3AD4PA4AD5PA5AD6PA6AD7PA7PB0CEPB1RDPB2WRPB3IO/MPB4ALEPB5PB6PB7TMROUT6PC0PC1TMRIN3PC2PC3PC4RESET4PC58155EA/VP31X119X218RESET9R
3、D17WR16INT012INT113T014T11512345678PSENALE/PTXDRXD89C51dpgfed cbaLED0 LED1LED2 LED3 LED4LED50123456789C/RALMPA0PA5PC0PC1PC2PB0PB7+5 V+5 V蜂 鸣 器+5 V+5 V74LS0739383736353433322122232425262728293011101213141516171819891071121222324252627282930313233343536373839125P1.0P1.1P1.2P1.3P1.4P1.5P1.6P1.7P0.0P0.1
4、P0.2P0.3P0.4P0.5P0.6P0.7P2.0P2.1P2.2P2.3P2.4P2.5P2.6P2.720 pF20 pF6 MHz1 k5.1 k3R200 822 F12.系统工作流程系统工作流程本电脑钟具备以下功能:本电脑钟具备以下功能:(1)(1)时钟显示:时钟显示:6 6位位LEDLED从左到右依次显示时、分、秒,采用从左到右依次显示时、分、秒,采用2424小时计时。小时计时。(2)(2)键盘功能:采用键盘功能:采用4 43 3键盘,包括:键盘,包括:0 09 9 数字键,键号为数字键,键号为00H00H09HC/R09HC/R键键 时间设定时间设定/启动计时键,键号为启动
5、计时键,键号为0AH0AH ALM ALM键键 闹钟设置闹钟设置/启闹启闹/停闹键,键号为停闹键,键号为0BH0BH (1)(1)时间显示:上电后,系统自动进入时钟显示,从时间显示:上电后,系统自动进入时钟显示,从0000:0000:0000开始计时,此开始计时,此时可以设定当前时间。时可以设定当前时间。(2)(2)时间调整:按下时间调整:按下C/RC/R键,系统停止计时,进入时间设定状态,系统保持原有显键,系统停止计时,进入时间设定状态,系统保持原有显示,等待键入当前时间。按下示,等待键入当前时间。按下0 09 9数字键可以顺序设置时、分、秒,并在相应数字键可以顺序设置时、分、秒,并在相应L
6、EDLED管上显示设置值,直至管上显示设置值,直至6 6位设置完毕。系统将自动由设定后的时间开始计时显示。位设置完毕。系统将自动由设定后的时间开始计时显示。(3)(3)闹钟设置闹钟设置/启闹启闹/停闹:按下停闹:按下ALMALM键,系统继续计时,显示键,系统继续计时,显示0000:0000:0000,进,进入闹钟设置状态,等待键入启闹时间。按下入闹钟设置状态,等待键入启闹时间。按下0 09 9数字键可以顺序进行相应的时间设数字键可以顺序进行相应的时间设置,并在相应置,并在相应LEDLED管上显示设置值,直至管上显示设置值,直至6 6位设置完毕。这将启动定时启闹功能,位设置完毕。这将启动定时启闹
7、功能,并恢复时间显示。定时时间到,蜂鸣器鸣叫,直至重新按下并恢复时间显示。定时时间到,蜂鸣器鸣叫,直至重新按下ALMALM键停闹,并取消键停闹,并取消闹钟设置。闹钟设置。四、软件设计四、软件设计1.系统资源分配系统资源分配地地 址址功功 能能名名 称称初始化值初始化值30H35H显示缓冲区,小时、分、秒(高位在前)显示缓冲区,小时、分、秒(高位在前)DISP0DISP500H3CH3FH计时缓冲区,时、分、秒、计时缓冲区,时、分、秒、100 msHOUR,MIN,SEC,MSEC00H40H42H闹钟值寄存区,时、分、秒闹钟值寄存区,时、分、秒AHOUR,AMIN,ASECFFH50H7FH堆
8、栈区堆栈区 PSW.5计时显示允许位(计时显示允许位(1:禁止,:禁止,0:允许):允许)F00PSW.1闹钟标志位(闹钟标志位(1:正在闹响,:正在闹响,0:未闹响):未闹响)F10电子钟控制软件片内RAM及标志位分配表2.软件流程软件流程开 始定 义 堆 栈 区8155、定 时 器 0、数 据 缓 冲 区、闹 钟 标 志 位 初 始 化调 用 定 时比 较 程 序调 用 键 扫 描子 程 序是 C/R键是 ALM键闹 钟 标 志 位 1停 闹清 零 闹 钟 标 志地 址 指 针 指 向计 时 缓 冲 区调 用 时 间 设 置/闹 钟 定 时 程 序地 址 指 针 指 向闹 钟 值 寄 存
9、区YNNYYN图9.3 主程序流程图图9.4 计时程序流程图保 护 现 场时 间 校 正重 装 定 时 器 0初 值循 环 次 数 减 1秒 单 元 清 零分 单 元 加 160分 到分 单 元 清 零小 时 单 元 加 124小 时 到小 时 单 元 清 零恢 复 现 场返 回满 10次秒 单 元 加 160 s到NYYYYNNN图9.5 时间设置/闹钟定时流程图 保 护 现 场调 用 键 盘 设 置 子 程 序ACALL KEYIN调 用 合 字 程 序ACALL COMB恢 复 现 场返 回图9.6 键盘设置子程序流程图保护现场显示缓冲区首地址送R0键盘输入次数送R7调用键盘扫描程序AC
10、ALL KEYSCAN键号送R0显示缓冲区地址加1INC R0循环次数减1循环次数到恢复现场返回Yc图9.7 键盘扫描流程图 (4)键盘扫描程序模块KEYSCAN:流程图如图9.7所示。扫描键盘有键按下调用显示程序有键按下求取键号返回调用显示程序调用定时比较程序调用显示程序调用定时比较程序YNNY图9.8 显示流程图保 护 现 场动 态 扫 描 显 示调 用 拆 字 程 序返 回YN允许显示计时时间图9.9 定时比较流程图保护现场闹钟值与计时值秒单元相等启闹闹钟标志置位返回YN闹钟值与计时值分单元相等闹钟值与计时值小时单元相等恢复现场NNYYORG0000HAJMP MAINORG 000BH
11、AJMP CLOCKORG 0030HPORT EQU 8000HPORTA EQU 8001HPORTB EQU 8002H;*主程序MAIN*PORTCEQU 8003HDISP0 EQU 30HDISP1 EQU 31HDISP2 EQU 32HDISP3 EQU 33HDISP4 EQU 34HDISP5 EQU 35HHOUR EQU 3CH MIN EQU 3DH SEC EQU 3EH MSEC EQU 3FH AHOUR EQU 40H AMINEQU 41H ASEC EQU 42H F1 BIT PSW.1MAIN:MOV SP,#50H ;设置堆栈区 MOVX DPTR,
12、#PORT MOVA,#03H MOVX DPTR,A;8155初始化CLR F1;清零闹钟标志位CLRF0;允许计时显示 MOV AHOUR,#0FFH MOV AMIN,#0FFH MOV ASEC,#0FFH MOV R7,#10H MOV R0,#DISP0 CLR ALOOP:MOV R0,A INC R0 DJNZ R7,LOOP ;设置初值 MOV TMOD,#01H MOV TL0,#0B0H MOV TH0,#3CH ;定时器0初始化,定时 时间100 ms SETB TR0;启动定时器 SETB EA SETB ET0;开中断 BEGIN:ACALLALARM ;调用定时比
13、较 ACALLKEYSCAN ;调用键盘扫描 CJNEA,#0AH,NEXT1 ;是CLR/RST键否?CLR TR0 ;是则暂时停止计时 MOV R1,#HOUR ;地址指针指向计时缓冲区首地址 AJMPMODNEXT1:CJNE A,#0BH,BEGIN ;是ALARM键否?JB F1,NEXT2 ;闹钟正在闹响否?MOVR1,#AHOUR ;地址指针指向闹钟值寄存区首地址 MOD:SETBF0 ;置位时间设置/闹钟定时标志,禁止显示计时时间 ACALLMODIFY ;调用时间设置/闹钟定时程序 SETBTR0 ;重新开始计时 CLRF0 ;清零时间设置/闹钟定时标志,恢复显示计时时间 A
14、JMPBEGINNEXT2:SETBP1.0;闹钟正在闹响,停闹 CLRF1;清零闹钟标志 AJMPBEGIN ;*时间设 置/闹钟定时模块MODIFY*MODIFY:ACALL KEYIN;调用键盘设置子程序 ACALL COMB;调用合字子程序RET键盘设置子程序KEYIN:KEYIN:PUSH PSWPUSH ACC SETBRS1 ;保护现场 MOVR0,#DISP0 ;R0指向显示缓冲区首地址 MOVR7,#06H ;设置键盘输入次数L1:CLRRS1 ACALLKEYSCAN ;调用键盘扫描程序取按下键 的键号 SETB RS1 CJNEA,#0AH,L2;键入数合法性检测(是否大
15、 于9)L2:JNCL1;大于9,重新键入MOV R0,A;键号送显示缓冲区INCR0DJNZ R7,L1;6位时间输入完否?未 完继续,否则返回POPACCPOPPSWCLRRS1;恢复现场RET ;*键盘扫描子程序KEYSCAN*KEYSCAN:ACALLTEST ;调判按键是否按下子程序TEST JNZ REMOV ;有键按下调消抖延时 ACALLDISPLAY ACALLALARM AJMP KEYSCAN;无键按下继续判是否按键 REMOV:ACALL DISPLAY;调用显示子程序延时消抖 ACALL TEST ;再判是否有键按下 JNZLIST ;有键按下转逐列扫描 ACALL
16、DISPLAY ACALL ALARM AJMPKEYSCAN ;无键按下继续判是否按键 LIST:MOV R2,#0FEH ;首列扫描字送R2MOV R3,#00H ;首列键号送R3LINE0:MOV DPTR,#PORTA;DPTR指针指向8155的A口 MOV A,R2 ;首列扫描字送R2 MOVXDPTR,A ;首列扫描字送8155的A口 MOV DPTR,#PORTC ;DPTR指针指向8155的C口 MOVXA,DPTR ;读入C口的行状态 JB ACC.0,LINE1 ;第0行键无键按下转第1行 MOVA,#00H ;第0行有键按下,行首键号送A AJMPTRYK ;求键号 NE
17、XT:INC R3;扫描下一列 MOV A,R2;列扫描字送A JNB ACC.3,EXIT ;4列扫描完,重新进行 下一轮扫描 RL A;4列未扫描完,扫描字左移扫描下一列 MOV R2,A;扫描字送A AJMP LINE0;转向扫描下一列 EXIT:AJMP KEYSCAN;等待下一次按键TRYK:ADD A,R3;按公式计算键码,求得键号 PUSH ACC;键号入栈保护LETK:ACALL TEST;等待按键释放 JNZLETK;按键未释放,继续等待 POPACC;按键释放,键号出栈RET;键盘扫描结束,返回TEST:MOV DPTR,#PORTA ;DPTR指针指向8155的A口MOV
18、 A,#00HMOVX DPTR,A ;全扫描字00H送8155的A口MOV DPTR,#PORTC ;DPTR指针指向8155的C口MOVX A,DPTR ;读入C口行状态CPLA ;A取反,以高电平表示有 键按下ANLA,#07H ;屏蔽高5位RET;*显示子程序DISPLAY*DISPLAY:JB F0,DISP ;允许时间显示标志F0=1转DISPACALL SEPA ;否则调用SEPA刷新显示缓冲区 DISP:push psw ;动态扫描显示子程序 Pushacc setb rs0 MOV dptr,#PORTA MOV A,#0FFH MOVX DPTR,A ;关显示 mov r0
19、,#disp0 mov r7,#00h mov r6,#06h mov r5,#0fehdis1:mov dptr,#tab mov a,r0 movc a,a+dptr mov dptr,#portbmovx dptr,a mov dptr,#porta mov a,r5 movx dptr,ahere:djnz r7,here inc r0 mov a,r5 rl a mov r5,a djnz r6,dis1 clr rs0 pop acc pop psw ret tab:db 3fh,06h,5bh,4fh,66h,6dh,7dh,07h db 7fh,6fh,77h,7ch,39h,
20、5eh,79h,71h;共阴极字型码表;*合字子程序COMB*COMB:MOV R0,#DISP1 ;R0指向显示缓冲区小时 低位 ACALL COMB1 ;合字 CJNE A,#24H,CHK ;小时大于24否?CHK:JNCEXIT1 ;大于24则取消本次设 置,退出 MOVR1,A ;否则小时送计时缓冲区 /闹钟值寄存区小时单元 INCR1 MOVR0,#DISP3;R0指向显示缓冲区分低位 ACALLCOMB1 CJNEA,#60H,CHK1CHK1:JNC EXIT1 MOV R1,A INC R1 MOV R0,#DISP5 ;R0指向显示缓冲区秒低位 ACALL COMB1 CJ
21、NEA,#60H,CHK2 CHK2:JNCEXIT1 MOV R1,ARET EXIT1:AJMP MAIN ;输入不合法退出,重新清 零计时COMB1:MOV A,R0 ANL A,#0FH ;取出低位 MOV43H,A;暂存于43H单元 DECR0;指向高位 MOVA,R0 ANLA,#0FH SWAPA;高位送高4位 ORLA,43H;高低位合并RET;*拆字子程序SEPA*SEPA:PUSH PSW PUSH ACC SETB RS0 MOVR0,#DISP5;指向显示缓冲区秒低位 MOVA,SEC ACALL SEPA1 MOVA,MIN ACALL SEPA1 MOVA,HOUR
22、 ACALL SEPA1 POPACC POPPSW RETSEPA1:MOV 44H,A;暂存44H ANLA,#0FH;取出低位 MOV R0,A;送显示缓冲区低位 DEC R0 ;指向显示缓冲区高位 MOV A,44H ANL A,#0F0H;取出高位 SWAPA;高位送往低4位形成高位数据 MOVR0,A ;高位数据送显示缓冲区高位RET;*定时比较模块ALARM*ALARM:MOV A,ASECCJNE A,SEC,BACK ;秒单元相同则继续比较,否则返回 MOV A,AMINCJNE A,MIN,BACK;分单元相同则继续比较,否则返回MOV A,AHOUR CJNE A,HOU
23、R,BACK;小时单元相同定时时间到 CLRP1.0 ;启动闹钟鸣叫 SETBF1 ;置位闹钟标志BACK:RET;*定 时 器 0 中 断 服 务 子 程 序CLOCK*CLOCK:MOV TL0,#0B7H MOVTH0,#3CH ;重装初值,时间校正 PUSH PSWPUSH ACC;保护现场INCMSECMOV A,MSECCJNE A,#0AH,DONEMOV MSEC,#00HMOV A,SECINCA DAA;二十进制转换 MOVSEC,A CJNEA,#60H,DONE MOVSEC,#00H MOVA,MIN INCA DAA MOVMIN,A CJNE A,#60H,DON
24、EMOV MIN,#00HMOV A,HOURINCADAAMOV HOUR,ACJNE A,#24H,DONEMOV HOUR,#00H DONE:POPACCPOPPSW;恢复现场RETI四、系统调试与脱机运行四、系统调试与脱机运行1.硬件调试硬件调试(1)脱机检查。(2)联机调试。2.软件调试软件调试(1)用仿真器修改显示缓冲区内容,屏蔽拆字程序,调试动态扫描显示功能。(2)运行主程序调试计时模块,不按下任何键,检查是否能从由00:00:00开 始正确计时。(3)调试键盘扫描模块KEYSCAN,(4)调试时间设置/闹钟定时模块MODIFY。(5)运行主程序联调,检查能否用键盘修改当前时间以及设置闹钟,能否正确计 时、启闹、停闹。3.脱机运行脱机运行泰山学院泰山学院信息科学技术学院自动化教研室信息科学技术学院自动化教研室2020/11/548谢谢观赏!