CH451驱动8个数码管,只能显示8个一样的怎么回事啊?

2020-01-22 12:09发布

[ 本帖最后由 Doci 于 2014-9-19 11:15 编辑 ] [ 本帖最后由 Doci 于 2014-9-19 11:05 编辑 ] CH451驱动8个数码管,只能显示8个一样的怎么回事啊?显示01234567时不正确,数码管段全亮,还不均匀。

电路图没有什么就是 451的段驱动按顺序接的数码管的段,位选按顺序接的各个数码管的公共极

见下面while(1)。
#include<reg52.h>
#define uhar unsigned char
#define uint unsigned int
#define CH451_DIG0 0x0800                      //数码管位0显示
#define CH451_DIG1 0x0900                      //数码管位1显示
#define CH451_DIG2 0x0a00                      //数码管位2显示
#define CH451_DIG3 0x0b00                      //数码管位3显示
#define CH451_DIG4 0x0c00                      //数码管位4显示
#define CH451_DIG5 0x0d00                      //数码管位5显示
#define CH451_DIG6 0x0e00                      //数码管位6显示
#define CH451_DIG7 0x0f00                      //数码管位7显示
sbit ch451_load=P1^5;
sbit ch451_din=P1^6;
sbit ch451_dclk=P1^7;
sbit ch451_dout=P3^3;
unsigned char code NUMTAB[16]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0x88,0x83,0xC6,0xA1,0x86,0x8E};
unsigned int code CH451_DIG[8]={0x0800,0x0900,0x0A00,0x0B00,0x0C00,0x0D00,0x0E00,0x0F00};
void led_shift();
void delay(uint z);
/********************************************************************

函 数 名:ch451_init()
功    能:对ch451芯片进行初始化

********************************************************************/
void ch451_init()
{
ch451_din=0;                                            //先低后高,选择4线输入
ch451_din=1;
ch451_load=1;
ch451_dclk=1;
}

/********************************************************************

函 数 名:ch451_write()
功    能:把12位的指令或数据写入ch451
说    明:12位数据或指令的写入顺序是低位         
********************************************************************/
void ch451_write(uint command)
{
unsigned char i;
ch451_load=0;                                               //命令开始
for(i=0;i<12;i++)
{                                                                     //送入12位数据,低位在前
  ch451_din=command&1;
  ch451_dclk=0;                                          
  command>>=1;
  ch451_dclk=1;                                              //上升沿有效
}                                                                  
ch451_load=1;                                              //加载数据
}

void main()
{
unsigned char i,j;
ch451_init();
ch451_write(0x201);
ch451_write(0x403);                                    
ch451_write(0x500);                                   

while(1)
{
for(j=0;j<16;j++)
        {
                for(i=0;i<8;i++)
                     {
                 ch451_write(CH451_DIG[i]|NUMTAB[j]);//此处NUMTAB[j]改为NUMTAB[i]就显示不对了//////////////////////////////////////////
                 }
       delay(920);
        }               

}
}

/********************************************************************
? ? ?:delay()
?    ?:?????         
********************************************************************/

void delay(uint z)
{
uint x,y;
for(x=100;x>0;x--)
  for(y=z;y>0;y--);
}

已找到问题。焊板子的把数码管焊错了!
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。