单片机产品设计课件_第1页
单片机产品设计课件_第2页
单片机产品设计课件_第3页
单片机产品设计课件_第4页
单片机产品设计课件_第5页
已阅读5页,还剩43页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

设计要求总体方案硬件设计软件设计系统调试与运行第

10

单片机的应用系统设计与开发本章内容SingleChipMicrocomputer一、

设计要求设计并制作出具有如下功能的电脑钟:

(1)自动计时,由6位LED显示器显示时、分、秒。

(2)具备校准功能,可以直接由0~9数字键设置当前时间。

(3)具备定时起闹功能。

(4)一天时差不超过1秒钟。二、

总体方案1.计时方案方案一:采用实时时钟芯片。方案二:软件控制。2.键盘/显示方案方案一:串口扩展,LED静态显示。方案二:8155扩展,LED动态显示。显示方式框图

(a)静态显示框图;(b)动态显示框图

三、

硬件设计

1.电路原理图2.系统工作流程本电脑钟具备以下功能:

(1)时钟显示:6位LED从左到右依次显示时、分、秒,采用24小时计时。

(2)键盘功能:采用4×3键盘,包括:0~9数字键,键号为00H~09HC/R键时间设定/启动计时键,键号为0AHALM键闹钟设置/启闹/停闹键,键号为0BH(1)时间显示:上电后,系统自动进入时钟显示,从00:00:00开始计时,此时可以设定当前时间。(2)时间调整:按下C/R键,系统停止计时,进入时间设定状态,系统保持原有显示,等待键入当前时间。按下0~9数字键可以顺序设置时、分、秒,并在相应LED管上显示设置值,直至6位设置完毕。系统将自动由设定后的时间开始计时显示。

(3)闹钟设置/启闹/停闹:按下ALM键,系统继续计时,显示00:00:00,进入闹钟设置状态,等待键入启闹时间。按下0~9数字键可以顺序进行相应的时间设置,并在相应LED管上显示设置值,直至6位设置完毕。这将启动定时启闹功能,并恢复时间显示。定时时间到,蜂鸣器鸣叫,直至重新按下ALM键停闹,并取消闹钟设置。四、软件设计1.系统资源分配地址功能名称初始化值30H~35H显示缓冲区,小时、分、秒(高位在前)DISP0~DISP500H3CH~3FH计时缓冲区,时、分、秒、100msHOUR,MIN,SEC,MSEC00H40H~42H闹钟值寄存区,时、分、秒AHOUR,AMIN,ASECFFH50H~7FH堆栈区

PSW.5计时显示允许位(1:禁止,0:允许)F00PSW.1闹钟标志位(1:正在闹响,0:未闹响)F10电子钟控制软件片内RAM及标志位分配表2.软件流程图9.3主程序流程图图9.4计时程序流程图图9.5时间设置/闹钟定时流程图

图9.6键盘设置子程序流程图图9.7键盘扫描描流程图图(4)键盘扫描描程序模模块KEYSCAN:流程图图如图9.7所示。图9.8显示流程程图图9.9定时比较较流程图图ORG0000HAJMP MAINORG000BHAJMP CLOCKORG0030HPORTEQU8000HPORTAEQU8001HPORTBEQU8002H;*****************主主程序MAIN******************PORTCEQU8003HDISP0EQU30HDISP1EQU31HDISP2EQU32HDISP3EQU33HDISP4EQU34HDISP5EQU35HHOUREQU3CHMINEQU3DHSECEQU3EHMSECEQU3FHAHOUREQU40HAMIN EQU41HASECEQU42HF1BITPSW.1MAIN:MOVSP,#50H;设置堆堆栈区MOVXDPTR,#PORTMOVA,#03HMOVX@DPTR,A;8155初始化CLRF1;清零闹闹钟标志志位CLRF0;允许计计时显示示MOVAHOUR,#0FFHMOVAMIN,#0FFHMOVASEC,#0FFHMOVR7,#10HMOVR0,#DISP0CLRALOOP:MOV@R0,AINCR0DJNZR7,LOOP;设置初初值MOVTMOD,#01HMOVTL0,#0B0HMOVTH0,#3CH;定时器器0初始化,,定时时间100msSETBTR0;启动定定时器SETBEASETBET0;开中断断BEGIN:ACALLALARM;调用定定时比较较ACALLKEYSCAN;调用键键盘扫描描CJNE A,#0AH,NEXT1;是CLR/RST键否?CLRTR0;是则暂暂时停止止计时MOVR1,#HOUR;地址指指针指向向计时缓缓冲区首首地址AJMP MODNEXT1:CJNEA,#0BH,BEGIN;是ALARM键否?JBF1,NEXT2;闹钟正正在闹响响否?MOVR1,#AHOUR;地址指指针指向向闹钟值值寄存区区首地址址MOD:SETB F0;置位时时间设置置/闹钟定时时标志,,禁止显显示计时时时间ACALLMODIFY;调用时时间设置置/闹钟定时时程序SETB TR0;重新开开始计时时CLRF0;清零时时间设置置/闹钟定时时标志,,恢复显显示计时时时间AJMP BEGINNEXT2:SETB P1.0;闹钟正正在闹响响,停闹闹CLRF1;清零闹闹钟标志志AJMP BEGIN;**************时时间设置/闹钟定时时模块MODIFY************MODIFY:ACALLKEYIN;调用键键盘设置置子程序序ACALLCOMB;调用合合字子程程序RET键盘设置置子程序序KEYIN:KEYIN:PUSH PSWPUSH ACCSETB RS1;保护现现场MOVR0,#DISP0;R0指向显示示缓冲区区首地址址MOVR7,#06H;设置键键盘输入入次数L1:CLRRS1ACALLKEYSCAN;调用键键盘扫描描程序取取按下键键的键号SETBRS1CJNE A,#0AH,L2;键入数数合法性性检测((是否大大于9)L2:JNCL1;大于9,重新键键入MOV@R0,A;键号送送显示缓缓冲区INCR0DJNZ R7,L1;6位时间输输入完否否?未完继续,,否则返返回POPACCPOPPSWCLRRS1;恢复现现场RET;**********键盘盘扫描子子程序KEYSCAN***********KEYSCAN:ACALL TEST;调判按按键是否否按下子子程序TESTJNZREMOV;有键按按下调消消抖延时时ACALLDISPLAYACALLALARMAJMPKEYSCAN;无键按按下继续续判是否否按键REMOV:ACALLDISPLAY;调用显显示子程程序延时时消抖ACALLTEST;再判是是否有键键按下JNZLIST;有键按按下转逐逐列扫描描ACALLDISPLAYACALLALARMAJMP KEYSCAN;无键按按下继续续判是否否按键LIST:MOVR2,#0FEH;首列扫扫描字送送R2MOVR3,#00H;首列键键号送R3LINE0:MOVDPTR,#PORTA;DPTR指针指向向8155的A口MOVA,R2;首列扫扫描字送送R2MOVX @DPTR,A;首列扫扫描字送送8155的A口MOVDPTR,#PORTC;DPTR指针指向向8155的C口MOVX A,@DPTR;读入C口的行状状态JBACC.0,LINE1;第0行键无键键按下转转第1行MOVA,#00H;第0行有键按按下,行行首键号号送AAJMP TRYK;求键号号NEXT:INCR3;扫描下下一列MOVA,R2;列扫描描字送AJNBACC.3,EXIT;4列扫描完完,重新新进行下下一轮轮扫描RLA;4列未扫描描完,扫扫描字左左移扫描描下一列列MOVR2,A;扫描字字送AAJMPLINE0;转向扫扫描下一一列EXIT:AJMPKEYSCAN;等待下下一次按按键TRYK:ADDA,R3;按公式式计算键键码,求求得键号号PUSHACC;键号入栈保保护LETK:ACALLTEST;等待按键释释放JNZ LETK;按键未释放放,继续等待待POP ACC;按键释放,,键号出栈RET;键盘扫描结结束,返回TEST:MOVDPTR,#PORTA;DPTR指针指向8155的A口MOVA,#00HMOVX@DPTR,A;全扫描字00H送8155的A口MOV DPTR,#PORTC;DPTR指针指向8155的C口MOVXA,@DPTR;读入C口行状态CPL A;A取反,以高电电平表示有键按下ANL A,#07H;屏蔽高5位RET;**************显显示子程序DISPLAY*************DISPLAY: JBF0,DISP;允许时间显显示标志F0=1转DISPACALLSEPA;否则调用SEPA刷新显示缓冲冲区DISP:pushpsw;动态扫描显显示子程序Pushaccsetbrs0MOVdptr,#PORTAMOVA,#0FFHMOVX@DPTR,A;关显示movr0,#disp0movr7,#00hmovr6,#06hmovr5,#0fehdis1:movdptr,#tabmova,@r0movca,@a+dptrmovdptr,#portbmovx@dptr,amovdptr,#portamova,r5movx@dptr,ahere:djnz r7,hereincr0mova,r5rlamovr5,adjnzr6,dis1clrrs0popaccpoppswrettab:db3fh,06h,5bh,4fh,66h,6dh,7dh,07hdb7fh,6fh,77h,7ch,39h,5eh,79h,71h;共阴极字型型码表;*****************合字子子程序COMB******************COMB:MOVR0,#DISP1;R0指向显示缓冲冲区小时低位ACALLCOMB1;合字CJNEA,#24H,CHK;小时大于24否?CHK:JNCEXIT1;大于24则取消本次设设置,退出MOV @R1,A;否则小时送送计时缓冲区区/闹钟值寄存区区小时单元INCR1MOV R0,#DISP3;R0指向显示缓冲冲区分低位ACALLCOMB1CJNEA,#60H,CHK1CHK1:JNCEXIT1MOV@R1,AINC R1MOVR0,#DISP5;R0指向显示缓冲冲区秒低位ACALLCOMB1CJNEA,#60H,CHK2CHK2:JNC EXIT1MOV @R1,ARETEXIT1:AJMPMAIN;输入不合法法退出,重新新清零计时COMB1:MOVA,@R0ANLA,#0FH;取出低位MOV 43H,A;暂存于43H单元DEC R0;指向高位MOV A,@R0ANL A,#0FHSWAPA;高位送高4位ORL A,43H;高低位合并并RET;***************拆字子程序序SEPA***************SEPA:PUSHPSWPUSHACCSETBRS0MOV R0,#DISP5;指向显示缓缓冲区秒低位位MOV A,SECACALLSEPA1MOV A,MINACALLSEPA1MOV A,HOURACALLSEPA1POP ACCPOP PSWRETSEPA1:MOV44H,A;暂存44HANLA,#0FH;取出低位MOV@R0,A;送显示缓冲冲区低位DECR0;指向显示缓缓冲区高位MOVA,44HANLA,#0F0H;取出高位SWAPA;高位送往低低4位形成高位数数据MOV @R0,A;高位数据送送显示缓冲区区高位RET;**************定定时比较模块块ALARM****************ALARM:MOV A,ASECCJNEA,SEC,BACK;秒单元相同同则继续比较较,否则返回回MOV A,AMINCJNEA,MIN,BACK;分单元相同同则继续比较较,否则返回回MOV A,AHOURCJNEA,HOUR,BACK;小时单元相相同定时时间间到CLR P1.0;启动闹钟鸣鸣叫SETBF1;置位闹钟标标志BACK:RET;***************定时器0中断服务子程程序CLOCK***************CLOCK:MOVTL0,#0B7HMOV TH0,#3CH;重装初值,

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论