




已阅读5页,还剩21页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
单片机课程论文设计-电子钟课程设计该作品是个性化电子钟设计,技术上主要用单片机(at89s52)主控,6位led数码显示,分别显示“小时:分钟:秒”。该作品主要用于24小时计时显示,能整时报时,能作为秒表使用,能定时闹铃1分钟。功能介绍:(1)上电以后自动进入计时状态,起始于00:00:00。(2)设计键盘调整时间,完成时间设计,并设置闹钟。(3)定时时间为1/100秒,可采用定时器实现。(4)采用led数码管显示,时、分,秒采用数字显示。(5)采用24小时制,具有方便的时间调校功能。(6)具有时钟和秒表的切换功能。使用方法:开机后时钟在00:00:00起开始计时。(1) 长按p3.2进入调分状态:分单元闪烁,按p3.2加1,按p3.3减1.再长按p3.2进入 时调整状态,时单元闪烁,加减调整同调分.按长按退出调整状态。(2) (2)按p3.3进入设定闹时状态: 12:00: ,可进行分设定,按p3.4分加1,再按p3.2为时调整,按p3.4时加1,按p3.3调闹钟结束.在闹铃时可按p3.2停闹,不按闹铃1分钟。(3)按下p3.4进入秒表状态:再按p3.4秒表又启动,按p3.4暂停,再按p3.4秒表清零,按p3.4退出秒表回到时钟状态。二、电路原理图 如原理图所示,硬件系统主要由单片机最小应用系统、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、定时器/计数器、串口、中断继续工作。掉电保护方式下,ram内容被保存,振荡器被冻结,单片机一切工作停止,直到下一个中断或硬件复位为止主要性能:与mcs-51单片机产品兼容 、8k字节在系统可编程flash存储器、 1000次擦写周期、 全静态操作:0hz33hz 、 三级加密程序存储器 、 32个可编程i/o口线 、三个16位定时器/计数器 八个中断源 、全双工uart串行通道、 低功耗空闲和掉电模式 、掉电后中断可唤醒、看门狗定时器 、双数据指针 、掉电标识符 。2、显示模块 led数码管是由发光二极管构成的,亦称半导体数码管。将条状发光二极管按照共阴极(负极)或共阳极(正极)的方法连接,组成“8”字,再把发光二极管另一电极作笔段电极,就构成了led数码管。若按规定使某些笔段上的发光二极管发光,就能显示从09的系列数字。同荧光数码管(vfd)、辉光数码管(nrt)相比,它具有:体积小、功耗低、耐震动、寿命长、亮度高、单色性好、发光响应的时间短,能与ttl、cmos电路兼容等的数显器件。+、-分别表示公共阳极和公共阴极。ag是7个笔段电极,dp为小数点。另有一种字高为76mm的超小型led数码管,管脚从左右两排引出,小数点则是独立的。 本系统利用6位led数码管显示时间,共阴极结构。led数码管由7段发光二极管组成,当要显示某个数字时只要将数字所对应的引脚送入低电平。 3.按键模块 本设计中主要有三个控制按键,按键功能为:(1)p3.2为调时间模式,长按p3.2进入调分状态:分单元闪烁,按p3.2加1,按p3.3减1.再长按p3.2进入时调整状态,时单元闪烁,加减调整同调分.按长按退出调整状态。(2)按p3.3进入设定闹时状态: 12:00: ,可进行分设定,按p3.4分加1,再按p3.2为时调整,按p3.4时加1,按p3.3调闹钟结束.在闹铃时可按p3.2停闹,不按闹铃1分钟。(3)按下p3.4进入秒表状态:再按p3.4秒表又启动,按p3.4暂停,再按p3.4秒表清零,按p3.4退出秒表回到时钟状态。4晶振模块在at89s51芯片内部有一个高增益反相放大器,其输入端为芯片引脚xtal1,输出端为引脚xtal2。而在芯片内部,xtal1和xtal2之间跨接晶体振荡器和微调电容,从而构成一个稳定的自激振荡器。时钟电路产生的振荡脉冲经过触发器进行二分频之后,才成为单片机的时钟脉冲信号。晶振电路三、程序设计源程序代码; at89s52时钟程序 ;*定时器t0、t1溢出周期为50ms,t0为秒计数用, t1为调整时闪烁及秒表定时用,p3.2、p3.3、p3.4为调整按钮,p0口为字符输出口,p2为扫描口,p1.2为蜂呜器口,采用共阳显示管。50h-55h为闹钟定时单元,60h-65h为秒表计时单元,70h-75h为显示时间单元,76h-79h为分时计时单元。03h标志=0时钟闪烁,=1秒表, 05h=0,不闹铃,=1要闹铃. 07h每秒改变一次,用作间隔呜叫.* dispfirst equ 30h ;显示首址存放单元 bell equ p1.2 conbs equ 2fh ;存放报时次数 clock equ 2dh* 中断入口程序 * org 0000h ;程序执行开始地址 ljmp start ;跳到标号start执行 org 0003h ;外中断0中断程序入口 reti ;外中断0中断返回 org 000bh ;定时器t0中断程序入口 ljmp intt0 ;跳至intto执行 org 0013h ;外中断1中断程序入口 reti ;外中断1中断返回 org 001bh ;定时器t1中断程序入口 ljmp intt1 ;跳至intt1执行 org 0023h ;串行中断程序入口地址 reti ;串行中断程序返回*以下程序开始 ;*整点报时用 qqqq: mov a,#10h mov b,79h mul ab add a,78h mov conbs,a bsloop: lcall ds21ms lcall dl1s lcall dl1s lcall dl1s djnz conbs,bsloop clr 08h ;清整点报时标志 ajmp start1* 主程序开始 ;* start: lcall st ;上电显示00:00:00 mov r0,#00h ;清00h-7fh内存单元 mov r7,#80h ; cleardisp: mov r0,#00h ; inc r0 ; djnz r7,cleardisp ; mov 20h,#00h ;清20h(标志用) mov 55h,#1 mov 54h,#2 mov 7ah,#0ah ;放入熄灭符数据 mov tmod,#11h ;设t0、t1为16位定时器 mov tl0,#0b0h ;50ms定时初值(t0计时用) mov th0,#3ch ;50ms定时初值 mov tl1,#0b0h ;50ms定时初值(t1闪烁定时用) mov th1,#3ch ;50ms定时初值 setb ea ;总中断开放 setb et0 ;允许t0中断 setb tr0 ;开启t0定时器 mov r4,#14h ;1秒定时用计数值(50ms20) mov dispfirst,#70h ;显示单元为70-75h;以下主程序循环 start1: lcall display ;调用显示子程序 jnb p3.2,setmm1 ;p3.2口为0时转时间调整程序 jnb p3.3,tsfun ;定时闹铃设定 jnb p3.4,funpt ;秒表功能(stop,run,clr) jb 08h, qqqq ajmp start1 ;p3.2口为1时跳回start1 funpt: ljmp funptt start12: ljmp start1以下闹铃时间设定程序,按p3.3进入设定 tsfun: lcall ds20ms jb p3.3,start1 ; wait113: jnb p3.3,wait113 ;等待键释放 jb 05h,closesp ;闹铃已开的话,关闹铃 mov dispfirst,#52h ;进入闹铃设定程序,显示52-55h闹钟定时单元 dswait: setb ea lcall display jnb p3.4,dsfinc ;分加1 jnb p3.2,dsdec ;分减1 jnb p3.3,dssfu ;进入时调整 ajmp dswait closesp: clr 05h ;关闹铃标志 clr bell ajmp start1 dssfu: lcall ds20ms ;消抖 jb p3.3, dswait ljmp dssfunn ;进入时调整; setmm1: ljmp setmm ;转到时间调整程序setmm dsfinc : lcall ds20ms ;消抖 jb p3.4, dswait dswait12: lcall display ;等键 释放 jnb p3.4, dswait12 clr ea mov r0,#53h ; lcall add1 ;闹铃设定分加1 mov a,r3 ;分数据放入a clr c ;清进位标志 cjne a,#60h,addhh22 ; addhh22: jc dswait ;小于60分时返回 acall clr0 ;大于或等于60分时分计时单元清0 ajmp dswait dsdec : lcall ds20ms ;消抖 jb p3.2, dswait dswaitee: lcall display ;等键 释放 jnb p3.2, dswaitee clr ea mov r0,#53h ; lcall sub1 ;闹铃设定分减1 ljmp dswait;以下秒表暂停清零功能程序;按下p3.4切换秒表功能,再按开始计时,暂停或清0,最后按p3.4退出秒表回到时钟计时 funptt: lcall ds20ms jb p3.4,start12 wait22: jnb p3.4,wait21 cpl 03h jnb 03h,timfun mov dispfirst,#60h ;显示秒表数据单元 mov 60h,#00h mov 61h,#00h mov 62h,#00h mov 63h,#00h mov 64h,#00h mov 65h,#00h mov tl1,#0f0h ;10ms定时初值 mov th1,#0d8h ;10ms定时初值 wait88:lcall ds20ms jb p3.4,wait81 wait99:jnb p3.4,wait99 setb tr1 ;t1运行控制软件 setb et1 ;t1溢出中断允许 wait33: lcall ds20ms jb p3.4,wait31 wait44: jnb p3.4,wait41 clr et1 clr tr1 wait55: lcall ds20ms jb p3.4,wait51 wait66: jnb p3.4,wait61 mov 60h,#00h mov 61h,#00h mov 62h,#00h mov 63h,#00h mov 64h,#00h mov 65h,#00h timfun:mov dispfirst,#72h ;显示时钟数据单元 clr et1 clr tr1 ajmp funss11 funss11: ajmp start1;以下键等待释放时显示不会熄灭用 wait21: lcall display ajmp wait22 wait31: lcall display ajmp wait33 wait41: lcall display ajmp wait44 wait51: lcall display ajmp wait55 wait61: lcall display ajmp wait66 wait81: lcall display ajmp wait88 wait91: lcall display ajmp wait99; 1秒计时程序 ;t0中断服务程序 intt0: push acc ;累加器入栈保护 push psw ;状态字入栈保护 clr et0 ;关t0中断允许 clr tr0 ;关闭定时器t0 mov a,#0b7h ;中断响应时间同步修正 add a,tl0 ;低8位初值修正 mov tl0,a ;重装初值(低8位修正值) mov a,#3ch ;高8位初值修正 addc a,th0 ; mov th0,a ;重装初值(高8位修正值) setb tr0 ;开启定时器t0 djnz r4, outt0 ;20次中断未到中断退出 addss: mov r4,#14h ;20次中断到(1秒)重赋初值 cpl 07h ;闹铃时间隔呜叫用 mov r0,#71h ;指向秒计时单元(71h-72h) acall add1 ;调用加1程序(加1秒操作) mov a,r3 ;秒数据放入a(r3为2位十进制数组合) clr c ;清进位标志 cjne a,#60h,addmm ; addmm: jc outt0 ;小于60秒时中断退出 acall clr0 ;大于或等于60秒时对秒计时单元清0 mov r0,#77h ;指向分计时单元(76h-77h) acall add1 ;分计时单元加1分钟 mov a,r3 ;分数据放入a clr c ;清进位标志 cjne a,#60h,addhh ; addhh: jc outt0 ;小于60分时中断退出 acall clr0 ;大于或等于60分时分计时单元清0 lcall ds20ms ;正点报时 setb 08h mov r0,#79h ;指向小时计时单元(78h-79h) acall add1 ;小时计时单元加1小时 mov a,r3 ;时数据放入a clr c ;清进位标志 cjne a,#24h,hour ; hour: jc outt0 ;小于24小时中断退出 acall clr0 ;大于或等于24小时小时计时单元清0 outt0: mov 72h,76h ;中断退出时将分、时计时单元数据移 mov 73h,77h ;入对应显示单元 mov 74h,78h ; mov 75h,79h ; lcall baoj pop psw ;恢复状态字(出栈) pop acc ;恢复累加器 setb et0 ;开放t0中断 reti ;中断返回;*; 闪动调时程序秒表功能程序 ;*;t1中断服务程序,用作时间调整时调整单元闪烁指示或秒表计时intt1: push acc ;中断现场保护 push psw ; jb 03h, mmfun ;=1时秒表 mov tl1, #0b0h ;装定时器t1定时初值 mov th1, #3ch ; djnz r2,intt1out ;0.3秒未到退出中断(50ms中断6次) mov r2,#06h ;重装0.3秒定时用初值 cpl 02h ;0.3秒定时到对闪烁标志取反 jb 02h,flash1 ;02h位为1时显示单元熄灭 mov 72h,76h ;02h位为0时正常显示 mov 73h,77h ; mov 74h,78h ; mov 75h,79h ;intt1out: pop psw ;恢复现场 pop acc ; reti ;中断退出flash1: jb 01h,flash2 ;01h位为1时,转小时熄灭控制 mov 72h,7ah ;01h位为0时,熄灭符数据放入分 mov 73h,7ah ;显示单元(72h-73h),将不显示分数据 mov 74h,78h ; mov 75h,79h ; ajmp intt1out ;转中断退出flash2: mov 72h,76h ;01h位为1时,熄灭符数据放入小时 mov 73h,77h ;显示单元(74h-75h),小时数据将不显示 mov 74h,7ah ; mov 75h,7ah ; ajmp intt1out ;转中断退出;mmfun : clr tr1 mov a,#0f7h ;中断响应时间同步修正,重装初值(10ms) add a,tl1 ;低8位初值修正 mov tl1,a ;重装初值(低8位修正值) mov a,#0d8h ;高8位初值修正 addc a,th1 ; mov th1,a ;重装初值(高8位修正值) setb tr1 ;开启定时器t1 mov r0,#61h ;指向秒计时单元(71h-72h) acall add1 ;调用加1程序(加1秒操作) clr c ; mov a,r3 ; jz fss1 ;加1后为00,c=0 ajmp outt01 ;加1后不为00,c=1 fss1: acall clr0 ;大于或等于60秒时对秒计时单元清0 mov r0,#63h ;指向分计时单元(76h-77h) acall add1 ;分计时单元加1分钟 mov a,r3 ;分数据放入a clr c ;清进位标志 cjne a,#60h,addhh1 ; addhh1: jc outt01 ;小于60分时中断退出 lcall clr0 ;大于或等于60分时分计时单元清0 mov r0,#65h ;指向小时计时单元(78h-79h) acall add1 ;小时计时单元加1小时 outt01: pop psw ;恢复状态字(出栈) pop acc ;恢复累加器 reti ;中断返回*; 加1子 程 序 ;* add1: mov a,r0 ;取当前计时单元数据到a dec r0 ;指向前一地址 swap a ;a中数据高四位与低四位交换 orl a,r0 ;前一地址中数据放入a中低四位 add a,#01h ;a加1操作 da a ;十进制调整 mov r3,a ;移入r3寄存器 anl a,#0fh ;高四位变0 mov r0,a ;放回前一地址单元 mov a,r3 ;取回r3中暂存数据 inc r0 ;指向当前地址单元 swap a ;a中数据高四位与低四位交换 anl a,#0fh ;高四位变0 mov r0,a ;数据放入当削地址单元中 ret ;子程序返回;*; 分减1子 程 序 ;*; sub1: mov a,r0 ;取当前计时单元数据到a dec r0 ;指向前一地址 swap a ;a中数据高四位与低四位交换 orl a,r0 ;前一地址中数据放入a中低四位 jz sub11 dec a ;a减1操作 sub111: mov r3,a ;移入r3寄存器 anl a,#0fh ;高四位变0 clr c ;清进位标志 subb a,#0ah sub1111: jc sub1110 mov r0,#09h ;大于等于0ah,为9 sub110: mov a,r3 ;取回r3中暂存数据 inc r0 ;指向当前地址单元 swap a ;a中数据高四位与低四位交换 anl a,#0fh ;高四位变0 mov r0,a ;数据放入当削地址单元中 ret ;子程序返回 ; sub11: mov a,#59h ajmp sub111 sub1110:mov a,r3 ;移入r3寄存器 anl a,#0fh ;高四位变0 mov r0,a ajmp sub110;*; 时减1子 程 序 ;* subb1:mov a,r0 ;取当前计时单元数据到a dec r0 ;指向前一地址 swap a ;a中数据高四位与低四位交换 orl a,r0 ;前一地址中数据放入a中低四位 jz subb11 ;00减1为23(小时) dec a ;a减1操作 subb111:mov r3,a ;移入r3寄存器 anl a,#0fh ;高四位变0 clr c ;清进位标志 subb a,#0ah ;时个位大于9为9 subb1111: jc subb1110 ; mov r0,#09h ;大于等于0ah,为9 subb110: mov a,r3 ;取回r3中暂存数据 inc r0 ;指向当前地址单元 swap a ;a中数据高四位与低四位交换 anl a,#0fh ;高四位变0 mov r0,a ;时十位数数据放入 ret ;子程序返回 ; subb11: mov a,#23h ajmp subb111 subb1110:mov a,r3
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 国网湖南电力招聘考试真题2024
- 运输合同协议表
- 工业企业搬迁项目2025年社会稳定风险监测与预警报告
- 2025(修订版)监控安装简易合同
- 2025销售员签订合同注意事项
- 贵州贵财招标有限责任公司招聘笔试题库2025
- 2025标准合同模板:金融类合同示范文本
- 2025代理产品品牌合作合同标准版模板
- 2025年年版合同范本全书
- 2025年投资融资合同范本
- 45G互操作及信令流程
- 友善主题班会课件
- 自动喷灌设计说明及安装大样
- 杭州市“教坛新秀”理论考试简答题汇总
- 人教版(2019)必修三 Unit 3 Diverse Cultures Listening and Talking课件
- 医养结合机构服务质量评价标准(二级医养结合机构)
- 三年级上册数学课件-4.2 两、三位数除以一位数的笔算丨苏教版 (共34张PPT)
- 卡西欧PRO-TREK-PRW-6000使用手册-基础操作
- 建筑结构试验知识点总结
- 2022年公路工程竣交工验收办法实施细则范文
- 日本川崎市武藏小杉格林木(GrandTree)创新型购物中心调研分析报告课件
评论
0/150
提交评论