按照pdf上的方法用ch454驱动16位数码管,居然点不亮,请教各位大虾。

郁闷呀 供电正常,排除硬件问题,sda时序数据完全正常,clk正常。

//初始化子程序 void Init_Led(void)

{ //Initialise GPIO pin to general gpio EALLOW; GpioMuxRegs.GPFMUX.bit.MFSXA_GPIOF10 = 0; //RST GpioMuxRegs.GPFDIR.bit.GPIOF10 = 1; GpioMuxRegs.GPFMUX.bit.MDXA_GPIOF12 = 0; //SCLK GpioMuxRegs.GPFDIR.bit.GPIOF12 = 1; GpioMuxRegs.GPFMUX.bit.MDRA_GPIOF13 = 0; //SDA GpioMuxRegs.GPFDIR.bit.GPIOF13 = 1; EDIS; //Initialise the chip ch454; RST=1; DSP28x_usDelay(200); RST=0; DSP28x_usDelay(1); SDA=1; DSP28x_usDelay(1); SCL=1; SendLedData(CH454_RESET); //软复位 SendLedData(CH454_SYSPARA(0x0049)); // 配置系统参数 SendLedData(CH454_DISPARA(0x002A)); //显示参数 SendLedData(CH454_TWINKING(0x0000)); //闪烁参数

}

//发送数据的程序 void SendLedData(Uint16 data) { Uint8 i; DINT; SDA=1; DSP28x_usDelay(1); SCL=1; DSP28x_usDelay(1);

// SDA=0;

DSP28x_usDelay(1); SCL=0; DSP28x_usDelay(1); for(i=0;i < 8;i++) { if(data & 0x8000) { SDA = 1;} else { SDA = 0;}

data = data << 1; DSP28x_usDelay(1); SCL=1; DSP28x_usDelay(1); SCL=0; DSP28x_usDelay(1); }

DSP28x_usDelay(1); SCL=1; DSP28x_usDelay(1); SCL=0; DSP28x_usDelay(1); for(;i < 16;i++) { if(data & 0x8000) { SDA = 1;} else { SDA = 0;}

data = data << 1; DSP28x_usDelay(1); SCL=1; DSP28x_usDelay(1); SCL=0; DSP28x_usDelay(1); } DSP28x_usDelay(1); SCL=1; DSP28x_usDelay(1); SCL=0; DSP28x_usDelay(1); SDA=0; DSP28x_usDelay(1); SCL=1; DSP28x_usDelay(1); SDA=1;

EINT; }


最后是简化版的main void main() { Init_Led(); for(;;) { SendLedData(0x5030); //发送A的低位 SendLedData(0x60FC); //发送A的高位 SendLedData(0x5030); //发送A的低位 SendLedData(0x60FC); //发送A的高位

} }

大虾帮我看下程序哪儿出问题了 万分多谢


发个例子程序给您参考一下: 两线接口操作CH454动态驱动数码管(C51)

UploadImages/20113288384242.rar


下雨的天你好 有以下疑惑请教,以下代码从你给我的txt中考出来的 #define CH454_RESET 0x0201 // 复位 #define CH454_CLR_BIT 0x0180 // 段位 …………

定义似乎和pdf文档不符,文档中给出的是 芯片内部复位:000100-00000001B,字节1的位15和位14固定为0和1 所以编码应该是01000100-00000001B 即0x4401,为何你定义为0x0201,不解,基本上所用编码都和pdf上不同,不明白

第二个问题, // 2线接口的CH454定义 #define CH454_I2C_ADDR 0x40 //

CH454的地址 #define CH454_I2C_MASK 0x3E //

CH454的2线接口高字节命令掩码

这段完全不明白!?文档中未见相关说明

说明一下,我使用的是dsp2812,这边的型号是ch454d


请求解释


还有就是我的sda引脚是单向输出,如何处理ack信号


你也可以按照手册中的命令发送,前提是数据一定要正确,我们这样写是考虑到和其他芯片兼容,其实最后算出来也就是手册中的命令,具体你可以算一下。 另外,CH454没有ACK,所以你无须等待ACK,发送完后直接拉高SDA就可以。


下雨的天你好 向你请教 不显示的问题我已经解决,但是不管是初始化,还是发送数据,都必须放在循环中不停的发才可以显示,也就是必须不停的刷新,求教为何?


请检查以下部分: 1.去掉程序中的复位命令; 2.检查你的电源系统,尤其是如何给CH454供电的,如果供电的线太细,容易引起CH454复位。


只有登录才能回复,可以选择微信账号登录