在之前的文章中我们学习了多位数码管时钟,既然有了时间,那我们为何不将他变为一个可以定时的闹钟呢,这样不就更加的方便我们了吗。这一章我们将开始对数码管定时闹钟的学习。
(相关资料图)
一、功能概述
既然我们已经可以实现多位数码管显示时间,那么我们在这个时间的基础上加上一个蜂鸣器,用按键的方式来调整我们所需要定时的时间,当时间到时进入外部中断来控制蜂鸣器,而按键同样也是外部中断的方法。外部中断的触发方法有电平触发和边沿触发两种方式,这两种方式都可以我们人为的去设定它。
二、显示原理
使用AT89C51单片机来对数码管进行时间的显示,外加蜂鸣器起到闹钟的作用。这一章节我们先了解按键外部中断的原理以及如何对按键控制时间的增减。
外部中断分为两个部分,中断初始化部分和外部中断服务函数。初始化部分是对中断进行设定,确定所选用的中断是哪一个,以及触发中断的条件,还有中断的优先级顺序。
//中断初始化void Interrupt_eint(){EX0 = 1; //开启外部中断0IT0 = 1; //设置外部中断0触发模式:下降沿触发EX1 = 1; //开启外部中断1IT1 = 1; //设置外部中断1触发模式EA = 1; //开启总中断PX0 = 1; //将外部中断的优先级提高}//外部0中断服务函数void int0() interrupt 0{uchar j = 0;for(j = 0;j<=3;++j) {DisplayNum(j);delay_ms(1000); }}
我们以代码的方式进行中断的解读,之后的学习我们也可以利用这两段代码来进行运用外部中断。
三、电路连接
这里我们选用P3.0、P3.1、P3.2作为我们三个按键控制的引脚
定义代码如下:
voidkey(){while(key2==0){input();break;}if(key1==0){delayms(200);if(key1==0)//{while(!key1){TR0=0;display(time[0]/10,time[0]%10,time[1]/10,time[1]%10,time[2]/10,time[2]%10);}TR0=1;}{TR0=!TR0;while(!key1)display(time[0]/10,time[0]%10,time[1]/10,time[1]%10,time[2]/10,time[2]%10);}//else if(TR0==0)TR0=1;}else if(key1==1){mode++;if(mode==2)mode=0;}}if(key3==0){delayms(200);if(key3==0){if(mode==0{time[0]=0;time[1]=0;time[2]=0;num=0;while(!key3)display(time[0]/10,time[0]%10,time[1]/10,time[1]%10,time[2]/10,time[2]%10);}else if(mode==1){time_clk[0]=0;time_clk[1]=0;time_clk[2]=0;while(!key3)display(time_clk[0]/10,time_clk[0]%10,time_clk[1]/10,time_clk[1]%10,time_clk[2]/10,time_clk[2]%10);}}else if(key3==1){buffer=1;/*P1=1;*/} } }
当我们在使用按键的时候还需要对按键进行扫描,按键扫描的目的是为了让设备知道我们的按键是按下了还是松开,避免产生错误。
按键扫描代码:
uchar keyscan()//矩阵键盘扫描函数{keyvalue=99;P3=0xfe;temp=P3; temp=temp&0xf0;//判断是否还等于0xf0while(temp!=0xf0){delayms(5);temp=P3;temp=temp&0xf0;while(temp!=0xf0){temp=P3;switch(temp){case 0xee:{keyvalue=0;keydown=1;break;}case 0xde:{keyvalue=1;keydown=1;break;}case 0xbe:{keyvalue=2;keydown=1;break;}case 0x7e:{keyvalue=3;keydown=1;break;}}while(temp!=0xf0){temp=P3;temp=temp&0xf0;}}}P3=0xfd;temp=P3; temp=temp&0xf0;//判断是否还等于0xf0while(temp!=0xf0){delayms(5);temp=P3;temp=temp&0xf0;while(temp!=0xf0){temp=P3;switch(temp){case 0xed:{keyvalue=4;keydown=1;break;}case 0xdd:{keyvalue=5;keydown=1;break;}case 0xbd:{keyvalue=6;keydown=1;break;}case 0x7d:{keyvalue=7;keydown=1;break;}}while(temp!=0xf0){temp=P3;temp=temp&0xf0;}}}P3=0xfb;temp=P3; temp=temp&0xf0;//判断是否还等于0xf0while(temp!=0xf0){delayms(5);temp=P3;temp=temp&0xf0;while(temp!=0xf0){temp=P3;switch(temp){case 0xeb:{keyvalue=8;keydown=1;break;}case 0xdb:{keyvalue=9;keydown=1;break;}case 0xbb:{keyvalue=10;keydown=1;break;}case 0x7b:{keyvalue=11;keydown=1;break;}}while(temp!=0xf0){temp=P3;temp=temp&0xf0;}}}P3=0xf7;temp=P3; temp=temp&0xf0;//判断是否还等于0xf0while(temp!=0xf0){delayms(5);temp=P3;temp=temp&0xf0;while(temp!=0xf0){temp=P3;switch(temp){case 0xe7:{keyvalue=12;keydown=1;break;}case 0xd7:{keyvalue=13;keydown=1;break;}case 0xb7:{keyvalue=14;keydown=1;break;}case 0x77:{keyvalue=15;keydown=1;break;}}while(temp!=0xf0){temp=P3;temp=temp&0xf0;}}}return keyvalue;}
同时中断中也需要对我们每一下按键的按下进行一定的描述,当按键被触发情况发生的时候,程序应该干嘛。
代码如下:
void T0_time() interrupt 1//中断函数{TH0=(65536-45872)/256;TL0=(65536-45872)%256;num++;if(num==20)//循环20次为一秒{num=0;time[2]++;//秒加一if(time[2]==60)//秒到60进位{time[2]=0;//秒清零分钟加一time[1]++;if(time[1]==60)//分钟到60进位{time[1]=0;//分钟清零小时加一time[0]++; soundTime();//整点报时if(time[0]==24)//小时满24清零time[0]=0;}}if((time[0]==time_clk[0])&&(time[1]==time_clk[1])&&(time[2]==time_clk[2])){buffer=0;/*P1=0;*/}}}
蜂鸣器也是在中断中实现的,当到达我们所设定的时间后,对它的电平进行改变就可以实现发声了。
代码如下:
voidsoundTime(){buffer=0;delayms(10);buffer=1;}
四、总结
本章我们先对按键以及外部中断进行学习,外部中断的两种触发方式,以及对中断服务程序的学习,这样对于将来设计我们的数码管闹钟的时候能提供更加广阔的思路,不在局限于用一个循环或者一个主函数去完成一个设计,毕竟一个设计都是分为一步一步去完成的,每个模块相互结合也能让我们的设计更加的富有逻辑。
关键词:
(责任编辑:黄俊飞)推荐内容
- 环球今日报丨单片机入门之数码管定时闹钟
- 世界观焦点:“考场外与母亲相拥”感动全
- 6月27日济南金昊新戊二醇价格暂稳_当前动态
- 【环球报资讯】政务服务大厅里新添自助拍
- 观焦点:曝 Nothing 智能手表即将问世
- 世界上有哪些数学家名人 世界上有哪些数
- 小熊电器:股东拟减持公司不超0.64%股份
- 热资讯!开机默认启动云系统!微软将把完
- 贵州省望谟县发布高温橙色预警 全球消息
- 解禁狂欢之后,皮卡市场并未暴涨,提升用
- 鸡毛飞上天电视剧全集观看免费下载(鸡毛
- 银行板块跌1.24% 瑞丰银行涨0.42%居首
- 全国首艘海陆一体化智能FPSO在南通交付|
- 周度经济观察:国内宽松政策延续,海外紧
- rise的过去式和过去分词两种形式_rise的
- Porsche庆祝第1000辆本地组装Cayenne 全球讯息
- 顺鑫农业拟剥离房地产业务,挂牌转让顺鑫
- 人民币汇率查询(2023年6月26日)_当前资讯
- 苏州“十四五”交通规划:民用运输机场规
- 曝中国或举办女排世锦赛!外媒言之凿凿
- 世界热推荐:有性价比吗?快看红旗E-QM5
- 每日动态!小米手机如何关闭下面虚拟键
- 广东省会计信息采集入口
- 世界消息!西红柿与番茄的区别是什么
- 【天天报资讯】《仙剑客栈2》确定7.27登
- 天天讯息:中式台球国际职业联赛国际精英
- 风信子的花语是什么? 风信子花语,不同
- 鱼跃医疗拟参投设立投资基金,计划以自有
- 世界百事通!爱国主义教育法草案今日首次
- 每日视点!凉粉的制作方法一碗粉几碗水_
- 环球热消息:厦大全体毕业生三次鞠躬致谢
- 《高能英雄》品鉴服开启,全新实机PV诠释
- 银河证券:聚焦消费复苏过程中的稳定选手
- 速递!A股异动|美锦能源涨停 子公司签
- 深圳高级中学(集团)面向社会公开招聘教
- 当前观点:与研究生合照意外被亲,钟南山
- 聚焦:学什么、怎么学、咋发展——今年新
- 《暗黑破坏神4》饥饿难涂任务怎么做?饥
- 【环球快播报】成都中考6月28日公布成绩
- 【环球新视野】“从农场到餐桌”:Chital
- 环球头条:2023年1-5月中国铜材累计产量8
- 理论+实操,泰安这堂安全生产培训课干货
- 红桥区发挥优势做优做强数字产业 打造数
- 天天最资讯丨易维哲:黄金暂时震荡,原油
- 锎元素多少钱一克_锎_动态焦点
- 江西赣州首趟始发至北京“绿巨人”动车7
- 【新要闻】虎林天气预报15天内查询(虎林
- 当前热议!宽体优雅车身,无框电吸车门,
- 环球时讯:今年全国快递业务量已达600亿件
- 热文:2023版熊猫纪念币100克精制金币现
- 祝贺总经理女儿“夺状元”的公司,股价是
- 世界热点评!北京高招志愿填报系统今日开
- 2023哈尔滨考生优惠景点汇总(优惠政策+
- 【天天时快讯】大行评级 | 美银证券上
- 扬州海事局船舶登记优质服务获赠锦旗
- 同有科技:6月26日融资买入5227.18万元,
- 每日视点!甘肃高考艺术类校考成绩怎么查
- 新邵县财政局:“清廉之声”常伴耳_环球
- 1499元超值选择!华为MatePad SE 10.4
- 今日精选:德商产投服务租下合信集团成都
- 世界热推荐:有性价比吗?快看红旗E-QM5
- 每日动态!小米手机如何关闭下面虚拟键
- 广东省会计信息采集入口
- 世界消息!西红柿与番茄的区别是什么
- 【天天报资讯】《仙剑客栈2》确定7.27登
- 天天讯息:中式台球国际职业联赛国际精英
- 风信子的花语是什么? 风信子花语,不同
- 鱼跃医疗拟参投设立投资基金,计划以自有
- 世界百事通!爱国主义教育法草案今日首次
- 每日视点!凉粉的制作方法一碗粉几碗水_
- 环球热消息:厦大全体毕业生三次鞠躬致谢
- 《高能英雄》品鉴服开启,全新实机PV诠释
- 银河证券:聚焦消费复苏过程中的稳定选手
- 速递!A股异动|美锦能源涨停 子公司签
- 深圳高级中学(集团)面向社会公开招聘教
- 当前观点:与研究生合照意外被亲,钟南山
- 聚焦:学什么、怎么学、咋发展——今年新
- 《暗黑破坏神4》饥饿难涂任务怎么做?饥
- 【环球快播报】成都中考6月28日公布成绩
- 【环球新视野】“从农场到餐桌”:Chital
- 环球头条:2023年1-5月中国铜材累计产量8
- 理论+实操,泰安这堂安全生产培训课干货
- 红桥区发挥优势做优做强数字产业 打造数
- 天天最资讯丨易维哲:黄金暂时震荡,原油
- 锎元素多少钱一克_锎_动态焦点
- 江西赣州首趟始发至北京“绿巨人”动车7
- 【新要闻】虎林天气预报15天内查询(虎林
- 当前热议!宽体优雅车身,无框电吸车门,
- 环球时讯:今年全国快递业务量已达600亿件
- 热文:2023版熊猫纪念币100克精制金币现
- 祝贺总经理女儿“夺状元”的公司,股价是
- 世界热点评!北京高招志愿填报系统今日开
- 2023哈尔滨考生优惠景点汇总(优惠政策+
- 【天天时快讯】大行评级 | 美银证券上
- 扬州海事局船舶登记优质服务获赠锦旗
- 同有科技:6月26日融资买入5227.18万元,
- 每日视点!甘肃高考艺术类校考成绩怎么查
- 新邵县财政局:“清廉之声”常伴耳_环球
- 1499元超值选择!华为MatePad SE 10.4
- 今日精选:德商产投服务租下合信集团成都
- 6月27日壳资源板块涨幅达2%
- 俄总统普京发表电视讲话 感谢全国民众和
- 视点!南京理工大学:培养敢闯会创的学生
- 《狂飙》之后为何是《熟年》?-全球播报
- 文艺复兴至当代50幅艺术大师自画像来到国
- 大江东去全集免费播放(大江东去 全)
- 稀有的Apple-1售价比8台Mac Pro计算机还要贵
- nba官方2k网站 NBA2K印象十年王朝与我们
- 白敬亭晒法国游玩 plog 白 T 少年氛围感满满
- 大庆市全面推进基本医疗保险全民参保计划
- 花几千元就能“拿证” 高考志愿填报市场
- 一文讲透设计模式(C++版)
- 河北高考志愿填报辅助系统和志愿填报系统
- 海报|周鸿祎:大模型将成为产业数字化重
- PET铜箔产业迎质的突破 板块逆势上涨1.31%
- 当前视点!雅创电子:拟购买WE剩余86%股权
- 冯仑向左,王石向右
- 全面排查整治城镇燃气8类安全隐患
- LGD 1-2不敌GG,止步前三;GG包揽四大冠
- “走进泰拳”推广活动亮相昆明 展现泰国