STC89C52单片机 数码管动态显示
数码管动态显示
静态与动态显示
动态显示
动态显示的特点是将所有位数码管的段选线并联在一起,由位选线控制是哪一位数码管有效。选亮数码管采用动态扫描显示。所谓动态扫描显示即轮流向各位数码管送出字形码和相应的位选,利用发光管的余晖和人眼视觉暂留作用,使人的感觉好像各位数码管同时都在显示。
数组的定义与引用
数组是一组有序数据的集合,数组中每一个数据都是同一数据类型。数组中的元素可以用数组名和下标来唯一确定。
数组的一般格式定义如下:
数据类型 数组名[常量表达式] = {元素表};
例如:
unsigned char tabel[3] = [0x3F, 0x06, 0x5B,];
P0 = tabel[0]; // P0此时的值为0x3F
数码管动态显示数字 123
#include <reg52.h>
#include <intrins.h>#define uint unsigned int
#define uchar unsigned charsbit DU = P2^6;//数码管段选
sbit WE = P2^7;//数码管段选// 毫秒级延时函数定义
void delay(uint z){ // 毫秒级延时函数定义uint x, y;for (x = z; x > 0; x--){for (y = 114; y > 0; y--){}}
}void main(){ // main函数自身会循环while(1){/*第一位显示 数字 1*/P0 = 0XFF; // 清除断码 如果没有为P0 初始化赋值 0XFF,那么 P0的值会是上一个打开段选锁存器过程中赋予的值,执行到这里 会把段选值赋给锁存器中P0,导致数码管显示错误。WE = 1; // 打开位选锁存器P0 = 0XFE; // 1111 1110 选通第一位数码管// P0 = 0X00; // 0000 0000 表示选通所有位数码管WE = 0; // 锁存位选数据DU = 1; // 打开段选锁存器P0 = 0X06; // 0000 0110 显示“1”DU = 0; // 锁存段选数据delay(5); // 对每次数码管的切换进行 5毫秒延时操作/*第二位显示 数字 2*/P0 = 0XFF; // 清除断码WE = 1; // 打开位选锁存器P0 = 0XFD; // 1111 1101 选通第二位数码管// P0 = 0X00; // 0000 0000 表示选通所有位数码管WE = 0; // 锁存位选数据DU = 1; // 打开段选锁存器P0 = 0X5B; // 0101 1011 显示“2”DU = 0; // 锁存段选数据delay(5);/*第三位显示 数字 3*/P0 = 0XFF; // 清除断码WE = 1; // 打开位选锁存器P0 = 0XFB; // 1111 1011 选通第三位数码管// P0 = 0X00; // 0000 0000 表示选通所有位数码管WE = 0; // 锁存位选数据DU = 1; // 打开段选锁存器P0 = 0X4F; // 0100 1111 显示“3”DU = 0; // 锁存段选数据delay(5);}
}
数码管动态显示数字 123 (代码优化)
#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--);
} /*====================================
函数 :display(uchar i)
参数 :i 显示数值,取值范围0-255
返回值 :无
描述 :三位共阴数码管动态显示
====================================*/
void display(uchar i)
{uchar bai, shi, ge;bai = i / 100; //236 / 100 = 2shi = i % 100 / 10; //236 % 100 / 10 = 3ge = i % 10;//236 % 10 =6//第一位数码管 P0 = 0XFF;//清除断码WE = 1;//打开位选锁存器P0 = 0XFE; //1111 1110WE = 0;//锁存位选数据DU = 1;//打开段选锁存器P0 = tabel[bai];//DU = 0;//锁存段选数据delay(5);//第二位数码管P0 = 0XFF;//清除断码WE = 1;//打开位选锁存器P0 = 0XFD; //1111 1101WE = 0;//锁存位选数据DU = 1;//打开段选锁存器P0 = tabel[shi];//DU = 0;//锁存段选数据delay(5);//第三位数码管P0 = 0XFF;//清除断码WE = 1;//打开位选锁存器P0 = 0XFB; //1111 1011WE = 0;//锁存位选数据DU = 1;//打开段选锁存器P0 = tabel[ge];//DU = 0;//锁存段选数据delay(5);
}void main()//main函数自身会循环
{ while(1){display(123); //数码管显示函数}
}
数码管动态显示数字 12345678 (代码优化)
#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, uchar num3, uchar num4, uchar num5, uchar num6, uchar num7, uchar num8)
{/*第一位显示*/ 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);/*第三位显示*/P0 = 0XFF;//清除断码WE = 1;//打开位选锁存器P0 = 0XFB; //1111 1011WE = 0;//锁存位选数据DU = 1;//打开段选锁存器P0 = tabel[num3];//DU = 0;//锁存段选数据delay(1);/*第四位显示*/P0 = 0XFF; // 清除断码WE = 1; // 打开位选锁存器P0 = 0XF7; // 1111 0111 选通第四位数码管WE = 0; // 锁存位选数据DU = 1; // 打开段选锁存器P0 = tabel[num4];//DU = 0; // 锁存段选数据delay(1);/*第五位显示*/P0 = 0XFF; // 清除断码WE = 1; // 打开位选锁存器P0 = 0XEF; // 1110 1111 选通第五位数码管WE = 0; // 锁存位选数据DU = 1; // 打开段选锁存器P0 = tabel[num5];//DU = 0; // 锁存段选数据delay(1);/*第六位显示*/P0 = 0XFF; // 清除断码WE = 1; // 打开位选锁存器P0 = 0XDF; // 1101 1111 选通第六位数码管WE = 0; // 锁存位选数据DU = 1; // 打开段选锁存器P0 = tabel[num6];//DU = 0; // 锁存段选数据delay(1);/*第七位显示*/P0 = 0XFF; // 清除断码WE = 1; // 打开位选锁存器P0 = 0XBF; // 1011 1111 选通第七位数码管WE = 0; // 锁存位选数据DU = 1; // 打开段选锁存器P0 = tabel[num7];//DU = 0; // 锁存段选数据delay(1);/*第八位显示*/P0 = 0XFF; // 清除断码WE = 1; // 打开位选锁存器P0 = 0X7F; // 0111 1111 选通第八位数码管WE = 0; // 锁存位选数据DU = 1; // 打开段选锁存器P0 = tabel[num8];DU = 0; // 锁存段选数据delay(1);
}void main()//main函数自身会循环
{ while(1){ display(1, 2, 3, 4, 5, 6, 7, 8); //数码管显示函数}
}
STC89C52单片机 数码管动态显示相关推荐
- 蓝桥杯单片机数码管动态显示_单片机静态动态数码管
单片机系统中常用的显示器有: 发光二极管LED(Light Emitting Diode)显示器.液晶LCD(Liquid Crystal Display)显示器.TFT液晶显示器等.LED显示器有两 ...
- c语言数码管流动显示一个数,51单片机数码管动态显示 - 数码管动态扫描显示01234567程序(三种方案)...
数码管动态扫描显示01234567程序二--51单片机动态显示共阳数码管01234567 原理图 c语言程序 程序如下: #include #define uint unsigned int #def ...
- C51单片机数码管动态显示
数码管作为最廉价的输出设备,在各种自动化设备中有很大的应用,最简单普通的显示方式为动态刷新显示,称为假动态显示,即通过分时扫描每一位,利于人眼的视觉停留现象,造成一种静态显示的效果,如下图所示: C5 ...
- STC89C52单片机 数码管静态显示
数码管显示原理 数码管根据内部连接不同分为共阴极和共阳极.八段数码管内部有8颗LED组成,如果想要显示特定字形只需控制相应的LED亮起,其他LED熄灭即可. 静态与动态显示 静态显示: LED显示器工 ...
- STC89C52单片机数码管介绍以及代码示例
目录 一,数码管介绍 二,数码管引脚定义 我们首先对单个引脚进行说明: 其次,我们对多个引脚管进行说明: 最后我们来详细说说如何进行位选还有段选 接着是段选 三,数码管段码表 四,数码管驱动方式 五, ...
- 单片机——数码管动态显示
1.头文件和定义,代码还使用了 sbit 定义来声明了两个变量 duan 和 wei,它们实际上是 P2.6 和 P2.7 端口的别名,用于控制数码管的段选和位选信号.这种方法可以使代码更具可读性,并 ...
- 蓝桥杯单片机数码管动态显示_关于蓝桥杯训练小程序 中断控制数码管显示数字的左右移动...
/******************************************************************************************** 利用数码管在 ...
- 基于51单片机实现4位数码管动态显示
单片机入门学习记录(一) 硬件配置: 主控:STC89C52单片机 显示器件:四位一体数码管 操作器件:点动式独立按键SB1.SB2.SB3.SB4 *选配器件:蜂鸣器 功能要求: 1)开机自检:四位 ...
- STC89C52单片机 点亮两个数码管,可以显示 00——10 共 11 个数字
手动显示 #include <reg52.h>//包含51头文件 #include <intrins.h>//包含移位标准库函数头文件#define uint unsigned ...
最新文章
- (AI、Artificial Intelligence)人工智能概述及分类
- linux清除邮件队列
- React Native开发学习笔记——WebStorm运行项目
- 如何打印CloudFoundry上应用运行时的环境变量
- 1.5w字的Rmarkdown入门教程汇总
- opencv +opencv_contrib+CMake+VS2015
- JSONArray.fromObject(str)
- 记一次勒索病毒攻击事件的处理过程
- 因果推断笔记——DML :Double Machine Learning案例学习(十六)
- UI——day15.H5和小程序的设计
- mui架构app-终章(我是怎样决定放弃mui)
- android毕业论文结论,毕业论文经典结束语
- 一文排除R语言热力图所有的坑
- net stop mysql 服务名无效
- 奥塔在线:架构实践基础之一图胜千言
- 各个历史jdk版本下载
- python爬虫-正则表达式识别jpg和JPG
- Linux源码解读作业之文件篇
- 基于Qt5GUI框架+SQLite的音乐播放器
- python 栈的基本操作
热门文章
- 《C++编程风格(修订版)》——1.1 抽象
- 【POI xls】解析xls遇到的问题
- Linux 模拟 鼠标 键盘 事件
- BinaryReader 、BinaryWriter是方便用二进制方式读写int,double,string之类的数据
- 用Play 1.x 实现简单云计算多租户设计(Use Play 1.x To Achieve Multi-Tenancy Design)
- debian6 xen4.0安装 guest半虚拟化--tar安装
- 从JAVA转学习Go——Go在eclipse的环境搭建
- 计算机组成原理:总线
- socket()函数详解!
- 深入理解strncpy这个函数