📄 lcd.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 + -