STC89C52单片机 点亮两个数码管,可以显示 00——10 共 11 个数字
手动显示
#include <reg52.h>//包含51头文件
#include <intrins.h>//包含移位标准库函数头文件#define uint unsigned int
#define uchar unsigned charsbit DU = P2^6;//数码管段选
sbit WE = P2^7;//数码管段选//共阴数码管段选表0-9
uchar code tabel[]= {0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07, 0x7F, 0x6F,};/*====================================
函数 : delay(uint z)
参数 :z 延时毫秒设定,取值范围0-65535
返回值 :无
描述 :12T/Fosc11.0592M毫秒级延时
====================================*/
void delay(uint z)
{uint x,y;for(x = z; x > 0; x--)for(y = 114; y > 0 ; y--);
} /*====================================
描述 :两位共阴数码管动态显示
====================================*/
void display(uchar num1, uchar num2)
{/*第一位显示*/ P0 = 0XFF;//清除断码WE = 1;//打开位选锁存器P0 = 0XFE; //1111 1110WE = 0;//锁存位选数据DU = 1;//打开段选锁存器P0 = tabel[num1];//DU = 0;//锁存段选数据delay(1);/*第二位显示*/P0 = 0XFF;//清除断码WE = 1;//打开位选锁存器P0 = 0XFD; //1111 1101WE = 0;//锁存位选数据DU = 1;//打开段选锁存器P0 = tabel[num2];//DU = 0;//锁存段选数据delay(1);}void main()//main函数自身会循环
{ while(1){ display(0, 0); //数码管显示函数}
}
说明:
由于传参的缘故,显示 00——10 共 11 个数字只需要调用
自定义的函数void display(uchar num1, uchar num2)
依次传入:
display(0 ,1);
display(0 ,2);
display(0 ,3);
display(0 ,4);
display(0 ,5);
display(0 ,6);
display(0 ,7);
display(0 ,8);
display(0 ,9);
display(1 ,0);
所以以上其它代码不再复制。
自动显示
#include <reg52.h>//包含51头文件
#include <intrins.h>//包含移位标准库函数头文件#define uint unsigned int
#define uchar unsigned charsbit DU = P2^6;//数码管段选
sbit WE = P2^7;//数码管段选
uchar count = 0; // 控制数码管显示的变量
uchar i = 0; // 控制循环次数的变量//共阴数码管段选表0-9
uchar code tabel[]= {0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07, 0x7F, 0x6F,};/*====================================
函数 : delay(uint z)
参数 :z 延时毫秒设定,取值范围0-65535
返回值 :无
描述 :12T/Fosc11.0592M毫秒级延时
====================================*/
void delay(uint z)
{uint x,y;for(x = z; x > 0; x--)for(y = 114; y > 0 ; y--);
} /*====================================
描述 :两位共阴数码管动态显示
====================================*/
void display(uchar num1, uchar num2)
{/*第一位显示*/ P0 = 0XFF;//清除断码WE = 1;//打开位选锁存器P0 = 0XFE; //1111 1110WE = 0;//锁存位选数据DU = 1;//打开段选锁存器P0 = tabel[num1];//DU = 0;//锁存段选数据delay(1);/*第二位显示*/P0 = 0XFF;//清除断码WE = 1;//打开位选锁存器P0 = 0XFD; //1111 1101WE = 0;//锁存位选数据DU = 1;//打开段选锁存器P0 = tabel[num2];//DU = 0;//锁存段选数据delay(1);}/*====================================
变量 count:负责控制点亮哪2个数码管,例如count 为1 则点亮 01 数码管
描述 :由于同时点亮2个数码管,需要2个数码管不断的循环才能实现2个数码管同时点亮所以在这里将数码管显示在单片机的代码封装起来,来让我们调用。
====================================*/
void singlechip_show_num(uchar count){ switch(count){ // 通过 switch case 语句对 数码管的数值进行精准的管理case 0 :display(0 , 0);break; case 1 :display(0 , 1);break;case 2 :display(0 , 2);break;case 3 :display(0 , 3);break;case 4 :display(0 , 4);break;case 5 :display(0 , 5);break;case 6 :display(0 , 6);break; case 7 :display(0 , 7);break; case 8 :display(0 , 8);break;case 9 :display(0 , 9);break;case 10 :display(1 , 0);break; }}void main()//main函数自身会循环
{ while(1){ for (i = 0; i < 200; i++){ // 使点亮的数码管循环 200 次,保证人眼能够看到的数码管是同时显示的。singlechip_show_num(count); // 调用数码管显示函数}count++; //每次循环200次结束, count 变量自身+1,单片机显示+1后的数值if(count == 11){ // 当count 变量 等于11时,我们把变量再重新初始化为0,从0重新开始计数循环count = 0;}}
}
效果显示:
STC89C52单片机 点亮两个数码管,可以显示 00——10 共 11 个数字相关推荐
- avr单片机led数码管六位动态显示时分秒c语言程序,AVR单片机控制8段LED数码管同时显示 - AVR单片机8位数码管显示的程序实现(两种方法介绍)...
AVR单片机控制8段LED数码管同时显示 这是一个简单的供单片机入门学习者练习用的8段LED数码管控制汇编程序,控制一个两位的数码管同时显示字符(动态刷新).用AVR- Studio-4 开发,在AV ...
- 用四位led数码管作显示器的篮球比赛24秒计时器求c语言代码,单片机编程控制LED七段数码管作显示的篮球赛计时计分系统...
本次设计用由AT89C51编程控制LED七段数码管作显示的球赛计时计分系统.系统应具有赛程定时设置,赛程时间暂停,及时刷新甲.乙双方的成绩以及赛后成绩暂存等功能. 内容包括:显示.键盘.时钟等内容设计 ...
- 嵌入式开发:使用STM32CubeMX 和 Keil uVision5实现两位数码管循环显示实验
一.STM32CubeMx实现数码管 1.双击打开STM32CubeMX. 2.点击File选项,在File列表下选择New Project选项新建工程. 3.在图中所示位置的方框中输入我们使用的芯片 ...
- 【蓝桥杯单片机(7)】数码管定时器显示任意字符串
目录 1.数码管的电路连接 1.1段选 2.位选 2.动态数码管的显示原理 2.1.点亮一个数码管需要那些操作?? 2.2.我怎么做到极短时间内,给不同位输送数据呢.也就是如何产生位选?? 2.3.我 ...
- 单片机上的8位数码管同时显示数字“12345678“
8位数码管同时显示数字"12345678" #include<reg52.h>sbit DUAN=P2^6; sbit WEI=P2^7; char code sz[1 ...
- STC89C52单片机 点亮LED灯
点亮LED灯 一.什么是LED LED全称为半导体发光二极管,采用半导体材料制成的,以直接将电能转化为光能,电号转换成光信号的发光器件:其特点是功耗低.高亮度.色彩艳丽.坑振动.寿命长(正常发光8-1 ...
- php两字段一列竖排显示,iOS 10 YYLabel 竖排多列文字只能显示一列
代码片段 YYLabel *textLabel = [[YYLabel alloc] init]; textLabel.numberOfLines = 0; textLabel.origin = CG ...
- 30、基于51单片机交通灯车流量管控数码管显示系统设计
摘要 随着社会主义的建设,城市的规模在不断扩大,城市的交通也在不断的提高和改进,交通的顺畅已经成为制约社会主义建设的一个重要因素.目前,伴随着机动车辆的不断增加,尤其是十字路口的交通建设 颇为关键,严 ...
- 基于单片机的LED数码管循环移位显示
单片机系统基础实验--LED数码管循环移位显示 第一部分 前言 第二部分 数码管的原理构成 LED数码管的结构 LED数码管的工作原理 LED数码管的字形编码 LED数码管的控制方式 第三部分 设计项 ...
最新文章
- 在Spark上用Scala实验梯度下降算法
- 机器学习(四)——损失函数
- 1352. 虫洞【难度: 中 / 枚举 判环】
- JavaScript中对象的构造方法
- 使用Apache Kafka作为消息系统的发布-订阅通信中的微服务,并通过集成测试进行了验证...
- 什么是写一个java类,Java什么是类?class的相关介绍
- 古剑2计算机中丢失,小编研习win7系统玩古剑奇谭2提示计算机中丢失Vcomp100.dl的图文方法...
- python检测端口是否被侦听
- 11. 给 apache ,nginx 设置变量
- 欧姆龙服务器数码管不显示问题,TM1640驱动数码管不显示问题
- 计算机如何驱动无线网络,无线网卡驱动怎么安装,小编教你怎么给电脑安装无线网卡驱动...
- 【滤波器】基于多种滤波器实现信号去噪含Matlab源码
- 沈小滨 项目管理中的领导力
- 送男孩子情人节礼物送什么?情人节必备礼物合集
- Java8 jdk1.8新特性
- 人工智能会是发展中国家的下一个盖世英雄吗?
- python找不到指定模块sklearn怎么办_python中sklearn找不到指定模块怎么办
- Adobe设计师证书
- 什么是Anti-DDoS流量清洗?
- wkhtmltopdf 字体无效问题