绝对真实电子时钟的程序.doc_第1页
绝对真实电子时钟的程序.doc_第2页
绝对真实电子时钟的程序.doc_第3页
绝对真实电子时钟的程序.doc_第4页
全文预览已结束

下载本文档

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

文档简介

程序12-8:电子时钟的程序(对应图12-33)S_SETBITP1.0; SECOND按钮位M_SETBITP1.1; MINUTE按钮位H_SETBITP1.2; HOUR按钮位SECONDEQU30H; 秒计数值变量MINUTEEQU31H; 分计数值变量HOUREQU32H; 小时计数值变量TCNTEQU34H; 1秒定时计数器ORG00H; 起始地址JMPSTARTORG0BH; Timer 0中断向量地址JMPINT_T0START:MOVDPTR,#TABLE; 装七段数码管段码数据表TABLEMOVHOUR,#0; 计数值全部清0MOVMINUTE,#0MOVSECOND,#0MOVTCNT,#0MOVTMOD,#01H; Timer 0作定时器,模式1MOVTH0,#(65536-50000)/256;定时50毫秒MOVTL0,#(65536-50000)MOD 256MOVIE,#82H; 中断使能SETBTR0; 启动Timer 0; 以下是判断SECOND、MINUTE、HOUR按钮是否被按下A1:CALLDISPLAYJNBS_SET,S1; 判断SECOND按钮JNBM_SET,S2; 判断MINUTE按钮JNBH_SET,S3; 判断HOUR按钮JMPA1; 循环检测S1:CALLDELAY; 去抖动JBS_SET,A1INCSECOND; 秒位计数值加1MOVA,SECOND; A=SECONDCJNEA,#60,J0; 判断是否到60秒MOVSECOND,#0; 如果到了就清0秒位计数值JMPK1; 跳到K1段S2:CALLDELAYJBM_SET,A1K1:INCMINUTE; 分位计数值加1MOVA,MINUTE; A=MINUTECJNEA,#60,J1; 判断是否到60分MOVMINUTE,#0; 如果到了就清0分位计数值JMPK2S3:CALLDELAYJBH_SET,A1K2:INCHOUR; 小时计数值加1MOVA,HOUR; A=HOURCJNEA,#24,J2; 判断是否到24小时MOVHOUR,#0; 如果到了就清0秒、分、小时位计数值MOVMINUTE,#0MOVSECOND,#0JMPA1; 以下程序等待SECOND、MINUTE、HOUR按钮放开J0:JBS_SET,A1CALLDISPLAYJMPJ0J1:JBM_SET,A1CALLDISPLAYJMPJ1J2:JBH_SET,A1CALLDISPLAYJMPJ2; Timer 0中断服务子程序, 进行秒、分、小时的计时INT_T0:MOVTH0,#(65536-50000)/256; 装计数初始值MOVTL0,#(65536-50000)MOD 256INCTCNT; 1秒计数器增加1MOVA,TCNT; A=TCNTCJNEA,#20,RETUNE; 计时1秒INCSECOND; 秒计数器增加1MOVTCNT,#0; 清零TCNTMOVA,SECOND; A=SECONDCJNEA,#60,RETUNE; 计时60秒INCMINUTE; 分计数器增加1MOVSECOND,#0; 清零SECONDMOVA,MINUTE; A=MINUTECJNEA,#60,RETUNE; 计时60分INCHOUR; 小时计数器增加1MOVMINUTE,#0; 清零MINUTEMOVA,HOUR; A=HOURCJNEA,#24,RETUNE; 计时24小时MOVHOUR,#0; 秒、分、小时计数值清0MOVMINUTE,#0MOVSECOND,#0MOVTCNT,#0RETUNE:RETI; 中断服务子程序结束; 以下为七段数码管显示的子程序DISPLAY:MOVA,SECOND; A=SECOND,显示秒MOVB,#10; B=10DIVAB; A除以BCLRP3.6; 清零P3.6MOVCA,A+DPTR; 七段数码管段码数据装入AMOVP0,A; 从P0口输出CALLDELAYSETBP3.6; P3.6置1MOVA,B; A=BCLRP3.7; P3.7清0MOVCA,A+DPTR; 七段数码管段码数据装入AMOVP0,A; 从P0口输出CALLDELAYSETBP3.7; P3.7置1CLRP3.5; P3.5清0MOVP0,#40H; 显示短线分隔符CALLDELAYSETBP3.5; P3.5置1MOVA,MINUTE; A=MINUTE,显示分MOVB,#10; B=10DIVAB; A除以BCLRP3.3; P3.3清0MOVCA,A+DPTR; 七段数码管段码数据装入AMOVP0,A; 从P0口输出CALLDELAYSETBP3.3; P3.3置1MOVA,B; A=BCLRP3.4; P3.4清0MOVCA,A+DPTR; 七段数码管段码数据装入AMOVP0,A; 从P0口输出CALLDELAYSETBP3.4; P3.4置1CLRP3.2; P3.2清0MOVP0,#40H; 显示短线分隔符CALLDELAYSETBP3.2; P3.2置1MOVA,HOUR; A=HOUR,显示小时MOVB,#10; B=10DIVAB; A除以BCLRP3.0; P3.0清0MOVCA,A+DPTR; 七段数码管段码数据装入AMOVP0,A; 从P0口输出CALLDELAYSETBP3.0; P3.0置1MOVA,B; A=BCLRP3.1; P3.1清0MOVCA,A+DPTR; 七段数码管段码数据装入AMOVP0,A; 从P0口输出CALLDELAYSETBP3.1; P3.1置1

温馨提示

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

评论

0/150

提交评论