打印

LCD液晶无显示,请高手分析如下源码。(附电路)

[复制链接]
1692|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
fmcok|  楼主 | 2008-7-22 11:49 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
TMS320F2812控制PCF8576,模拟I2C总线,驱动4位数码管LCD,第一次发送收答正常,再次发送无应答。

#include "DSP28_Device.h"

#define uint unsigned int
#define uchar unsigned char

#define SDA GpioDataRegs.GPADAT.bit.GPIOA11
#define SCL GpioDataRegs.GPADAT.bit.GPIOA12
#define    SDADIR    GpioMuxRegs.GPADIR.bit.GPIOA11
#define    SCLDIR    GpioMuxRegs.GPADIR.bit.GPIOA12


uchar    Digit[4];    //数据发送缓冲区

uchar    F0;

void delay_us(uint time)
{
    uint i,j;

    for(i=0 ; i<time ; i++ ) 
        for(j=0 ; j<15; j++ );
    

}

//起始条件    
void start()

    SDA = 1;
    SCL = 1;
    delay_us(50);
    SDA = 0;
    delay_us(50);
    SCL = 0 ;
}

//停止条件
void stop()
{
    SDA = 0 ;
    SCL = 1 ;
    delay_us(50);
    SDA = 1 ;
    delay_us(50);
    SCL = 0 ;
}

void sendbyte(uchar ch)
{
    uchar i;
    uchar temp = ch;
    
    EALLOW;
    SDADIR = 1;
    SCLDIR = 1 ;
    EDIS;

    for(i=0 ; i<8 ; i++ ) {
        if( ( temp&0x80) == 0x80 ) {
            SDA = 1 ;
        }
        else {
            SDA = 0;
        }
        delay_us(10);
        SCL = 1;
        delay_us(50);
        SCL = 0;
        delay_us(20);
        temp = temp<< 1;
    }
    delay_us(1);
    SDA = 1;
    delay_us(1);

    EALLOW;
    SDADIR = 0;
    EDIS;

    SCL = 1;
    delay_us(20);    
    F0 = 0;
    if( SDA == 1) {
        F0 = 1;
    }
    delay_us(10);
    SCL = 0;
    
}

/*
void sendbyte( uchar *ch)
{
    uchar    n = 8;
    uchar    temp;

    EALLOW;
    SDADIR = 1;
    EDIS;
    
    temp = *ch;
    while(n--) {
        if(( temp&0x80) == 0x80) {
            SDA = 1;
            SCL = 1;
            delay_us( 50 );
            SDA = 0;
            SCL = 0;
        }
        else {
            SDA = 0;
            SCL = 1;
            delay_us( 50 );
            SCL = 0;
        }
        temp = temp<<1;
    }
}
*/

    
void clearlcd(void)
{
    start();                //启动I2C 总线
    sendbyte(0x70);        //送器件地址
    sendbyte(0x50);            //显示模式1:1/3偏压、1:4背极、节电方式及清除显示(清屏)
    stop();
                                  
}
                                  
void pcf8576set(void)
{
    start();
    sendbyte(0x70);      //送器件地址
    sendbyte(0x58);        //显示模式2:1/3偏压、1:4背极、节电方式及允许显示
    stop();
}

void test_lcd()
{
    uchar i;
    
    Digit[0]=0xFF;    //0
    Digit[1]=0xFF;    //1
    Digit[2]=0xFF;    //2
    Digit[3]=0xFF;    //3

    start();
    sendbyte( 0x70 );        //器件地址
    if( F0 == 1 ) return;
    sendbyte( 0x80 );        //数据指针
    if( F0 == 1 ) return;        
    sendbyte( 0xCB );        //工作模式:正常功耗、允许显示、1/3偏置、1:3多极
    if( F0 == 1 ) return;    
    sendbyte( 0x73 );        //闪烁方式
    if( F0 == 1 ) return;    

    for( i=0 ; i<4 ; i++ ) {
        sendbyte( Digit ) ;
        if( F0 == 1 ) return;        
            
    }
    stop();
    delay_us(5000);    
}

相关帖子

发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

30

主题

55

帖子

0

粉丝