共3条
1/1 1 跳转至页
SPI,ch451 晕了,SPI口如此难调?谁用过数码管驱动芯片ch451?

问
数码管驱动芯片CH451L,SPI驱动方式,以为可以轻松使用,没料到死活调不出来!单片机为MEGA8,DIN---MOSI,DCLK----CLK,LOAD----SS.数据从CH451的DIN管脚串行进入,LOAD管脚低脉冲使CH451开始加载数据,不知道程序有什么问题?有用过CH451的,可否帖个程序,给个点拨啊,多谢!
把我驱动CH451的部分帖出来:
#include <iom8v.h>
#include <macros.h>
#define MOSI 3
#define SS 2
#define SCK 5
#define TOV1 2
void port_init(void)
{
PORTB = 0xFF;
DDRB = 0xEE;
PORTC = 0x7F; //m103 output only
DDRC = 0x00;
PORTD = 0xFF;
DDRD = 0x0F; //PD5,PD6,PD7为输入,PD3输出,
}
void din_pulse(void)
{
PORTB|=(1<<MOSI);
NOP();
NOP();
NOP();
NOP();
PORTB&=0xf7;
NOP();
NOP();
NOP();
NOP();
PORTB|=(1<<MOSI); //DIN管脚低脉冲选择CH451为4线方式
NOP();
}
void load_pulse(void)
{
PORTB&=0xfb;
PORTB|=(1<<SS); //上升沿使CH451加载数据
NOP();
}
void driveled_init(void)
{
DDRB=(1<<MOSI)|(1<<SCK)|(1<<SS);
SPCR=(1<<SPE)|(1<<DORD)|(1<<MSTR)|(1<<CPOL);
} //SPI口初始化,主机模式
void driveled(unsigned char cmd)
{
SPDR=cmd;
while(!(SPSR&(1<<SPIF))); //查询方式发送数据
}
void ch451_init(void)
{
din_pulse(); //选择4线方式
driveled_init();
driveled(0x10);
driveled(0x20);
load_pulse(); //送命令字,芯片复位
driveled(0x10);
driveled(0x40);
load_pulse(); //选择led,去掉看门狗,键盘
}
void main(void)
{
port_init();
while(1)
{
ch451_init();
driveled(0xa0);
driveled(0x58); //bcd译码
load_pulse(); //命令CH451加载数据
driveled(0xe0);
driveled(0xf0);
load_pulse(); //在第7位显示e
driveled(0x10);
driveled(0xc0);
load_pulse(); //在第4位显示1
driveled(0xa0);
driveled(0x50);
load_pulse(); //没有bcd译码
driveled(0x70);
driveled(0xe7);
load_pulse(); //在第6位显示r
}
} //显示ERR1
8个数码管甚至连1段都不亮,诸位兄台不吝点拨啊!
答 1: 还是打电话去沁恒问一问我有他的demo 板还没有用过呢 答 2: CH451?请问是什么公司的IC? 答 3: 南京沁恒电子 http://www.winchiphead.com/
CH451是一个整合了数码管显示驱动和键盘扫描控制以及μP监控的多功能外围芯片。CH451内置RC振荡电路,可以动态驱动8位数码管或者64位
LED,具有BCD译码、闪烁、移位等功能;同时还可以进行64键的键盘扫描,CH451通过1线或者可以级联的4线串行接口与单片机等交换数据;并且提供上电复位和看门狗等监控功能。
把我驱动CH451的部分帖出来:
#include <iom8v.h>
#include <macros.h>
#define MOSI 3
#define SS 2
#define SCK 5
#define TOV1 2
void port_init(void)
{
PORTB = 0xFF;
DDRB = 0xEE;
PORTC = 0x7F; //m103 output only
DDRC = 0x00;
PORTD = 0xFF;
DDRD = 0x0F; //PD5,PD6,PD7为输入,PD3输出,
}
void din_pulse(void)
{
PORTB|=(1<<MOSI);
NOP();
NOP();
NOP();
NOP();
PORTB&=0xf7;
NOP();
NOP();
NOP();
NOP();
PORTB|=(1<<MOSI); //DIN管脚低脉冲选择CH451为4线方式
NOP();
}
void load_pulse(void)
{
PORTB&=0xfb;
PORTB|=(1<<SS); //上升沿使CH451加载数据
NOP();
}
void driveled_init(void)
{
DDRB=(1<<MOSI)|(1<<SCK)|(1<<SS);
SPCR=(1<<SPE)|(1<<DORD)|(1<<MSTR)|(1<<CPOL);
} //SPI口初始化,主机模式
void driveled(unsigned char cmd)
{
SPDR=cmd;
while(!(SPSR&(1<<SPIF))); //查询方式发送数据
}
void ch451_init(void)
{
din_pulse(); //选择4线方式
driveled_init();
driveled(0x10);
driveled(0x20);
load_pulse(); //送命令字,芯片复位
driveled(0x10);
driveled(0x40);
load_pulse(); //选择led,去掉看门狗,键盘
}
void main(void)
{
port_init();
while(1)
{
ch451_init();
driveled(0xa0);
driveled(0x58); //bcd译码
load_pulse(); //命令CH451加载数据
driveled(0xe0);
driveled(0xf0);
load_pulse(); //在第7位显示e
driveled(0x10);
driveled(0xc0);
load_pulse(); //在第4位显示1
driveled(0xa0);
driveled(0x50);
load_pulse(); //没有bcd译码
driveled(0x70);
driveled(0xe7);
load_pulse(); //在第6位显示r
}
} //显示ERR1
8个数码管甚至连1段都不亮,诸位兄台不吝点拨啊!
答 1: 还是打电话去沁恒问一问我有他的demo 板还没有用过呢 答 2: CH451?请问是什么公司的IC? 答 3: 南京沁恒电子 http://www.winchiphead.com/
CH451是一个整合了数码管显示驱动和键盘扫描控制以及μP监控的多功能外围芯片。CH451内置RC振荡电路,可以动态驱动8位数码管或者64位
LED,具有BCD译码、闪烁、移位等功能;同时还可以进行64键的键盘扫描,CH451通过1线或者可以级联的4线串行接口与单片机等交换数据;并且提供上电复位和看门狗等监控功能。

3楼
哈哈,8年前的帖子被俺翻了出来,居然是jackwang 发的贴,估计王总还是没调出来,我马上要写CH451的驱动了,王总保佑我一切顺利,阿门
共3条
1/1 1 跳转至页
回复
有奖活动 | |
---|---|
【EEPW电子工程师创研计划】技术变现通道已开启~ | |
发原创文章 【每月瓜分千元赏金 凭实力攒钱买好礼~】 | |
【EEPW在线】E起听工程师的声音! | |
“我踩过的那些坑”主题活动——第001期 | |
高校联络员开始招募啦!有惊喜!! | |
【工程师专属福利】每天30秒,积分轻松拿!EEPW宠粉打卡计划启动! | |
送您一块开发板,2025年“我要开发板活动”又开始了! | |
打赏了!打赏了!打赏了! |
打赏帖 | |
---|---|
多组DCTODC电源方案被打赏50分 | |
【我踩过的那些坑】STM32cubeMX软件的使用过程中的“坑”被打赏50分 | |
新手必看!C语言精华知识:表驱动法被打赏50分 | |
【我踩过的那些坑】杜绑线问题被打赏50分 | |
【我踩过的那些坑】STM32的硬件通讯调试过程的“坑”被打赏50分 | |
【我踩过的那些坑】晶振使用的问题被打赏100分 | |
【我踩过的那些坑】电感选型错误导致的处理器连接不上被打赏50分 | |
【我踩过的那些坑】工作那些年踩过的记忆深刻的坑被打赏10分 | |
【我踩过的那些坑】DRC使用位置错误导致的问题被打赏100分 | |
我踩过的那些坑之混合OTL功放与落地音箱被打赏50分 |