“掌握数码管的静态、动态显示原理及编程方法。--不是综合案例”
实现数码管的静态及动态显示:
效果1(静态显示):6位数码管循环显示数字0~F;
效果2(动态态显示):6位数码管同时显示数字1~6;
效果3(按键检测):用中断或查询方式进行按键检测,实现数码管显示值的加减,最大值为65535;
01电路图
我们的电路图如下:
02效果
代码如下:
/************
时间:2023/04/26
作者:顾
效果1(静态显示):6位数码管循环显示数字0~F;
**************/
#include < reg51.h >
//*****声明函数和变量、引脚的定义
#define u8 unsigned char
#define u16 unsigned int
u8 Table_cc[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71
};
/*****延时函数********************
时间:2023年4月26日
功能:延时110*10 = 1100μs = 1.1ms
**********************************/
void Delay(u16 k){
u16 i,j;
for(i=0;i< k;i++)
for(j=0;j< 1100;j++);
}
/*****显示函数****************
时间:2023年4月26日
功能:
数码管显示函数
********************************/
void Display(u16 n){
//显示秒个位
P1 = 0XC0; //1100 0000
P2 = Table_cc[n];
Delay(100);
}
/*****主函数****************
时间:2023年4月26日
********************************/
void main(){
u8 i;
while(1){
for(i=0;i< 16;i++)
{
Display(i);
}
}
}
03效果2
代码如下:
方法一
/************
时间:2023/04/26
作者:顾
效果2(动态态显示):6位数码管同时显示数字1~6;(30分)
**************/
#include < reg51.h >
//*****声明函数和变量、引脚的定义
#define u8 unsigned char
#define u16 unsigned int
u8 t[6]= {17,17,17,17,17,17};
u8 Table_cc[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71,
0x00
};
/*****延时函数********************
时间:2023年4月26日
功能:延时110*10 = 1100μs = 1.1ms
**********************************/
void Delay(u16 k){
u16 i,j;
for(i=0;i< k;i++)
for(j=0;j< 110;j++);
}
/*****显示函数****************
时间:2023年4月26日
功能:
数码管显示函数
********************************/
void Display(u8 h,u8 m,u8 s){
P1 = 0Xff;
P2 = Table_cc[s%10];
P1 = 0Xdf; // 1101 1111
Delay(10);
P1 = 0Xff;
P2 = Table_cc[s/10];
P1 = 0Xef; // 1110 1111
Delay(10);
P1 = 0Xff;
P2 = Table_cc[m%10];
P1 = 0Xf7; // 1111 0111
Delay(10);
P1 = 0Xff;
P2 = Table_cc[m/10];
P1 = 0Xfb; // 1111 1011
Delay(10);
P1 = 0Xff;
P2 = Table_cc[h%10];
P1 = 0Xfd; // 1111 1101
Delay(10);
P1 = 0Xff;
P2 = Table_cc[h/10];
P1 = 0Xfe; // 1111 1110
Delay(10);
}
/*****主函数****************
时间:2023年4月26日
********************************/
void main(){
while(1){
Display(12,34,56);
}
}