[ 本帖最后由 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--);
}
已找到问题。焊板子的把数码管焊错了!
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
一周热门 更多>