网站大量收购独家精品文档,联系QQ:2885784924

PCF8591模数转换及1602LCD显示应用程序.doc

  1. 1、本文档共7页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 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)

ligennv1314 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档