欢迎来到得力文库 - 分享文档赚钱的网站! | 帮助中心 好文档才是您的得力助手!
得力文库 - 分享文档赚钱的网站
全部分类
  • 研究报告>
  • 管理文献>
  • 标准材料>
  • 技术资料>
  • 教育专区>
  • 应用文书>
  • 生活休闲>
  • 考试试题>
  • pptx模板>
  • 工商注册>
  • 期刊短文>
  • 图片设计>
  • ImageVerifierCode 换一换

    51单片机数码管时钟电路的设计.doc

    • 资源ID:873187       资源大小:89.50KB        全文页数:19页
    • 资源格式: DOC        下载积分:10金币
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录   QQ登录  
    二维码
    微信扫一扫登录
    下载资源需要10金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    51单片机数码管时钟电路的设计.doc

    数码管时钟电路的设计数码管时钟电路的设计1、设计目的:设计目的:通过这次课程设计掌握单片机系统的基本设计步骤及设计思路,掌握 汇编语言的用法及各种指令的含义,比较熟练的运用指令进行单片机系统 的设计的,熟悉用 KEIL 软件进行汇编语言的汇编,以及把代码写入实验 板中,观测代码结合实际的运行结果后进行调整,体会到编程的分析问题、 确定算法、画程序流程图、编写程序、程序功能模块化的优点的各各步骤。2、设计要求:设计要求:LED 数码管时钟电路采用 24h 计时方式,时、分、秒用六位数码管显 示。该电路采用 AT89C2051 单片机,使用 3V 电池供电,只使用一个按键 开关即可进入调时、省电(不显示 LED 数码管)和正常显示三种状态。3、设计实验内容:设计实验内容:1. 硬件的设计硬件的设计 其采用 AT89C51 单片机应用设计,LED 显示采用动态扫描方式实现, P0 口输出段码数据,P2 口输出位码数据 ,P1.1、P1.2 接按钮开关。为了 提供 LED 数码管的驱动电流,采用 6MHz 晶振。12. 系统总体分析系统总体分析系统主要包含四大模块:显示模块、时间计时模块、模式切换模块和 模式设置模块。 显示模块:主要由主循环负责。内存中开辟了一段 8 字节的内存空间, 用作数据显示的字符缓冲区。主循环不断将缓冲区中的字符呈现至数 码管。 时间计时模块:电子钟的核心模块,记录了时间的时、分、秒信息。 模式切换模块(MODE):切换电子钟的设置模式,包括时设置、分 设置、秒设置、闹铃开关设置、闹铃时设置和闹铃分设置。相关数据 被设置时将闪烁显示。 模式设置模块(CONFIG):通过判断设置模式(MODE) ,执行相应 的设置。如时、分、秒的增 1 以及闹铃开关的变换。另外,主循环还负责扫描键盘,检测相应键是否被按下,若 MODE 键 被按下则在特定单元中登记该功能,并启动定时器 1,然后返回继续执行 显示功能。在定时器 1 中断时,被登记的功能正式执行。期间用时约 10ms,用以消除机械抖动。主循环流程图大致如下:开始键被按下登记相应功能数码管显示是否图(一)主循环流程图2定时器 1 中断服务程序流程图如下:定时器 1 中断logfunc = ?执行 MODE执行 CONFIG结束MODECONFIG图(二)定时器 1 中断服务程序流程图3. 系统主要程序的设计系统主要程序的设计 1)主程序主程序本设计中的主程序主要负责对键盘扫描及显示数据,还包括判断是否 闹钟正在活动。若键盘中的 P1.6(模式键)或 P1.7(设置键)被按下,登 记将被执行的功能,主循环不负责功能模块的执行。若闹钟正在活动,调 用蜂鸣函数。其中 bPalse 标识了一秒的前半秒和后半秒,是为了控制显示 数据的半秒闪烁。主函数还包含初始化操作,以下省略。 loop:MOV B, #01111111B ;位选通信号MOV R0, #prebuf - 01H ;数据缓冲区 nextnum:ACALL keyscan ;扫描键盘INC R0MOV A, R0PUSH ACCMOV A, BRL AMOV B, AJB bPalse, showORL A, dmaskJNB bAlaIng, show3MOV led, #0FFHACALL beeponce 若闹铃活动,调用蜂鸣函数DEC SPSJMP loop show: PUSH ACCACALL displayone 在特定数码管显示数据。DEC SPDEC SPACALL delayCJNE R0, #prebufend, nextnumSJMP loopkeyscan:JNB keym, keymode ;若切换键被按下,登记“切换”功能JNB keyc, keyconf ;若设置键被按下,登记“设置”功能RET;= ; ;log function 'mode' ; ;= keymode:MOV funclog, #01H ;key actACALL funcperform ;激活“功能执行模块” (见下文) ,RET;= ; ;log function 'config' ; ;= keyconf:MOV funclog, #02HACALL funcperform ;激活“功能执行模块” (见下文)RET2)显示子程序显示子程序在特定数码管显示数据,通过堆栈传递参数。 第一个参数是待显示的字符,第二个参数是位选通信号。 函数通过查字形码表将字形显示至数码管。 displayone:PUSH ACCPUSH PSWMOV A, R0PUSH ACCPUSH BMOV PSW, #00HMOV A, SPSUBB A, #07HMOV R0, A4MOV A, R0INC R0MOV B, R0PUSH DPLPUSH DPHMOV DPTR, #metrixMOVC A, A + DPTRJNB bPalse, noftANL A, ft noft:MOV lmask, BMOV led, APOP DPHPOP DPLPOP BPOP ACCMOV R0, APOP PSWPOP ACCRET3)定时器定时器 TO 中断服务程序中断服务程序 电子钟的计秒程序,负责计算时间。 act: ;main timer actorCJNE R2, #0BH, conCLR bPalse ;palse per second con: DJNZ R2, leaveMOV R2, #14HPUSH ACCPUSH PSWMOV PSW, #00HMOV A, s ;sINC ADA AMOV s, ACJNE A, #60H, incnMOV s, #00HMOV A, m ;mINC ADA AMOV m, ACJNE A, #60H, incnMOV m, #00HMOV A, h ;hINC ADA AMOV h, ACJNE A, #24H, incnMOV h, #00H incn:SETB bPalse5JNB bAlaOn, alarmoffACALL checkala ;check alarm when alarm is ON alarmoff:MOV A, npageANL A, #02HJNZ skipACALL prepare skip: POP PSWPOP ACC leave:MOV TH0,#03CH MOV TL0,#0B0HRETI4)模式切换程序模式切换程序切换设置模式,包括时间时设置、时间分设置、时间秒设置、闹铃开 关设置、闹铃时设置、闹铃分设置。 mode: ;mode;SETB P3.2PUSH ACCPUSH PSWPUSH DPLPUSH DPHJNB bAlaIng, modeskipSETB bKick ;stop alarmCLR bAlaIngSJMP modeleave modeskip:MOV npage, #00HMOV DPTR, #maskdatMOV A, cmodeINC ACJNE A, #07H, enmodeMOV A, #00H enmode:MOV cmode, AANL A, #04HJZ notalapageMOV npage, #02HACALL preala ;时钟调整页准备 notalapage:MOV A, cmodeMOVC A, A + DPTRMOV dmask, A ;设置时闪烁 modeleave:POP DPHPOP DPLPOP PSWPOP ACCRET65)模式设置程序模式设置程序对时间量执行加 1,特别的闹铃开关执行开关设置。 conf: ;conf;SETB P3.3PUSH ACCPUSH PSWMOV PSW, #00HMOV A, cmodePUSH DPLPUSH DPHJNB bAlaIng, confskip;SETB bKick ;stop alarm;CLR bAlaIngSJMP confleave confskip:MOV DPTR, #confsetRL AJMP A + DPTR set1: ;时设置MOV A, hINC ADA AMOV h, ACJNE A, #24H, notsetMOV h, #00HSJMP notset set2: ;分设置MOV A, m INC ADA AMOV m, ACJNE A, #60H, notsetMOV m, #00HSJMP notset set3: ;秒设置MOV A, s INC ADA AMOV s, A CJNE A, #60H, notsetMOV s, #00HSJMP notset setae:CPL bAlaOn ;闹钟开关SJMP notseta setah:MOV A, ah ;闹钟时设置INC ADA AMOV ah, ACJNE A, #24H, notsetaMOV ah, #00HSJMP notseta setam:MOV A, am ;闹钟分设置7INC ADA AMOV am, ACJNE A, #60H, notsetaMOV am, #00H notseta:ACALL prealaCLR bKickSJMP confleave notset:ACALL prepare confleave:POP DPHPOP DPLPOP PSWPOP ACCRET confset:SJMP confleaveSJMP set1SJMP set2SJMP set3SJMP setaeSJMP setahSJMP setam6)功能执行程序功能执行程序执行程序负责执行被登记的功能,功能由主循环扫描键盘并登记。主 循环中,当扫描到有键盘按下时,登记下将被执行的功能,然后启动定时 器 1,定时器 1 的中断服务程序即是功能执行程序,中断程序分析并执行 被登记的功能。 encperform:CLR TR1 ;act oncePUSH ACCPUSH PSWMOV A, funclogCJNE A, #01H, encconfJNB keym, encperformleave ;action just at button up;ACALL mode ;do 'mode' functionSJMP encperformleave encconf:CJNE A, #02H, encperformleaveJNB keyc, encperformleave ;action just at button up;ACALL conf ;do 'config' function encperformleave:POP PSWPOP ACCRETI4、完整源代码完整源代码s EQU 30H m EQU 31H h EQU 32H dmask EQU 33H cmode EQU 34H ft EQU 36Hprebuf EQU 37H ;8 byte buffer prebufend EQU 3EHam EQU 3FH ;alarm minite ah EQU 40H ;alarm hournpage EQU 41H ;function page funclog EQU 42H ;func to actstack EQU 4FH;pin led EQU P0 lmask EQU P2 beep EQU P3.3 keym EQU P1.6 ;key 'mode' keyc EQU P1.7 ;key 'config'bit addr bPalse EQU 00H bAlaIng EQU 01H bAlaOn EQU 02H bKick EQU 03H;metrix element m_none EQU 0AH m_o EQU 0BH m_f EQU 0CH m_n EQU 0DHorg 0000HLJMP startorg 0003HLJMP modelogger;INT0 to modeorg 000BHLJMP act;timerorg 0013HLJMP conflogger ;INT1 to configorg 001BHLJMP encperform;performer1org 0100Hstart:MOV SP, #stackMOV TMOD,#11HMOV TH0,#3CH MOV TL0,#0B0HMOV R2, #14H ;R2 used by T0MOV s, #00HMOV m, #00HMOV h, #00HMOV dmask, #00HMOV cmode, #00HMOV npage, #00HMOV ah, #23HMOV am, #59HSETB EA SETB ET0 ;T0SETB PT0SETB TR0SETB ET1 ;T1SETB EX0 ;INT0SETB IT0SETB EX1 ;INT1SETB IT1SETB P3.2SETB P3.3SETB keymSETB keycCLRbAlaIng CLRbAlaOn CLRbKickloop:MOV B, #01111111BMOV R0, #prebuf - 01H nextnum:ACALL keyscanINC R0MOV A, R0PUSH ACCMOV A, BRL AMOV B, AJB bPalse, showORL A, dmaskJNB bAlaIng, showMOV led, #0FFH ;clr led when alarmACALL beeponceDEC SPSJMP loop show: 2PUSH ACCACALL displayoneDEC SPDEC SPACALL delayCJNE R0, #prebufend, nextnumSJMP loop ; end startbeeponce:CPL beepMOV R5, #02H beeploop2: MOV R6, #0FFH beeploop1:NOPDJNZ R6, beeploop1DJNZ R5, beeploop2RET ;end beeponce;= ;display one character ; ;param char Character to display ;param mask Position character to display ;=displayone:PUSH ACCPUSH PSWMOV A, R0PUSH ACCPUSH BMOV PSW, #00HMOV A, SPSUBB A, #07HMOV R0, AMOV A, R0INC R0MOV B, R0PUSH DPLPUSH DPHMOV DPTR, #metrixMOVC A, A + DPTRJNB bPalse, noftANL A, ft noft:MOV lmask, BMOV led, APOP DPHPOP DPLPOP BPOP ACCMOV R0, APOP PSWPOP ACC3RET ;end displayonedelay:PUSH ACCMOV A, R5PUSH ACCMOV A, R6PUSH ACCMOV R5, #03H dloopo:MOV R6, #0FFH dloop:NOPDJNZ R6, dloopDJNZ R5, dloopoPOP ACCMOV R6, APOP ACCMOV R5, APOP ACCRET ;end delayORG 0200H;= ; ;prepare time datas ;to the display buffer ; ;= prepare:MOV ft, #11011111B;enable ftPUSH ACCPUSH PSWPUSH BMOV A, R1PUSH ACCMOV R1, #prebufMOV R1, #m_noneINC R1MOV R1, #m_noneINC R1MOV A, h ;hMOV B, ASWAP AANL A, #0FHMOV R1, A ANL B, #0FHINC R1MOV R1, BMOV A, m ;mMOV B, ASWAP A4ANL A, #0FHINC R1MOV R1, AANL B, #0FHINC R1MOV R1, BMOV A, s ;sMOV B, ASWAP AANL A, #0FHINC R1MOV R1, AANL B, #0FHINC R1MOV R1, BPOP ACCMOV R1, APOP BPOP PSWPOP ACCRET ;end prepare;= ; ;prepare alarm datas ;to the display buffer ; ;=preala:MOV ft, #0FFH ;no ftPUSH ACCPUSH PSWMOV R1, #prebufMOV R1, #m_oINC R1JNB bAlaOn, alaoffMOV R1, #m_nINC R1MOV R1, #m_noneSJMP alacon alaoff:MOV R1, #m_fINC R1MOV R1, #m_f alacon:INC R1MOV R1, #m_noneMOV A, ahSWAP AANL A, #0FHINC R15MOV R1, AMOV A, ahANL A, #0FHINC R1MOV R1, AMOV A, amSWAP AANL A, #0FHINC R1MOV R1, AMOV A, amANL A, #0FHINC R1MOV R1, APOP PSWPOP ACCRET ;end prealaORG 0300H ;= ; ;perform action ; ;= encperform:CLR TR1 ;act oncePUSH ACCPUSH PSWMOV A, funclogCJNE A, #01H, encconfJNB keym, encperformleave ;action just at button up;ACALL mode ;do 'mode' functionSJMP encperformleave encconf:CJNE A, #02H, encperformleaveJNB keyc, encperformleave ;action just at button up;ACALL conf ;do 'config' function encperformleave:POP PSWPOP ACCRETI;= ; ;prepare to do function ; ;= funcperform:MOV TH1, #0D8HMOV TL1, #0F0H6SETB TR1RET;= ; ;log function 'mode' ; ;= modelogger:MOV funclog, #01HACALL funcperformRETI;= ; ;log function 'config' ; ;= conflogger:MOV funclog, #02HACALL funcperformRETIORG 0400H;= ; ;mode ; ;to change function ;or stop alarm when ;alarming ; ;=mode: ;mode;SETB P3.2PUSH ACCPUSH PSWPUSH DPLPUSH DPHJNB bAlaIng, modeskipSETB bKick ;stop alarmCLR bAlaIngSJMP modeleave modeskip:MOV npage, #00HMOV DPTR, #maskdatMOV A, cmodeINC ACJNE A, #07H, enmodeMOV A, #00H enmode:MOV cmode, A7ANL A, #04HJZ notalapageMOV npage, #02HACALL preala notalapage:MOV A, cmodeMOVC A, A + DPTRMOV dmask, A modeleave:POP DPHPOP DPLPOP PSWPOP ACCRET ;end mode;= ; ;conf ; ;to change setting ;that the 'mode' decided ; ;=conf: ;conf;SETB P3.3PUSH ACCPUSH PSWMOV PSW, #00HMOV A, cmodePUSH DPLPUSH DPHJNB bAlaIng, confskip;SETB bKick ;stop alarm;CLR bAlaIngSJMP confleave confskip:MOV DPTR, #confsetRL AJMP A + DPTR set1:MOV A, hINC A ;hDA AMOV h, ACJNE A, #24H, notsetMOV h, #00HSJMP notset set2:MOV A, m INC A ;mDA AMOV m, ACJNE A, #60H, notsetMOV m, #00HSJMP notset set3:8MOV A, s INC A ;sDA AMOV s, A CJNE A, #60H, notsetMOV s, #00HSJMP notset setae:CPL bAlaOn ;ala enableSJMP notseta setah:MOV A, ah ;ala hINC ADA AMOV ah, ACJNE A, #24H, notsetaMOV ah, #00HSJMP notseta setam:MOV A, am ;ala mINC ADA AMOV am, ACJNE A, #60H, notsetaMOV am, #00H notseta:ACALL prealaCLR bKickSJMP confleave notset:ACALL prepare confleave:POP DPHPOP DPLPOP PSWPOP ACCRET confset:SJMP confleaveSJMP set1SJMP set2SJMP set3SJMP setaeSJMP setahSJMP setam ; end confORG 0500Hkeyscan:JNB keym, keymodeJNB keyc, keyconfRET;= ; ;log function 'mode'9; ;= keymode:MOV funclog, #01H ;key actACALL funcperformRET;= ; ;log function 'config' ; ;= keyconf:MOV funclog, #02HACALL funcperformRETORG 0600Hact: ;main timer actorCJNE R2, #0BH, conCLR bPalse ;palse per second con: DJNZ R2, leaveMOV R2, #14HPUSH ACCPUSH PSWMOV PSW, #00HMOV A, s ;sINC ADA AMOV s, ACJNE A, #60H, incnMOV s, #00HMOV A, m ;mINC ADA AMOV m, ACJNE A, #60H, incnMOV m, #00HMOV A, h ;hINC ADA AMOV h, ACJNE A, #24H, incnMOV h, #00H incn:SETB bPalseJNB bAlaOn, alarmoffACALL checkala ;check alarm when alarm is ON alarmoff:MOV A, npage10ANL A, #02HJNZ skipACALL prepare skip: POP PSWPOP ACC leave:MOV TH0,#03CH MOV TL0,#0B0HRETI ;end actcheckala:MOV A, mCJNE A, am, alashutMOV A, hCJNE A, ah, alashutJB bKick, notala ;ala stopSETB bAlaIngSJMP notala alashut:CLR bAlaIngCLR bKick notala:RETmaskdat:DB 00000000B, 00001100B, 00110000B, 11000000B, 00000111B, 00110000B, 11000000B metrix:;DB 0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07, 0x7F, 0x6FDB 0x28, 0x7E, 0xA2, 0x62, 0x74, 0x61, 0x21, 0x7A, 0x20, 0x60DB 0xFF ;0X0A: NONEDB 0X27 ;0X0B: 'O'DB 0XB1 ;0X0C: 'F'DB 0X37 ;0x0D: 'n'END

    注意事项

    本文(51单片机数码管时钟电路的设计.doc)为本站会员(恋****泡)主动上传,得力文库 - 分享文档赚钱的网站仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知得力文库 - 分享文档赚钱的网站(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于得利文库 - 版权申诉 - 用户使用规则 - 积分规则 - 联系我们

    本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知得利文库网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

    工信部备案号:黑ICP备15003705号-8 |  经营许可证:黑B2-20190332号 |   黑公网安备:91230400333293403D

    © 2020-2023 www.deliwenku.com 得利文库. All Rights Reserved 黑龙江转换宝科技有限公司 

    黑龙江省互联网违法和不良信息举报
    举报电话:0468-3380021 邮箱:hgswwxb@163.com  

    收起
    展开