OpenVINOTM,给你看得见的未来!>>
电子产品世界 » 论坛首页 » 综合技术 » 基础知识 » SPI,ch451 晕了,SPI口如此难调?谁用过数码管驱动芯片ch451?

共3条 1/1 1 跳转至

SPI,ch451 晕了,SPI口如此难调?谁用过数码管驱动芯片ch451?

院士
2006-12-22 22:43:00    评分
SPI,ch451 晕了,SPI口如此难调?谁用过数码管驱动芯片ch451?



关键词: ch451     晕了     如此     难调     用过     数码     驱动         

院士
2006-12-22 22:43:00    评分
2楼
问  数码管驱动芯片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线串行接口与单片机等交换数据;并且提供上电复位和看门狗等监控功能。

助工
2014-12-02 15:53:19    评分
3楼

哈哈,8年前的帖子被俺翻了出来,居然是jackwang 发的贴,估计王总还是没调出来,我马上要写CH451的驱动了,王总保佑我一切顺利,阿门


共3条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]