基于定时器的四位数码管时钟程序代码.doc
《基于定时器的四位数码管时钟程序代码.doc》由会员分享,可在线阅读,更多相关《基于定时器的四位数码管时钟程序代码.doc(9页珍藏版)》请在咨信网上搜索。
实验名称:SUMA & BUZZER 实验描述:一个带有闹钟的数码时钟,加三个键,一个调小时键 一个调分钟键,一个设置闹钟时间键 实验方法:TIMER0中断用来计时,控制数码时钟的时间显示 还可设置半秒或四分之一秒,用来控制音调 TIMER1用来控制音普,, timer0用MODE2自动加载模式 */ # include<reg52.h> sbit speaker=P2^3 ; sbit AA=P2^2 ; //调时用 sbit BB=P2^1 ; //调分用 sbit CC=P2^0 ; // 设置闹钟用 sbit P1_7=P1^7; //小数点 // int code seven_reg[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90}; //0123456789 int code seven_reg[]={0x40,0x79,0x24,0x30,0x19,0x12,0x2,0x78,0x00,0x10}; // int code scan[]={0x1F,0x2F,0x4F,0x8F}; //1110,1101,1011,0111 int code scan[]={0x1,0x2,0x4,0x8}; //0001,0010,0100,1000 unsigned int timer0_times; unsigned int timer1_times; unsigned int timer0_times_AA; //按纽AA用 unsigned int timer0_times_BB; //按纽BB用 unsigned int timer0_times_CC; // 半秒计时用 unsigned int timer0_times_DD; //四分之一秒用 unsigned int timer0_times_EE; // 闹钟用 typedef struct{ unsigned char second; unsigned char minute; unsigned char hour; unsigned char half_second; unsigned char alarm_hour; unsigned char alarm_minute; unsigned char quarter_second ;} time; //此处是固定格式,不能改 time now; char mode=0; int i=0,j=0,k=0; int code tone[]={1012,956,852,759,716,638,568,506,478,426,379}; //7()低音)1234567(中音)123(高音) int code song[22][2]={ {6,2},{6,2},{7,4},{6,2},{6,2}, {7,4},{6,2},{7,2}, {8,2},{7,2},{6,2},{7,1},{6,1},{4,4},{3,2},{1,2}, {3,2},{4,2},{3,2},{3,1},{1,1},{0,4} } ; /********************************************************************/ void timer1_isr() interrupt TF1_VECTOR using 2 { TR1=0; TL1=(65536-tone[(song[j][0])])%256; TH1=(65536-tone[(song[j][0])])/256; TR1=1; speaker=~speaker; } /*******************************************************************/ void timer0_isr() interrupt TF0_VECTOR using 1 { /***************************************************/ if(CC!=0) timer0_times_EE=0; else { timer0_times_EE++; if(CC==0&&timer0_times_EE==4000) //按1S进入设置闹钟模式 {mode++; //500 ~0.125s if(mode==2) mode=0; } } /**=调时键设置=*/ if(AA!=0) timer0_times_AA=0; else { timer0_times_AA++; if(AA==0&&timer0_times_AA==500&&mode==0) //500*0.25ms=0.125s { now.hour++; // timer0_times_AA=0; if (now.hour==24) now.hour=0;//后边代码不会达到此效果 } if(AA==0&timer0_times_AA==500&&mode==1) //设置闹钟时间HOUR { now.alarm_hour++; if(now.alarm_hour==24) now.alarm_hour=0; } } /***=调分键设置=***/ if (BB!=0) timer0_times_BB=0; else { timer0_times_BB++; if(BB==0&&timer0_times_BB==500&&mode==0) //0.125s { //timer0_times_BB=0; now.minute++; if(now.minute==60) now.minute=0; } if(BB==0&&mode==0) { if(timer0_times_BB==2000) //0.5s { now.minute++; timer0_times_BB=1000; if(now.minute==60) now.minute=0; } } if(BB==0&&timer0_times_BB==500&&mode==1) //设置闹钟时间MINUTE { now.alarm_minute++; if(now.alarm_minute==60) now.alarm_minute=0; } if(BB==0&&mode==1) { if(timer0_times_BB==2000) //0.5s { now.alarm_minute++; timer0_times_BB=1000; if(now.minute==60) now.minute=0; } } } /*=自然时间设置=*/ timer0_times_DD++; //四分之一秒 if(timer0_times_DD==1000) { now.quarter_second++; timer0_times_DD=0; if(now.quarter_second==60) now.quarter_second=0; } //二分之一秒 timer0_times_CC++; if(timer0_times_CC==2000) {now.half_second++; timer0_times_CC=0; if(now.half_second==60) now.half_second=0; } timer0_times++; //一秒一分一时 if (timer0_times==4000) { now.second++; timer0_times=0; if(now.second==60) { now.minute++; now.second=0; if(now.minute==60) { now.hour++; now.minute=0; if(now.hour==24) now.hour=0; } } } /******************扫描显示******************************/ switch(mode) { case 0 :{ switch(i){ /*0.005秒选一次*/ case 0: P1=seven_reg[now.minute%10] ; if(now.half_second%2==0) P1_7=1; /*实现让它0.5秒闪一次*/ break; case 1: P1=seven_reg[now.minute/10];//小数点不亮同,P1_7=1 if(now.half_second%2==0) P1_7=1; /*为什么不能放在上一句前面昵????*/ break; case 2: P1=seven_reg[now.hour %10]; break; case 3: P1=seven_reg[now.hour /10]; break; }} break; case 1:{ switch(i){ case 0: P1=seven_reg[now.alarm_minute%10] ; break; case 1: P1=seven_reg[now.alarm_minute/10]; break; case 2: P1=seven_reg[now.alarm_hour %10]; break; case 3: P1=seven_reg[now.alarm_hour /10]; break; } } break; } P3=scan[i]; i++; if (i==4) i=0; if(now.quarter_second%2==0) { k++; if(k==(song[j][1]*4)) { j++; k=0; if(j==22) j=0; } } } /****************************************************************/ void timer0_initialize() { EA=0; TR0=0; TMOD=0X12; TL0=(256-250); //0.025ms 自动加载模式 0.025*4000=1s TH0=(256-250); ET0=1; TR0=1; EA=1; } void timer1_initialize() { TR1=0; TL1=(65536-tone[song[j][0]])%256; TH1=(65536-tone[song[j][0]])/256; TMOD=0X12; ET1=1; } main() { unsigned char m1=0; speaker=0; now.alarm_minute=1; timer0_initialize(); timer1_initialize(); while(1) {if(now.alarm_minute!=0)//将闹钟设置为0时,相当于取消闹钟,不会响 { if(now.hour==now.alarm_hour&&now.minute==now.alarm_minute) { if(CC==0&&timer0_times_EE==500) m1=1; switch (m1) { case 0: TR1=1 ; break; case 1 : TR1=0; speaker=0; break; }} else { TR1=0; speaker=0; m1=0; } } } } #include<reg52.h> sbit P10=P1^0; //第0位数码管 sbit P11=P1^1; sbit P12=P1^2; sbit P13=P1^3; #define THCO 0xee #define THLO 0x00 unsigned char miao=0,fen=0,shi=0; unsigned char code duan[]={0x3F, 0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F}; main(void) { TMOD=0x11; TH0=THCO; TL0=THLO; EA=1; ET0=1; TR0=1; while(1); } void timw0() interrupt 1 { static unsigned char c=0,k=0; TH0=THCO; TL0=THLO; P1|=0xff; c++; if(c>200) { miao++; if(miao>=60){miao=0;fen++;} if(fen>=60){shi++;fen=0;} c=0; } if(k>3){k=0;} k++; switch(k-1) { case(0):P10=0;P0=duan[shi/10];break; case(1):P11=0;P0=duan[shi%10];break; case(2):P12=0;P0=duan[fen/10];break; case(3):P13=0;P0=duan[fen%10];break; } } 这是时钟程序,可以运行,无小数点,显示时分, 小数点断码是0x80,其余的只有靠你自己了。 有问题的话,qq :1499648096- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 定时器 数码管 时钟 程序代码
咨信网温馨提示:
1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前自行私信或留言给上传者【xrp****65】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时私信或留言给本站上传会员【xrp****65】,需本站解决可联系【 微信客服】、【 QQ客服】,若有其他问题请点击或扫码反馈【 服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【 版权申诉】”(推荐),意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:4008-655-100;投诉/维权电话:4009-655-100。
1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前自行私信或留言给上传者【xrp****65】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时私信或留言给本站上传会员【xrp****65】,需本站解决可联系【 微信客服】、【 QQ客服】,若有其他问题请点击或扫码反馈【 服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【 版权申诉】”(推荐),意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:4008-655-100;投诉/维权电话:4009-655-100。
关于本文