⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 lcd.c

📁 TMS320F2812模拟I2C总线驱动PCF8576
💻 C
字号:
/* ==============================================================================
System Name:  	witabb
File Name:		lcd.c
Description:	lcd液晶显示-PCF8576
Author:			fangmc
 ==============================================================================*/

#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[i] ) ;
		if( F0 == 1 ) return;		
			
	}
	stop();
	delay_us(5000);	
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -