- 1、本文档共7页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
PCF8591模数转换及1602LCD显示应用程序
#include reg51.h
#include intrins.h
#define uchar unsigned char
#define uint unsigned int
#define Delay4us() {_nop_();_nop_();_nop_();_nop_();}
//引脚定义
sbit LCD_RS=P2^0;
sbit LCD_RW=P2^1;
sbit LCD_EN=P2^2;
//延时子程序
void DelayMS(int ms) {
uchar t;
while(ms--) for(t=0;t120;t++);
}
//LCD忙状态检测
bit LCD_Busy_Check() {
bit Result;
LCD_RS=0;LCD_RW=1;
LCD_EN=1; Delay4us(); Result=(bit)(P0 0x80);
LCD_EN=0;
return Result;
}
//写LCD命令
void LCD_Write_Command(uchar cmd) {
// while(LCD_Busy_Check());
DelayMS(5);
LCD_RS=0; LCD_RW=0;LCD_EN=0; _nop_();_nop_();
P0=cmd;Delay4us();
LCD_EN=1;Delay4us();LCD_EN=0;
}
//写LCD数据
void LCD_Write_Data(uchar dat) {
// while(LCD_Busy_Check()); //LCD是否忙?
DelayMS(5);
LCD_RS=1; LCD_RW=0; LCD_EN=0; P0=dat; Delay4us();
LCD_EN=1;Delay4us();LCD_EN=0;
}
//LCD初始化
void LCD_Initialise()
{
LCD_Write_Command(0x38);DelayMS(5); //设置16*2行显示,5*7点阵,8位数据接口
LCD_Write_Command(0x0C);DelayMS(5); //开显示
LCD_Write_Command(0x06);DelayMS(5); //地址指针加1,光标加1,整屏显示不移动
LCD_Write_Command(0x01);DelayMS(5); //指针清零,显示清零
}
sbit SCL=P1^0;
sbit SDA=P1^1;
uchar Recv_Buffer[4]; //数据接收缓冲(每通道1字节)
uint Voltage[]={0,0,0}; //数据分解为电压x.xx
bit bdata IIC_ERROR; //设置I2C错误标志位
uchar LCD_Line_1[]={1- . V 2- . V};
uchar LCD_Line_2[]={3- . V 4- . V};
void LCD_Set_Position(uchar pos) { //设置LCD显示位置
LCD_Write_Command(pos|0x80);
}
void LCD_Display_A_Line(uchar Line_Addr,uchar s[]) { //显示一行
uchar i;
LCD_Set_Position(Line_Addr);
for(i=0;i16;i++); LCD_Write_Data(s[i]);
}
//将模数转换后的值分解存入缓冲
void Convert_To_Voltage(uchar val) {
uchar tmp;
Voltage[2]=val/51+0; //最大值为255,对应5伏电压,分度为255/5=51,一位整数
tmp=val%51*10;
Voltage[1]=tmp/51+0; //第一位小数
tmp=tmp%51+0;
Voltage[0]=tmp/51+0; //第二位小数
}
//启动I2C总线
void IIC_Start() {
SDA=1; SCL=1; Delay4us(); SDA=0; Delay4us(); SCL=0;
}
//停止I2C总线
void IIC_Stop() {
SDA=0; SCL=1; Delay4us(); SDA=1; Delay4us(); SCL=0;
}
//从机发送应答
void Slave_Ark() {
SDA=0; SCL=1; Delay4us(); SCL=0; SDA=1;
}
//从机发送非应答
void
文档评论(0)