不知道为什么数码管不亮,求大神帮忙!!

2019-07-18 12:00发布

#include <reg52.h>
#include <intrins.h>

void display(unsigned char* lp,unsigned char lc);//数字的显示函数,lp为指向数组的地址,lc为显示的个数
void displaystr(unsigned char*lp,unsigned char lc);//数字的显示函数,同上
void delay();//延时子函数,5个空指令

code unsigned char table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40,0x00}; //共阴顺序小数点暗(0-9),--,全灭
unsigned char l_tmpdate[8]={0,1,2,3,4,5,6,7}; //定义数组变量,并赋值0,1,2,3,4,5,6,7,就是本程序要显示的八个数
code unsigned char l_24C02[5]={0x5b,0x66,0x39,0x3f,0x5b}; //定义数组常量

void main(void)
{
    unsigned char i=0;
    while(1)
    {
        display(l_tmpdate,8);//用数字显示函数显示八个数字
        displaystr(l_24C02,5);//或者用这个函数显示5个字符        
    }
}

void display(unsigned char* lp,unsigned char lc)  //显示
{
    unsigned char i;   
    P2=0; //端口2为输出
    P1=P1&0xF8;     //将P1口的前3位输出0,对应74LS138译门输入脚,全0为第一位数码管
    for(i=0;i<lc;i++)
    {
        P2=table[lp];
        delay();
        if(i==7);//检测显示完8位否,完成直接退出,不让P1口再加1,否则进位影响到第四位数据
            break;
        P2=0;   //清零端口,准备显示下位
        P1++;    //下一位数码管
    }
}

void displaystr(unsigned char*lp,unsigned char lc) //显示
{
    unsigned char i;
    P2=0;
    P1=P1&0xF8;
    for(i=0;i<lc;i++)
    {
        P2=lp;  //直接输出显示设定好的数值到数码段
        delay();
        if(i==7);
            break;
        P2=0;   //清零端口,准备显示下位
        P1++;    //下一位数码管
    }
}  

void delay(void)     //空5个指令
{
    _nop_();_nop_();_nop_();_nop_();_nop_();
}


友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。