通过锁存器控制的16*1的矩阵老出现乱码

2019-07-15 16:54发布

#include <reg52.h>
#define uint unsigned int
#define uchar unsigned char
sbit w1=P2^0;//位选
sbit w2=P2^1;//位选
sbit d5=P2^6;//段选
sbit d6=P2^7;//段选
uchar code qust[]={0xFF,0x7F,0xFE,0xFF,0xF9,0xFF,0xE0,0x00,0x1F,0xFF,0xFD,0xF7,0xFB,0xCF,0xE7,0x3F,
0x0F,0xFD,0xEF,0xFE,0xEC,0x01,0xEF,0xFF,0xEF,0x7F,0xEB,0x9F,0xE7,0xE7,0xFF,0xFF};/*你 */
uchar m;
void delay(uint z)
{                                         //延时
        uchar x,y;
        for(x=360;x>0;x--)
                for(y=z;y>0;y--);
}
void init()        //初始化
{
        P2=0;
        EA=1; //开总中断
        EX0=1;//启动外部中断0
        IT0=1;//下降沿触发
       
}
void display()
{
        uchar i;
        P2=0;
        w1=1;//开位选
        w2=1;//开位选
        P0=0xff;//对所有的位选写入数据
        w1=0;  //关位选
        w2=0;
        delay(10);
        d5=0;//开段选
        d6=0;
        d5=1;
        d6=1;
        for(i=0;i<16;i++)
        {
                  P0=qust[i*2];        //段选写入数据
                  P0=qust[i*2+1];
                  delay(50);
        }
        d5=0;
        d6=0;  
}
void  main()
{
          init();
          while(1)
          {;}
}                                                         //外部中断
void start () interrupt 0
{
                 m=~m;                   //来回只点亮一次
                 if(m==0)
                         display();
}               

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