单片机相关课设论文.doc_第1页
单片机相关课设论文.doc_第2页
单片机相关课设论文.doc_第3页
单片机相关课设论文.doc_第4页
单片机相关课设论文.doc_第5页
已阅读5页,还剩5页未读 继续免费阅读

下载本文档

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

文档简介

数字电子钟的设计本次课程设计是基于AT89S51单片机的关于电子时钟的设计。通过对该产品的调试与设计,巩固微机原理及接口技术课程所学的理论知识,初步了解单片机应用系统设计与调试的方法。首先,本次设计任务是为完成电子时钟的控制与实现:设计一个以AT89S51单片机为核心的数字电子钟控制器,实现电子钟的时间、日期交替显示、闹钟功能,并可通过按钮开关或键盘切换显示内容、调整参数、设置闹钟,在单片机实验板上模拟调试实现控制器的功能。具体设计要求如下:1开机自检,检查相关接口及数码管显示器、指示灯、蜂鸣器等外设是否正常。28位数码管显示器平常以一定的时间间隔、合适的格式显示时间和日期信息,时间显示时、分、秒;日期显示年(20002099)、月、日;设置闹钟功能时显示时、分、开/关状态。3可通过按键设定时间、日期、闹钟等参数、手动切换显示。按键可用独立式按键或行列式键盘实现。设定参数过程有合适的方式指示当前可修改的内容。4对开关量输入进行软件消抖动处理,参数的设定有容错处理,如:小时不能超过23,日期中每月最大天数、闰年等。5参数设定过程中,较长时间无操作,则自动恢复为正常显示方式。其次,电子时钟设计实现的主要功能:1.系统主要功能:开机对数码管显示器、蜂鸣器自检;正常显示时间(HH-MM-SS)、日期(20YY.MM.DD),每隔10秒自动切换,并有按键可手动切换显示;闹钟功能,闹铃输出为蜂鸣器;键盘设置时间、日期、闹钟,闪烁显示可修改位,长时间(30S,可变)无操作自动恢复正常显示,输入容错处理。2.键盘用行列式键盘,按键定义如右图所示。主要的按键有:(1)数字键“0”“9”,用于设置时输入时间和日期,正常工作时无效。(2)“时间设置”、“日期设置”、“闹钟设置”,用于进入相应功能的设置状态。(3)“闹钟开关”在闹钟设置状态时,用于设置闹钟开或关,正常工作时,用于手动关闹铃的声音。(4)“确认”用于设置参数的确认,并检查参数是否合理,如果符合要求,则参数有效;否则本次修改无效,保持原值。正常工作情况下按该键无操作。(5)“显示切换”用于正常工作时手动切换时间、日期的显示。一程序流程:模块一:程序初始入口主程序各功能的设定模块二:调用子程序说明模块三:各子程序的程序说明二数码管电子时钟系统总体框图及说明AT89S51电源闹铃时钟键盘数码管显示1、闹铃部分:采用蜂鸣器作为设定时间报时。2、键盘部分:设计中共有八个按键:K0控制时间的分钟加(闹钟定时分钟加)、K1控制时间加(闹钟定时时间加)、K2控制日期加、K3控制月份加、K4控制年份加、K5控制闹钟开/关、K6显示闹钟、K7时间/日期切换。3 、显示模块:采用共阴极LED数码管显示一,主程序首先,根据实验要求选定主程序入口程序及中断服务程序的入口,主程序中调用自检,延时程序,8255A的初始化,定义工作方式,设置中断方式,定义时间、日期、闹铃的初始值。1,主程序部分(中断系统初始化)设置堆栈指针SPMOV SP,#6FH开放中断。SETB EA ;中断总允许位 SETB ET0 ;允许T0中断SETB TR0 ;起动T0中断2,8255A的初始化显示驱动程序:(实验仪上8255的A口、B口、C口、控制寄存器地址为FEFCH、FEFDH、FEFEH、FEFFH;假设显示缓冲单元用30H37H)在主程序中对8255初始化MOV A,#89H;8255的A口、B口为输出MOV DPTR,#0FEFFH;指向8255控制口MOVX DPTR,A ;将控制字写入控制寄存器显示子程序完成动态显示的控制3,定义工作工作方式选择T0工作于定时、方式2、定时时间为250ms。TMOD=0000 0010B=02H计算初值fosc=11.0592MHz 机器周期TM=1.09 ms 要定时250 ms 即要计数230个机器周期脉冲初值=28-230=26=1AH MOV TMOD,#02H MOV TL0,#1AH MOV TH0,#1AH 定时:将时钟脉冲经12分频后的脉冲(即机器周期脉冲)作为计数的脉冲源。 定时时间Tc=X*TM=(216-初值) * 12/fosc即对机器周期脉冲TM进行计数。 4,计数初值设定38H、39H作为软件计数器 MOV 38H,#200 ; MOV 39H,#20 5,日期、时间、闹铃初始设置利用定时器T0定时,模拟24小时走时的电子钟,时、分、秒以BCD码形式依次存放在3CH、3BH、3AH,闹钟存放在41H、42H单元。10 CLR 20H.0 MOV 21H,#0H MOV 55H,#0H MOV 56H,#0FFH MOV 41H,#34H MOV 42H,#22H MOV 3AH,#55H MOV 3BH,#33H MOV 3CH,#22H MOV 4AH,#30H MOV 4BH,#4H MOV 4CH,#23H6,BCD码说明:用4位二进制数表示一位十进制数。8421 BCD码用 0000 1001 表示十进制数的09非压缩BCD码:一个字节只表示一位十进制数,高4位任意,低4位的00001001表示09。如 9 的非压缩BCD码:00001001 = 09H压缩BCD码:一个字节表示两位十进制数。如 97 的压缩BCD码:1001 0111 = 97HBCD码特点:与十进制间转换简便,计算须稍作调整处理。将累加器A中0FFH范围内的二进制数转换为BCD数(0255)。1,BCD码有两种存放形式一个字节存放一位BCD码,高半字节取0,常用于显示和输出; 一个字节存放两位BCD码,即压缩BCD码,有利于节省存储空间。编程思路将A中的二进制数除以100,所得商即为百位数,将余数再除以10,所得商即为十位数,余数即为个位数。二,调用程序说明1,利用LCALL指令调用各子程序2, 8255A可编程控制器中包含A口、B口、C口、控制口,各入口地址为地址为FEFCH、FEFDH、FEFEH、FEFFH; 且实验板上的8位数码管显示器就是采用动态显示方式,它使用8255的A口作为字段控制口,B口作为字位控制线。所以,A口为数码管中的段码显示,MOV DPTR,#0FEFCH判断各段是否显示正常。共阴极结构的数码管显示“0”的字段码为:D7D6D5D4D3D2D1D0字形码dpgfedCba001111113FHB口为数码管各位的位显,MOV DPTR,#0FEFDH 判断各位是否显示正常,利用MOV DPTR,#0FEFDH ; MOV A,#80H ;MOVX DPTR,A ;赋入#80H,从左边第一位一次点亮到最低位并通过自检程序MOVX DPTR,A ;各位位显 LCALL D_2 ;调用延时 JB ACC.0,ZIJIAN4 ;判断最低位有无显示 RR A SJMP ZIJIAN3DISP:MOV R0,#30H ;显示缓冲单元首地址 MOV R3,#01H ;字位码初值(从最右位起) MOV A,R3DISP1:MOV DPTR,#0FEFDH ;8255B口(字位码输出口) MOVX DPTR,A ;输出字位码 MOV DPTR,#0FEFCH ;8255A口(字段码输出口) MOV A,R0 ;取显示数据码 ADD A,#TAB-NPC ;加TAB与NPC差值 MOVC A,A+PC ;查表得相应字段码 NPC:MOVX DPTR,A ;输出字段码LCALL D1MS ;保持显示1毫秒通过此段程序检测最高位到最低位的点亮情况。以及利用查表得相应字段码,输出字段码。3,中断服务程序的设定中断服务程序部分在相应的中断入口地址设置一条跳转指令,转移到中断服务程序的实际入口处且根据需要保护现场,及恢复现场;中断返回(RETI)。PUSH ACC ;进入中断服务程序PUSH PSW ;POP PSW;恢复现场POP ACC ;RETI;4,程序中设有软件计数器#38H#39H,并在中断服务程序中计数时间值:时间设定中断为1S, DJNZ 38H,DONE ;每250us减1,满1s? MOV 38H,#200 ;250*200=0.05s DJNZ 39H,DONE ;每0.05s加1,满1s? MOV 39H,#20 ;20*0.05=1s5,判断时间/日期切换利用标志位#55H、#56H,进行判断,#56H=0时为闹钟/日期(时间)状态,#56H=1时为日期/日期状态,且#55H设定为5S自动切换之间的状态,并通过各按键的控制可实现相应的功能。在时间状态时,要进行各单元的值满否判断,并对加后的值进行DA A调整,再重新存入所处单元中。判断秒单元是否满60S,与设定值比较,若满一分钟则秒单元置1,分钟单元加1;分钟单元则判定满60min否,与设定值进行比较,满一小时,则分钟单元置1,时单元加1,;时单元则判断满24h否,与设定值进行比较计数满24h,则时单元清零,重新计时,日单元加1。日单元即天数加值,判断计满天数且判断所处的平年/闰年的月份,平年2月份为28天,闰年2月份为29天,其余月份天数相同。 MOV A,4AH ;日单元存入累加器A中 ADD A,#1 ;天数加1 DA A ;进行十进制调整 MOV 4AH,A LCALL PD ;调用判断闰年程序日单元天数计满,则月单元加1,此时调用判断平闰年程序进行判断位平年还是闰年,其中判断平闰年:从20002099年判断平闰年。例如,取2023年,则固定#20H不变,取#23H的2*10,3+2*10=23,则23/4=65,余数为5,有余数为平年,若没余数则为闰年,(余数为0则为闰年,余数为1则为平年)。求得的平年/或闰年在进行查表去月份存入标志位中再返回判断月份为平年还是闰年。所得的#47H单元中为平年或闰年的月份与日单元进行比较,若相等则日单元#4AH置1,月单元#4BH加1。月单元则比较设定值是否满13月,月份满则,月单元#4BH置1,年单元#4CH加1。并随时对加值进行DA A调整再重新存入相应单元。平年:TT1: DB 21H,32H,29H,32H,31H,32H,31H,32H,32H,31H,1H,2H,3H,4H,5H,6H,32H,31H,32H闰年:TT2: DB 21H,32H,30H,32H,31H,32H,31H,32H,32H,31H,1H,2H,3H,4H,5H,6H,32H,31H,32H其中,后面的1H,2H,3H,4H,5H,6H是用于DA 调整,因为单片机设计的时钟识别的是十进制的值,而BCD码只显示09的值,因此程序中十六进制的值进行DA加六调整,而预留出来的空间,当查10,11,12月时因为这些值超过9的范围,因此加六进行调整刚好查到10,11,12月的值。 字段控制口反相驱动字位控制口反相驱动共阴极各单元功能流程图:中断开始SET1按键扫描开始月单元星期单元调整月单元日单元单元加1单元加1单元加1调整日单元调整星期单元开分单元时单元关定时单元加60单元加1调整分单元调整时单元调整秒单元中断返回6,闹铃设定程序闹铃设有标志位#20H.0,#21H。其中#20H.0用于设定闹钟显示(ON /OFF),#21H用于设定闹钟开关。对时间进行设置定时并比较#41H、#42H单元中设置值,并由蜂鸣器报时(CLR P3.2,SETB P3.2)。并由K0,K1键对闹铃时间调整。7,键盘部分:键盘是单片机应用系统的一个重要输入设备,用于输入数据、干预系统的工作状态。 按连接方式:独立式按键和行列式(矩阵式)键盘。本次设计采用的是独立式键盘扫描方式,每个按键需占用一根I/O口线,各个按键相互独立,互不影响,为低电平有效。并设置对按键有无按下进行判断,通过消抖调用延时等待按键释放确认按键有无按下,并相应执行按键下的程序。其中K0、K1为复用按键。有键闭合吗?延时消抖动确有键闭合吗?判断闭合键键号闭合键释放否?执行键功能返回NNNYYY开始键盘管理程序(1)检测是否有按键闭合;(2)若有键闭合,延时消抖动;(3)确认是否有按键闭合;(4)判断闭合按键键号;(5)等待按键释放;(6)执行相应键功能。JZ KD ;若无键闭合则返回LCALL DIMS_1 MOVX A,DPTR CPL A JZ KD MOVX A,DPTRMOV B,A KW: MOVX A,DPTR CPL A JNZ KW ;等待按键释放 对应各按键: MOV A,B ;取键值 JNB ACC.0,K0 ;若是K0闭合则转K0键功能程序 JNB ACC.1,K1 ;若是K1闭合则转K1键功能程序 JNB ACC.7,K7 ;若是K7闭合则转K7键功能程序 KD:RET ;返回K0:MOV A,30H ; K0键功能程序 ADD A,#1 DA A ANL A,#0FH MOV 30H,A RETK0: JB 20H.0 ,SJ1 ;调分钟K0键功能程序 MOVA,3BHADDA,#1DAAMOV3BH,ACJNEA,#60H,J0MOV3BH,#0SJMP J0 。 。8,拆字部分:对时间、日期、闹钟各单元拆字并设有专门单元存储#30H#37H。闹钟拆字,例如时间里的秒单元#3AH,缓冲单元里取值与#0FFH相与显示个位,再取缓冲单元里#30H的值与#0F0H相与显示十位,并将十位进行高低字节交换并最终去交换后的个位存入缓冲单元,其中秒单元里2位、5位为固定值“”设定。秒单元拆字结束相应缓冲单元加1,在进行分单元#3BH、时单元#3CH拆字知道执行到#3DH执行完毕则返回。 CZ: JB 20H.0, CZ4 ;判断20H.0是否等于0 MOV A,56H;进行判断切换时间/日期 CJNE A, #0FFH,CZ2;比较是执行时间拆字还是日期拆字 MOV R0,#3AH;秒单元存入寄存器R0中 MOV R1,#30H;缓冲单元存入R1中 MOV 32H,#0AH;固定值“” MOV 35H,#0AH CZ1:MOV A,R0;取秒单元值 ANL A,#0FH;相与取个位 MOV R1,A;存入缓冲单元#30H里 INC R1;缓冲单元加1,#30H+1=#31H MOV A,R0;在去秒单元值 ANL A,#0F0H;相与取十位 SWAP A;十位高低字节交换 MOV R1,A;去十位交换后的个位存入缓冲单元 INC R0;秒单元#3AH加1进去分钟单元#3BH拆字 INC R1;缓冲单元加1为#32H INC R1;再加1为#33H CJNE R0,#3DH,CZ1;秒分时进行拆字循环知道#3DH则拆字完毕 RET;返回主程序日期、闹钟单元拆字、其中日期固定值为年的前两位#0H、#2H,其余为进行拆字。闹钟单元拆字固定值为ON、OFF即#0AH、#0BH、#0CH、#0H,#0AH、#0DH、#0DH、#0H。执行完各单

温馨提示

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

评论

0/150

提交评论