STC89C52单片机 数码管动态显示
程序员文章站
2022-03-15 20:25:09
数码管动态显示静态与动态显示动态显示动态显示的特点是将所有位数码管的段选线并联在一起,由位选线控制是哪一位数码管有效。选亮数码管采用动态扫描显示。所谓动态扫描显示即轮流向各位数码管送出字形码和相应的位选,利用发光管的余晖和人眼视觉暂留作用,使人的感觉好像各位数码管同时都在显示。数组的定义与引用数组是一组有序数据的集合,数组中每一个数据都是同一数据类型。数组中的元素可以用数组名和下标来唯一确定。数组的一般格式定义如下:数据类型 数组名[常量表达式] = {元素表};例如:unsigned c...
数码管动态显示
静态与动态显示
动态显示
动态显示的特点是将所有位数码管的段选线并联在一起,由位选线控制是哪一位数码管有效。选亮数码管采用动态扫描显示。所谓动态扫描显示即轮流向各位数码管送出字形码和相应的位选,利用发光管的余晖和人眼视觉暂留作用,使人的感觉好像各位数码管同时都在显示。
数组的定义与引用
数组是一组有序数据的集合,数组中每一个数据都是同一数据类型。数组中的元素可以用数组名和下标来唯一确定。
数组的一般格式定义如下:
数据类型 数组名[常量表达式] = {元素表};
例如:
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 char
sbit 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函数自身会循环
P0 = 0XFF; // 清除断码
WE = 1; // 打开位选锁存器
P0 = 0XFE; // 1111 1110 选通第一位数码管
// P0 = 0X00; // 0000 0000 表示选通所有位数码管
WE = 0; // 锁存位选数据
DU = 1; // 打开段选锁存器
P0 = 0X06; // 0000 0110 显示“1”
DU = 0; // 锁存段选数据
delay(5);
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);
}
}
本文地址:https://blog.csdn.net/qq_44989881/article/details/109441157