系统功能:利用定时器实现时钟,时钟可以通过独立按键设置,设有一个闹钟,闹钟时间可通过按键进行设置,时钟界面和闹钟界面可通过按键切换,当时钟和闹钟时间相同,蜂鸣器响,提示闹钟时间到等。

此系统重点在于:数码管动态驱动的使用方法,单片机内部定时器的配置及使用方法、显示屏显示界面的切换设置方法、独立按键的驱动方法、蜂鸣器的驱动方法、以及各个模块整合为完整系统的方法等

系统所需硬件:51单片机最小系统(包括STC89C52芯片、晶振、电容、电阻、独立按键、上拉电阻等)、八位共阳极数码管、LED、三极管、蜂鸣器、独立按键等。

系统软件编写:采用C语言和keil4软件编译

系统电路搭建:采用Proteus8.10软件搭建

系统仿真过程:时钟界面

闹钟界面:

系统编写的程序:

#include <reg52.h>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
uchar dd[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xbf};
//数码管断码表
uchar shi=9,fen=59,miao=55; //时间初始值
uchar shi1=10,fen1=5,miao1=0;//闹钟初始值uchar yi,er,san,si,wu,liu,qi,ba;uchar count=0;//计数变量
sbit led=P1^0; //LED端口
sbit buzz=P1^1;//蜂鸣器
sbit k1=P1^2; //模式切换sbit k2=P1^3; //加
sbit k3=P1^4; //减sbit k4=P1^5; //时间 时分秒切换
sbit k5=P1^6; //闹钟 时分秒切换bit k1_flag=0;
uchar k4_flag=0,k5_flag=0;void delay1ms()     //@11.0592MHz
{unsigned char i, j;_nop_();_nop_();_nop_();i = 11;j = 190;do{while (--j);} while (--i);
}//数码管显示时间
void display(uchar yi,uchar er,uchar san,uchar si,uchar wu,uchar liu,uchar qi,uchar ba)
{P3=0x01;   //位选P2=dd[yi]; //段选delay1ms();P3=0x02;P2=dd[er];delay1ms();P3=0x04;     //位选P2=dd[san]; //段选delay1ms();P3=0x08;P2=dd[si];delay1ms();P3=0x10;    //位选P2=dd[wu]; //段选delay1ms();P3=0x20;P2=dd[liu];delay1ms();P3=0x40;    //位选P2=dd[qi]; //段选delay1ms();P3=0x80;P2=dd[ba];delay1ms();}void keys()
{if(k1==0){delay1ms();if(k1==0)   //{  k1_flag=~k1_flag;if(k1_flag==0){ET0=1;}}while(k1==0);}if(k2==0){delay1ms();if(k2==0)   //{if(k4_flag==1){shi++;if(shi==24){shi=0;}}if(k4_flag==2){fen++;if(fen==60){fen=0;}}if(k4_flag==3){miao++;if(miao==60){miao=0;}}if(k5_flag==1){shi1++;if(shi1==24){shi1=0;}}if(k5_flag==2){fen1++;if(fen1==60){fen1=0;}}if(k5_flag==3){miao1++;if(miao1==60){miao1=0;}}}while(k2==0);}if(k3==0){delay1ms();if(k3==0)  // {if(k4_flag==1){shi--;if(shi==-1){shi=23;}}if(k4_flag==2){fen--;if(fen==-1){fen=59;}}if(k4_flag==3){miao--;if(miao==-1){miao=59;}}if(k5_flag==1){shi1--;if(shi1==-1){shi1=23;}}if(k5_flag==2){fen1--;if(fen1==-1){fen1=59;}}if(k5_flag==3){miao1--;if(miao1==-1){miao1=59;}}}while(k3==0);}if(k4==0){delay1ms();if(k4==0)  // {ET0=0;if(k1_flag==0){k4_flag++;if(k4_flag==4){ET0=1;k4_flag=0;}}  }while(k4==0);}if(k5==0){delay1ms();if(k5==0)  // {ET0=0;if(k1_flag==1){k5_flag++;if(k5_flag==4){k5_flag=0;}  }}while(k5==0);}
}void Timer0Init(void)      //100微秒@11.0592MHz
{TMOD = 0x01;      //设置定时器模式TL0 =(65536-50000)%256;       //设置定时初值TH0 =(65536-50000)/256;        //设置定时初值TF0 = 1;       //清除TF0标志TR0 = 1;      //定时器0开始计时EA=1;ET0=1;
}void serviceTimer0Init() interrupt 1
{TL0 =(65536-50000)%256;       //设置定时初值TH0 =(65536-50000)/256;    count++;if(count==20)  //20*50000=1秒{count=0;miao++;}if(miao==60)   //{miao=0;fen++;}if(fen==60)   //{fen=0;shi++;}if(shi==24){shi=0;}if((shi==shi1)&&(fen==fen1)&&(miao==miao1)){led=~led;buzz=0;}else {buzz=1;led=0;}
}//主函数
void main()
{yi=1,er=2,san=3,si=4,wu=5,liu=6,qi=7,ba=8;Timer0Init();led=0;buzz=1;while(1){if(k1_flag==0){yi=shi/10,er=shi%10,san=10,si=fen/10,wu=fen%10,liu=10,qi=miao/10,ba=miao%10;}else if(k1_flag==1){yi=shi1/10,er=shi1%10,san=10,si=fen1/10,wu=fen1%10,liu=10,qi=miao1/10,ba=miao1%10;}keys();display(yi,er,san,si,wu,liu,qi,ba);}
}

下载链接:

(注意:若软件版本低于设计版本,则打不开图和程序)

链接:https://pan.baidu.com/s/1b8Pdt-RdxpJsRRiY-ARh7Q?pwd=na7e  提取码:na7e

基于51单片机的数码管闹钟设计相关推荐

  1. 基于51单片机的LCD1602电子钟闹钟proteus仿真设计

    本设计是基于51单片机的LCD1602电子钟闹钟proteus仿真设计 源码+仿真+原理图+器件清单 仿真软件版本:proteus 7.8 程序编译器:keil 4/keil 5 编程语言:C语言 编 ...

  2. 万年历设计单片机c语言,基于51单片机的电子万年历的设计

    基于51单片机的电子万年历的设计(论文9400字) 功能要求 1. 万年历能用数码管显示阳历年.月.日.星期.[小]时.分.秒并设置指定时间的闹铃. 2. 数字式温度计要求测温范围-50~100°C, ...

  3. 基于51单片机的电子万年历的设计

    (24条消息) 基于51单片机的电子万年历的设计说明书(完整word版本说明书+原理图+代码)资源-CSDN文库 摘 要 电子万年历是单片机系统的一个应用,由硬件和软件相配合使用.硬件由主控器.时钟电 ...

  4. 基于51单片机的电子万年历的设计-源代码

    电子万年历的设计目录 电子万年历的设计 电子万年历的系统整体设计框图 所需要的元件 DS18B20模块 DS18B20的特点 DS18B20内部结构 DS18B20管脚排列 DS1302模块 SPI时 ...

  5. 基于51单片机的三角波信号发生器设计

    基于51单片机的三角波信号发生器设计 一.任务要求: 设计内容 选择51单片机,晶振采用12MHz. 设计一个能产生50HZ至100HZ的三角波信号.通过0832/A芯片完成数模转换. 频率值由LED ...

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

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

  7. 基于51单片机的酒精浓度检测仪设计

    本设计仅供参考 基于51单片机的酒精浓度检测仪设计(proteus仿真+程序+原理图+报告) 原理图:Altium Designer 仿真:proteus 8.9 程序编译器:keil 4/keil ...

  8. 基于51单片机手动计步器protues仿真设计

    基于51单片机手动计步器protues仿真设计 (源码+仿真) 仿真原版本:proteus 7.8 程序编译器:keil 4/keil 5 编程语言:C语言 设计编号:S0021 目录标题 基于51单 ...

  9. S0011基于51单片机DS18B20温控风扇仿真设计

    基于51单片机DS18B20温控风扇仿真设计 (仿真+原理图+源码+设计报告) 原理图:Altium Designer 仿真原版本:proteus 7.8 程序编译器:keil 4/keil 5 编程 ...

最新文章

  1. 如何修改Web Interface4.5多语言版的版权信息
  2. Prometheus AlertManager 微信报警配置
  3. C++ UTF8和UTF16互转代码
  4. 相机标定之4个坐标系之间的变换关系
  5. 2018华为软件精英挑战赛总结
  6. shell 中数学计算总结
  7. 6.prometheus数据上报方式-pushgateway
  8. Linux环境运行Jmeter
  9. 防止sql注入:替换危险字符
  10. Mysql 中 show full processlist
  11. 安装biztalk2006后导致QuickStartV20不正常
  12. 使用作业异步调用存储过程的示例
  13. awk grep sed cut学习
  14. SQL查询数据以及排序
  15. 简易版WoMic(二)
  16. OpenRefine 开启远程访问模式
  17. php curl getinfo详解,php curl getinfo
  18. python爬虫-京东商品详情爬取
  19. Odoo发邮件被服务器退回
  20. 思绪,飘在青山绿水间

热门文章

  1. 前端开发:Vue报错Avoid mutating a prop directly since the value will be…的解决方法
  2. 如何实现今日头条跳转到微信?
  3. 从C到C++ 番外const的用法
  4. 66W真的比60W充电更快吗?基于Charge pump Charger的快充方案分析
  5. 终于学会数组的使用啦~~~------C语言数组学习笔记详解
  6. android Studio Crunching Cruncher
  7. 黑盒测试,白盒测试与灰盒测试的比较和区别
  8. NPOI之Excel——合并单元格、设置样式、输入公式
  9. 有趣的HTML实例(十五) 注册登录界面(css+js)
  10. Python-数据类型考试题分析