前言
首先此源碼設計知識點少,更容易供路人/初學者參考;
介紹
此源碼實現了利用外部中斷實現多位數碼管加1和**減1**效果(無論是幾位數碼管都可用)
要點講解
1.設置外部中斷初始化.(我放在了一個函數裏用來調用)
void intinit()
{
IT0 = 1; //設置外部中斷0的觸發方式爲跳沿觸發。
EX0 = 1; //開啓外部中斷0
IT1 = 1; //設置外部中斷1的觸發方式爲跳沿觸發。
EX1 = 1; //開啓外部中斷1
EA = 1; //中斷總開關
}
2.設置按鈕函數
void button(){
if(K0==0) //按鈕--加
{
delay1ms(10);
if(K0==0)
{
num++;
if(num==5000)
num=0;
while(!K0);
}
}
if(K1==0)
{ //按鈕--減
delay1ms(10);
if(K1==0)
{
num--;
if(num==0)
num=5000;
while(!K1);
}
}
}
3.這是全文了比較有意思的一步,也是初學者想不到的地方(重點看)
void wei() //抓取各位數
{
qian=num/1000%10;
bai=num/100%10;
shi=num/10%10;
ge=num%10;
}
***最後是完整源碼,仔細看哦(不要完全照搬)
注意引腳號和共陰共陽;
#include<reg52.h>
unsigned char code segcc[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
0x7f,0x6f};//共陰段選
unsigned char vcc[]={0x7f,0xbf,0xdf,0xef};//位選
sbit K0=P3^2;
sbit K1=P3^3;
unsigned int i,j,k;
int num;
int ge,shi,bai,qian;
void delay1ms(int k)
{
for(i=0;i<k;i++)
{
for(j=0;j<100;j++)
{}
}
} //延時
void intinit()
{
IT0 = 1; //設置外部中斷的觸發方式爲下降沿觸發。
EX0 = 1; //開啓外部中斷0
EA = 1; //中斷總開關
IT1 = 1;
EX1 = 1;
EA = 1;
}
void button(){
if(K0==0) //按鈕--加
{
delay1ms(10);
if(K0==0)
{
num++;
if(num==5000)
num=0;
while(!K0);
}
}
if(K1==0)
{ //按鈕--減
delay1ms(10);
if(K1==0)
{
num--;
if(num==0)
num=5000;
while(!K1);
}
}
}
void wei() //抓取各位數
{
qian=num/1000%10;
bai=num/100%10;
shi=num/10%10;
ge=num%10;
}
main()
{
intinit();
while(1);
}
void int0() interrupt 0
{
EX0=0;
while(1)
{
button();
wei();
P3=0xef;
P2=segcc[qian];
delay1ms(1);
P3=0xdf;
P2=segcc[bai];
delay1ms(1);
P3=0xbf;
P2=segcc[shi];
delay1ms(1);
P3=0x7f;
P2=segcc[ge];
delay1ms(1);
EX0=1;
}
}
void int1() interrupt 2
{
EX1=0;
while(1)
{
button();
wei();
P3=0xef;
P2=segcc[qian];
delay1ms(1);
P3=0xdf;
P2=segcc[bai];
delay1ms(1);
P3=0xbf;
P2=segcc[shi];
delay1ms(1);
P3=0x7f;
P2=segcc[ge];
delay1ms(1);
EX1=1;
}
}