PCF8591
环境:
软件:
芯片
仿真图
相关函数编写电平时
代码
1602
头文件
#include<reg51.h>
#include<intrins.h>
#include<string.h>
宏定义
sbit RS = P2^0;
sbit RW = P2^1;
sbit EN = P2^2;
初始化
void init()
{
write_cmd(0x38);
write_cmd(0x01);
write_cmd(0x06);
write_cmd(0x0C);
}
检测BF(busy flag)位状态
void test_BF()
{
unsigned char LCD_status;
do{
P0 = 0xFF;
EN = 0; RS = 0; RW = 1;
EN=1;
LCD_status = P0;
_nop_(); _nop_();
EN = 0;
}while(LCD_status&0x80);
}
写数据
void write_data(unsigned char data8)
{
test_BF();
EN = 0; RS = 1; RW = 0;
P0 = data8;
EN = 1; _nop_(); EN = 0;
}
写命令
void write_cmd(unsigned char cmd8)
{
test_BF();
EN = 0; RS = 0; RW = 0;
P0 = cmd8;
EN = 1; _nop_(); EN = 0;
}
写字符串
void write_str(int r, int c, char *str)
{
int i=0;
unsigned char Addressx[] = {0x80, 0xC0};
unsigned char StartAdd = (Addressx[r] | c);
write_cmd(StartAdd);
for(i = 0; i < 16; i++){
if(str[i]==0) break;
write_data(str[i]);
}
for(;i < 16; i++){
write_data(' ');
}
}
LCD1602.c
#include<reg51.h>
#include<intrins.h>
#include<string.h>
sbit RS = P1^0;
sbit RW = P1^1;
sbit EN = P1^2;
void delay_ms(int ms)
{
while(ms--){
int i = 100;
while(i--){}
}
}
void test_BF()
{
delay_ms(20);
}
void write_data(unsigned char data8)
{
test_BF();
EN = 0; RS = 1; RW = 0;
P2 = data8;
EN = 1; _nop_(); EN = 0;
}
void write_cmd(unsigned char cmd8)
{
test_BF();
EN = 0; RS = 0; RW = 0;
P2 = cmd8;
EN = 1; _nop_(); EN = 0;
}
void LcdShowStr(int r, int c, char *str)
{
int i=0;
unsigned char Addressx[] = {0x80, 0xC0};
unsigned char StartAdd = (Addressx[r] | c);
write_cmd(StartAdd);
while (*str != '\0')
{
write_data(*str++);
}
}
void InitLcd1602()
{
write_cmd(0x38);
write_cmd(0x01);
write_cmd(0x06);
write_cmd(0x0C);
}
IIC.h
#include<intrins.h>
sbit SCL = P3^6;
sbit SDA = P3^7;
void iic_Delay() {_nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_();}
void iic_Start()
{
SCL = 1;
SDA = 1;
iic_Delay();
SDA = 0;
iic_Delay();
SCL = 0;
}
void iic_Stop()
{
SCL = 0;
SDA = 0;
iic_Delay();
SCL = 1;
iic_Delay();
SDA = 1;
iic_Delay();
}
bit iic_SendByte(unsigned char byt)
{
bit ack = 0;
unsigned char mask;
for(mask=0x80;mask!=0;mask>>=1)
{
if((byt&mask) == 0)
SDA = 0;
else
SDA = 1;
iic_Delay();
SCL = 1;
iic_Delay();
SCL = 0;
}
SDA = 1;
iic_Delay();
SCL = 1;
ack = SDA;
iic_Delay();
SCL = 0;
return ack;
}
unsigned char iic_readNAK()
{
unsigned char mask;
unsigned char dat;
SDA = 1;
SCL = 0;
for(mask=0x80;mask!=0;mask>>=1)
{
iic_Delay();
SCL = 1;
if(SDA == 1) dat |= mask;
else dat &= (~mask);
iic_Delay();
SCL = 0;
}
SDA = 1;
iic_Delay();
SCL = 1;
iic_Delay();
SCL = 0;
return dat;
}
unsigned char iic_readACK()
{
unsigned char mask;
unsigned char dat;
SDA = 1;
SCL = 0;
for(mask=0x80;mask!=0;mask>>=1)
{
iic_Delay();
SCL = 1;
if(SDA == 1) dat |= mask;
else dat &= (~mask);
iic_Delay();
SCL = 0;
}
SDA = 0;
iic_Delay();
SCL = 1;
iic_Delay();
SCL = 0;
return dat;
}
详情代码 点击下载