1
“掌握数码管的静态、动态显示原理及编程方法。--综合案例”
前言
我们继续来写一个代码,来综合这些效果
01电路图
02代码如下
#include < reg51.h >
#define u8 unsigned char
#define u16 unsigned int
#define u32 unsigned long
sbit ADD = P3^0;
sbit SUB = P3^1;
sbit SET = P3^2;
bit key_mark = 0;
bit break_out = 0;
//共阴极
u8 Table_cc[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71
};
u8 state = 0;
u32 num2=0;
u32 num1 = 123456;
u8 d0,d1,d2,d3,d4,d5;
//函数的声明
void Delay(u16 k);
void KeyScan();
void Key();
void DigDisplay1();
void DigDisplay2();
/*****外部中断函数****************
时间:2023年4月29日
********************************/
void InitI0(){
IE = 0x81;
IT0 = 1; //边沿检测
}
//外部中断0的作用:1.让效果的状态改变 2.break_out可以让效果1执行后,可以跳出效果1的循环
void InT0() interrupt 0{
if(state++ > 2 ) {
state == 0;
break_out = 1;
}
}
//主函数
void main(){
InitI0();
while(1){
if(state == 0)
{
DigDisplay1();
}
if(state == 1)
{
d0 = num1/100000;
d1 = num1%100000/10000;
d2 = num1%10000/1000;
d3 = num1%1000/100;
d4 = num1%100/10;
d5 = num1%10;
DigDisplay2();
}
else if(state == 2)
{
Key();
d0 = num2/100000;
d1 = num2%100000/10000;
d2 = num2%10000/1000;
d3 = num2%1000/100;
d4 = num2%100/10;
d5 = num2%10;
DigDisplay2();
}
else
break_out = 0;
}
}
//延时函数
void Delay(u16 k){
u16 i,j;
for(i=0;i< k;i++)
for(j=0;j< 110;j++);
}
//按键扫描函数:用于判断是哪一个按键按下了