C51单片机的电子时钟(数码管显示)
C51单片机的电子时钟
- 硬件环境:
- 相关开发板原理图解析
- 正式代码:
- 效果预览图
硬件环境:
普中科技51单片机开发板STC89C52
相关开发板原理图解析
查看这两个原理图,我们可以发现控制这8个数码管由P22、P23、P24这三个控制,就相当于三个二进制数来控制数码管,三个二进制数(000-111)总共有8个,每一个二进制代表控制一个数码管。而控制数码管的发光二极管P0-P7控制,例如要想数码管显示数字0,则需要发光的只有abcdef,我们用十六进制来0x3F表示,因为四位二进制代表一位十六进制,我们把它转为二进制为:00111111,这每一个二进制数分别表示dp g f e d c b a,需要它发光则表示为1,在举一个例子,显示数字7,我们只需要abc发光,转为对应的二进制为:00000111 对应的十六进制为:0x07
正式代码:
#include<reg51.h>
//这里定义了3个端口位,分别命名为A、_B、C,分别代表P2口的2、3、4位。
sbit A=P2^2;
sbit _B=P2^3;
sbit C=P2^4;
//这里定义了一个宏定义,P0代表的是单片机的一个8位数据总线口
#define zixin P0
//这里定义了一个10个元素的只读数组zxCode,用于存放0~9的数码管显示码。
code unsigned char zxCode[10]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};
//这里定义了一个10个元素的只读数组_zxCode,用于存放0~9的数码管带点显示码。
code unsigned char _zxCode[10]={0xBF,0x86,0xDB,0xCF,0xE6,0xED,0xFD,0x87,0xFF,0xEF};
//这里定义了一个延时函数,用于延时一段时间,用于稳定数码管的显示效果。
void delay(){char i;
for(i=-100;i<100;i++);
}
//这里定义了一个长度为8的数组DsBuf,用于存放需要显示的数码管数据,数组的每一个元素代表数码管的一个位置。
unsigned char DsBuf[8]={0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};/*控制数码管显示的函数。在该代码中,使用P0口来控制8个数码管的段选信号,同时使用P2口的3个引脚(即A、B、C)来控制数码管的位选信号。通过display函数,可以将DsBuf数组中存储的数值依次显示在8个数码管上,实现时分秒的动态显示。该函数中使用了一个静态变量n来循环控制位选信号A、B、C的输出,从而实现了数码管显示的循环刷新。*/
void display(){static unsigned char n=0;zixin=0x00;if(n&0x01) A=1;else A=0;if(n&0x02) _B=1;else _B=0; if(n&0x04) C=1;else C=0; zixin=DsBuf[n];n++;n%=8;
}
/*filldisbuf函数的作用是将传入的时分秒的值按照一定的格式进行转换,并将转换后的结果存储在DsBuf数组中,以便后续的数码管显示*/
void filldisbuf(unsigned int n,unsigned int m,unsigned int h){DsBuf[0]=zxCode[n%10];n /=10;DsBuf[1]=zxCode[n%10];DsBuf[2]=_zxCode[m%10];m /=10;DsBuf[3]=zxCode[m%10];DsBuf[4]=_zxCode[h%10];h /=10;DsBuf[5]=zxCode[h%10];
}int main(){//这里定义了3个unsigned int类型的变量,分别代表秒、分、时unsigned int s=0;unsigned int m=0;unsigned int h=0;//这里定义了一个unsigned char类型的变量i,用于计数unsigned char i=0;filldisbuf(s,m,h);while(1){display();delay();i++;if(i>=200){i=0;s = (++s) % 60;if (s == 0) {m = (++m) % 60;if (m == 0) {h = (++h) % 24;}}filldisbuf(s, m, h);}}
}
效果预览图
C51单片机的电子时钟(数码管显示)相关推荐
- 数字电子计算机处理信号shi,余洪伟 基于单片机数字电子时钟设计(led显示).doc...
余洪伟 基于单片机数字电子时钟设计(led显示) 沈阳航空航天大学 课 程 设 计 (论文) 题目 基于单片机的数字电子时钟设计 (LED显示) 班 级 学 号 2013040701060 学 生 姓 ...
- c语言编计分秒时的程序,用c语言编写程序,用于c51单片机四位共阴数码管显示,显示分秒的计时器。...
匿名用户 1级 2014-05-07 回答 /*************************************************************************** 标 ...
- 基于单片机的电子时钟
点击链接获取Keil源码与Project Backups仿真图: https://download.csdn.net/download/qq_64505944/87453487 源码获取 摘要 本次设 ...
- 基于51单片机的8位数码管显示的可调时电子时钟
基于51单片机的8位数码管显示的可调时电子时钟 本人大二本科生,第一次发东西,功能比较简单,代码有点复杂,希望能有大神指正. 基于51单片机的不可调时间的时钟显示,晶振为11.0592MHZ,60H ...
- c51单片机时钟c语言程序设计,基于51单片机的电子时钟设计..doc
-- I -- - - I -- 设计题目: 基于 51 单片机的电子时钟设计 摘要 单片机,是集 CPU ,RAM ,ROM ,定时器,计数器和多种接口于一体的微控制器.自 20 世纪 70 年代问 ...
- 单片机8位数码管时钟c语言汇编,基于8051单片机和DS12C8878位数码管显示的时钟.docx...
基于8051单片机和DS12C8878位数码管显示的时钟 #include #include #define sec XBYTE[0xed00]//秒寄存器地址 #define min XBYTE[0 ...
- 基于单片机的电子时钟设计(keil+protues仿真,含代码及原理图)
本学期单片机课程要求做课程设计,我选取的课题如下: 基于单片机的电子时钟设计,要求: (1)实时显示当前时间: (2)能够对时间进行设置: (3)包括年月日,小时,分钟,秒. (4)整点提醒功能. 经 ...
- 微型计算机系统电子时钟程序设计,基于单片机的电子时钟设计 普通单片机电子时钟的设计的分析...
摘要:随着电子科技的飞速发展,尤其是超大规模集成电路的出现,给我国的经济带来了实质性的改变.其中,对于单片机的使用已经在很多领域都有出现,比如说在工业自动化控制房间.在智能仪器仪表方面以及各种家用电器 ...
- 基于51单片机的电子时钟设计
基于51单片机的电子时钟设计 0 功能介绍 1.从DS1302中读取时间显示 2.一共4个按键,按键1按下进入修改时间模式,再按下切换修改的时间变量,这个时候第2和3个按键就是修改时间变量的按键,修改 ...
最新文章
- pythonos是啥_Pythonos模块介绍
- vue项目按需引入element-ui,修改.babelrc文件之后报错
- 每日程序C语言14-小球反弹高度问题
- Go语言 ProtoBuf 序列化和反序列化
- sql同时修改两个表的数据_如何用SQL做数据透视表?
- 对称二叉树(C++)
- 企业级 SpringBoot 教程 (七)springboot开启声明式事务
- 情感分类介绍及发展方向
- 美图android手机刷机教程,美图手机如何刷机
- 音乐外链php修复版源码
- ACM算法模板小汇总
- TIM1_CH1N和TIM1_CH1的区别和控制
- HTML的背景颜色和背景图片
- elasticsearch for windows
- 数学建模之储药柜的设计
- J2EE技术简单介绍
- AMD GPU内存管理(1):概览
- Ramdisk虚拟内存盘应该占多少物理内存?
- HTTP访问控制(CORS) 跨域访问
- docker安装nextcloud出现“ 内部服务器错误”