静态数码管和动态数码管用一块单片机不能同时驱动吗

静态数码管和动态数码管用一块单片机不能同时驱动吗,一个非常简单的小程序,利用外部中断控制静态数码管和动态数码管轮流显示数字0~7,可是无论是实际下载到开发板还是用protues仿真…

静态数码管和动态数码管用一块单片机不能同时驱动吗,一个非常简单的小程序,利用外部中断控制静态数码管和动态数码管轮流显示数字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;       
        }
}

作者: soufei

为您推荐


Fatal error: Can't use function return value in write context in /www/wwwroot/www.qianrushi.com.cn/wp-content/themes/news/footer.php on line 115