前言
我們繼續來寫一個代碼,來綜合這些效果
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++);
}
//按鍵掃描函數:用于判斷是哪一個按鍵按下了