我是使用独立键盘控制,7位数码管显示来完成的数字时钟的显示部分,用蜂鸣器部分来完成声音的控制。
首先我是使用中断来完成该项目的时间调控和时间进位,并且在中断之中加入了声音调控的功能,与此同时,程序还一直保持着对于主屏幕界面的刷新,以此来确保数码管上时间的正确显示,在中断之中加入了对于时间的判断,如果时间到达了7点和17点的时候,蜂鸣器会响起并且持续5秒钟,我还设计了为了能够看的更加清除的标志位,用来查清现在在哪个数码管上,并且能够做出相应的修改动作。
在本次项目中使用了51单片机的独立按键,7位数码管以及蜂鸣器,使用了P0端口,P1端口,P2端口以及P3^0端口。

在这里插入代码片
/**********************************************************************************************
name: 钱家宝
class: 苏嵌170
project: 闹钟
description: 利用定时器0实现时钟功能,用数码管显示时、分、秒,可定位修改,用蜂鸣器控制声音
************************************************************************************************/
#include <reg51.h>
unsigned char code Seg_Code[] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40};
unsigned char code Bit_Code[] = {0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
sbit Seg = P2^1;//段码锁存
sbit Bit = P2^2;//位码锁存
sbit K8 = P1^0;//继续
sbit K7 = P1^1;
sbit K6 = P1^2;
sbit K5 = P1^3;//暂停
sbit K4 = P1^4;//定位
sbit K3 = P1^5;//定位
sbit K2 = P1^6;//减
sbit K1 = P1^7;//增
sbit Voice = P3^0;//声音口
unsigned char b[8]={0};
unsigned char sec,loc;
void DelayUs2x(unsigned char n);
void DelayMs(unsigned char n);
void check (unsigned char b[]); //核查时、分、秒
void display(); //显示
void main()
{
EA = 1; //打开总中断
ET0 = 1; //打开定时器中断开关
TMOD = 0x02; //模式2,八位计数器(自动重装)
TR0 = 1; //打开定时器开关
while(1)
{
b[5] = 10;
b[2] = 10;
b[7] = sec % 11;
check(b); //进位检查

 }
}
void display()
{unsigned char i;for(i = 0;i <8;i++ ){P0 = 0;Seg = 1;Seg = 0;P0 = Bit_Code[i];Bit = 1;Bit = 0;if(i == loc){P0 = Seg_Code[b[i]] | 0x80;}else P0 = Seg_Code[b[i]];Seg = 1;Seg = 0;}
}
void check(unsigned char b[])
{unsigned char i;if(b[7] == 10){sec = 0;b[7] =0;b[6] ++;}if(b[6] == 6){b[6] = 0;b[4] ++;}if(b[4] == 10){b[4] = 0;b[3] ++;}if(b[3] == 6){b[3] = 0;b[1]++;}if((b[0] *10 + b[1])<24){if(b[1] == 10){b[1] = 0;b[0] ++;}}else{for(i = 0;i < 8;i++){b[i] = 0;}}
}void T0_ISR(void) interrupt 1
{unsigned char i;unsigned char flag0,flag1,flagb,flags;unsigned char q;unsigned int k ; //模式2,八位计数器,计算的值是3906.25EA = 0;k++;display();if(b[1] == 7)//声音控制,在7点和17点各响一次,每次持续5秒钟{q = 1;}if(b[7] == 5){q = 0;}if(q){Voice=~Voice;}if(k == 3400){sec ++;k = 0;i++;}if(!K5)                                  //暂停{while(1){flag0 = 0;flag1 = 0;flagb = 0;flags = 0;if(!K8)                          //退出暂停break;display();if(!K3)                          //定位,数码管的小数点作为标志{DelayMs(10);while(1){if(K3)break;flag0 = 1;display();}}if(!K4)                          //定位{DelayMs(10);while(1){if(K4)break;flag1 = 1;display();}}if(!K1)                            //增{DelayMs(10);while(1){if(K1)break;flagb = 1;display();}}if(!K2)                            //减{DelayMs(10);while(1){if(K2)break;flags = 1;display();}}if(flag0){if(loc >= 0 && loc < 7){loc++;}flag0 = 0;}if(flag1){if(loc > 0 && loc <8){loc--;}flag1 = 0;}if(flagb){if(loc != 2 && loc != 5){if(b[loc] >=0 && b[loc] <9){b[loc]++;}}flagb = 0;}if(flags){if(loc != 2 && loc !=5){if(b[loc] >0 && b[loc] <10){b[loc] --;}}flags = 0;}if(loc < 0)                        //预防出错loc = 0;if(loc > 7)loc = 7;if(b[loc]<0)b[loc] = 0;if(b[6] >= 6)b[6] = 5;if(b[3] >= 6)b[3] = 5;if((b[0]*10 +b[1]) >23){b[0] = 2;b[1] = 3;}}}EA = 1;
}
void DelayUs2x(unsigned char n)// t = 2*n+5 us
{while(--n);
}void DelayMs(unsigned char n)// t = n ms
{while(n--){DelayUs2x(245);DelayUs2x(245);}
}

基于51单片机的数码时钟相关推荐

  1. 基于微型计算机系统的实时时钟设计,基于51单片机的实时时钟设计报告.doc

    基于51单片机的实时时钟设计报告 PAGE PAGE 24 课程设计(论文)任务书 信息工程 学 院 信息工程 专 业 (2) 班 一.课程设计(论文)题目 嵌入式课程设计 二.课程设计(论文)工作自 ...

  2. 基于51单片机的电子时钟设计

    基于51单片机的电子时钟设计 0 功能介绍 1.从DS1302中读取时间显示 2.一共4个按键,按键1按下进入修改时间模式,再按下切换修改的时间变量,这个时候第2和3个按键就是修改时间变量的按键,修改 ...

  3. 基于51单片机的自动浇花系统设计/基于51单片机的智能抽奖系统控制设计/基于51单片机的数字时钟与日历显示控制设计 毕业设计

    1147基于51单片机的自动浇花系统设计 设计思路:通湿度传感器实时监测湿度,通过LCD显示出实时的湿度采集值,可以通过按键设定目标界限,当达到这个界限值时,浇花系统的电机装置运行. 电路包含:LCD ...

  4. 【036】基于51单片机的电子时钟与秒表Proteus仿真设计

    一.压缩包资料内容 (1).基于51单片机的电子时钟与秒表proteus仿真设计一份: (2).基于51单片机的电子时钟与秒表proteus仿真设计keli源代码一份: (3).基于51单片机的电子时 ...

  5. c51单片机时钟c语言程序设计,基于51单片机的电子时钟设计..doc

    -- I -- - - I -- 设计题目: 基于 51 单片机的电子时钟设计 摘要 单片机,是集 CPU ,RAM ,ROM ,定时器,计数器和多种接口于一体的微控制器.自 20 世纪 70 年代问 ...

  6. 基于51单片机LCD1602电子时钟实物制作

    之前写了51单片机的LCD1602的程序,现在画了电路图,焊接了电路板,做出了基于51单片机LCD1602电子时钟的实物. 注意事项: 焊接过程中,注意提前布局电路. 对应好端口(避免接线错误),我由 ...

  7. 基于51单片机的数字时钟(万年历)

    具体实现功能 系统由STC89C52单片机+DS1302时钟芯片+按键模块+LCD1602显示+电源构成. 具体功能: 1.可以显示年.月.日.时.分.秒.星期.农历: 2.按键可以设置闹钟及报警: ...

  8. 基于51单片机、DS1302时钟模块的电子闹钟设计

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 一.设计原理 1.DS1302介绍 2.闹钟音乐播放原理 二.程序设计 1.DS1302.h 2.ds1302.c 3.mu ...

  9. 51单片机8255扩展c语言,参阅:基于51单片机的实时时钟的设计与开发8255扩展io口1V0.1...

    <基于51单片机的实时时钟的设计与开发(8255扩展io口) (1).doc>由会员分享,可免费在线阅读全文,更多与<基于51单片机的实时时钟的设计与开发(8255扩展io口) (1 ...

最新文章

  1. 开篇辞 vuejs 快讯 - 109 期
  2. 成功当选2014年度MVP
  3. seo优化闲了吧----第一回目
  4. docker搭建webug4.0并——示范.支付漏洞,邮箱轰炸
  5. [学习笔记] 初次见面,请多关照 (公式推导+题集)——杜教筛
  6. ECC密钥结构和密码学基础
  7. JavaScript中的小陷阱(不定期更新。。)
  8. oracle 10g 下载方法
  9. SiamFC论文解读及代码实现
  10. IE11修复-Win7安装IE11无法打开怎么办
  11. 微信小程序轮播图点击跳转页面
  12. 读书笔记——魔鬼经济学3
  13. android音乐播放器源代码,android音乐播放器源代码.doc
  14. 超级计算机有什么特点,计算机的特点有哪些
  15. NYOJ_613_免费馅饼
  16. Go专家编程 timer、ticker
  17. 数字信号与模拟信号的区别
  18. Java DAO是啥?
  19. mysql获取中文拼音_mysql获取汉字拼音
  20. JRE和JDK的解释及区别

热门文章

  1. chatPDF | 别再自己读文献了!让chatGPT来帮你读吧!~
  2. 2023年网络爬虫实训(第五天)
  3. python xpath函数_Python之xpath
  4. 猴子吃桃问题-python版
  5. cetus权限连接主从mysql_cetus/cetus-rw.md at master · niumanniu/cetus · GitHub
  6. 使用nssm将exe 文件打包成服务安装到Windows电脑上
  7. 博科光纤交换机6510电源坏了怎么办
  8. java partial class_C# partial 说明
  9. 递归Partial类型
  10. QT5标准弹窗按钮翻译中文(按钮汉化)