打印

请教C源码问题,TMS320F2812驱动PCF8576,用于液晶显示(附电路图)

[复制链接]
5404|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
fmcok|  楼主 | 2008-7-20 18:06 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
#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


static    uchar    Digit[5];    //数据发送缓冲区
static    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;
    delay_us(10);
    SCL = 1;
    delay_us(50);
    SDA = 0;
    delay_us(50);
    SCL = 0 ;
}

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

void sendbyte(uchar ch)
{
    uchar i;
    uchar temp = ch;
    

    EALLOW;
    SDADIR = 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 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 senddata(){
    uchar i;
        
    start();
    sendbyte( 0x70 );        //工作方式
    if( F0 == 1 ) return;
    sendbyte( 0x80 );        //子地址
    if( F0 == 1 ) return;
    sendbyte( 0xC8 );        //工作模式
    if( F0 == 1 ) return;    
    for( i=0 ; i<5 ; i++ ) {
        sendbyte( Digit ) ;
        if( F0 == 1 ) return;        
            
    }
    stop();
    delay_us(5000);    
}

void test_lcd()
{
    Digit[0]=0x71;    //闪烁方式
    Digit[1]=0x7E;    //0
    Digit[2]=0x18;    //1
    Digit[3]=0xB6;    //2
    Digit[4]=0xBC;    //3

    senddata();
}

相关帖子

沙发
fmcok|  楼主 | 2008-7-20 18:07 | 只看该作者

通用IO口模拟I2C总线

使用特权

评论回复
板凳
snakeemail| | 2008-7-20 19:37 | 只看该作者

冷静,仔细看资料,定有结果

使用特权

评论回复
地板
fmcok|  楼主 | 2008-7-20 21:04 | 只看该作者

调试一天了,还没通过。???

使用特权

评论回复
5
fmcok|  楼主 | 2008-7-21 08:59 | 只看该作者

最新进展

LCD的COM口接地有问题,将它与PC8576背极输出BP1,BP2连接,但写入命令时有问题,    sendbyte( 0x70 );        //器件地址
    if( F0 == 1 ) return;
    sendbyte( 0xCD );        //工作模式
    if( F0 == 1 ) return;    
    sendbyte( 0x10 );        //数据指针
    if( F0 == 1 ) return;    
    sendbyte( 0x73 );        //闪烁方式
    if( F0 == 1 ) return;    
前三个命令正常,闪烁方式0x73写入后无应答。

使用特权

评论回复
6
fmcok|  楼主 | 2008-7-21 23:33 | 只看该作者

有人回答吗?多谢。

使用特权

评论回复
7
fmcok|  楼主 | 2008-7-22 17:59 | 只看该作者

终于搞定了,对这个论坛真有些失望!

终于搞定了,对这个论坛真有些失望!

使用特权

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

本版积分规则

30

主题

55

帖子

0

粉丝