静态数码管和动态数码管用一块单片机不能同时驱动吗,一个非常简单的小程序,利用外部中断控制静态数码管和动态数码管轮流显示数字0~7,可是无论是实际下载到开发板还是用protues仿真都只有动态显示,无法切换到静态显示,代码也检查了许多遍,刚刚开始学51,不知道是不是算法的问题,恳求大佬帮忙指点一点,下面是代码。
#include <reg52.h>
#define LED1 P1//静态数码管
#define LED2 P0//动态数码管
sbit c=P2^7;
sbit b=P2^6;
sbit a=P2^5;
sbit k1=P3^2;
sbit k2=P3^3;
unsigned char code num[8]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07};
unsigned char M[8];
unsigned char k;
void displayLED1();
void displayLED2();
void zhong_duan_kai_qi();
void delay(unsigned int time);
void main()
{
zhong_duan_kai_qi();//外部中断开启
while(1)
{
unsigned char i;
if(k)
{
LED2=0x00;
while(k)
{
displayLED1();
}
}
else
{
for(i=0;i<8;i++)
{
M[i]=num[i];
}
LED1=0x00;
while(~k)
{
displayLED2();
}
}
}
}
void delay(unsigned int time)
{
unsigned char i;
unsigned int j;
for(i=0;i<time;i++)
{
for(j=0;j<125;j++);
}
}
void zhong_duan_kai_qi()
{
//设置INT0
IT0=1;//跳变沿出发方式(下降沿)
EX0=1;//打开INT0的中断允许。
//设置INT1
IT1=1;
EX1=1;
//打开总中断
EA=1;
}
void displayLED1()
{
unsigned char i;
for(i=0;i<8;i++)
{
LED1=num[i];
delay(500);
}
}
void displayLED2()
{
unsigned char i;
unsigned int j;
for(i=0;i<8;i++)
{
switch(i)
{
case 0:
c=0;b=0;a=0;break;
case 1:
c=0;b=0;a=1;break;
case 2:
c=0;b=1;a=0;break;
case 3:
c=0;b=1;a=1;break;
case 4:
c=1;b=0;a=0;break;
case 5:
c=1;b=0;a=1;break;
case 6:
c=1;b=1;a=0;break;
case 7:
c=1;b=1;a=1;break;
}
LED2=M[i];
j=500;
while(j–);
LED2=0x00;//消隐
}
}
void Int0()interrupt 0
{
delay(1);//延时消抖
if(k1==0)
{
k=0;
}
}
void Int1()interrupt 2
{
delay(1);
if(k2==0)
{
k=1;
}
}