1
完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
扫一扫,分享给好友
我在用lcd读取ds18b20的序列号 改变了lcd的管脚 我的序列号就读不出来了 求大神帮忙解答/****************************************Copyright (c)************************************************** ********************************************************************************************************/ #include "LPC21xx.H" #define uint unsigned int //数据类型定义 #define uchar unsigned char #define LCM_RS (1<<24) #define LCM_RW (1<<25) #define LCM_E (1<<26) #define DQ (1<<31) //定义DS18B20通信端口 unsigned char ***flag=0; //温度正负标志 unsigned char err; //DS18B20检测标志 unsigned char Terr[]={"T-Err"}; unsigned char temp_value,temp_value2; //温度值 unsigned char save_number[8]; #define nop() {__asm("nop");} /**************************************************************************** * 名称:ChkBusy() * 功能:检查总线是否忙 ****************************************************************************/ void ChkBusy() { int status; IO1DIR=0x7000000; //0111 0000 0000 0X00等于输人 do { IO1CLR|=LCM_RS; IO1SET|=LCM_RW; IO1SET|=LCM_E; nop();nop();nop();nop(); status = IO1PIN; IO1CLR |= LCM_E; } while (status & 0x800000); IO1DIR=0x7ff0000; //0X00等于输出 } /**************************************************************************** * 名称:WC_Lcd() * 功能:写函数 ****************************************************************************/ void WC_Lcd(unsigned char dat) { ChkBusy(); IO1CLR|=LCM_RS; //全部清零 IO1CLR|=LCM_RW; IO1CLR=0xff0000; //先清零 IO1SET|=(dat<<16); //再送数 nop();nop();nop();nop(); IO1SET|=LCM_E; IO1CLR|=LCM_E; } /**************************************************************************** * 名称:WD_Lcd() * 功能:写数据函数 ****************************************************************************/ void WD_Lcd(unsigned char dat) { ChkBusy(); IO1SET|=LCM_RS; IO1CLR|=LCM_RW; IO1CLR=0xff0000; //先清零 IO1SET|=(dat<<16); //再送数 nop();nop();nop();nop(); IO1SET|=LCM_E; IO1CLR|=LCM_E; } /***************************************************** 函 数 名:LCD_Mychar() 功 能:自定义字符--CGRAM 说 明:LCD1602字符库中没有温度符号,自定义温度符号 ******************************************************/ void LCD_Mychar(void) { //---------自定义字符代码--01H-------温度符号------------ WC_Lcd(0x48); //第1行 WD_Lcd(0x02); // WC_Lcd(0x49); //第2行 WD_Lcd(0x05); // WC_Lcd(0x4A); //第3行 1------**-- WD_Lcd(0x05); // 2----**--** WC_Lcd(0x4B); //第4行 3----**--** WD_Lcd(0x02); // 4------**-- WC_Lcd(0x4C); //第5行 5---------- WD_Lcd(0x00); // 6---------- WC_Lcd(0x4D); //第6行 7---------- WD_Lcd(0x00); // 8---------- WC_Lcd(0x4E); //第7行 WD_Lcd(0x00); // WC_Lcd(0x4F); //第8行 WD_Lcd(0x00); // } /**************************************************************************** * 名称:lcd_init() * 功能:lcd初始化函数 ****************************************************************************/ void lcd_init(void) { WC_Lcd(0x38); WC_Lcd(0x06); WC_Lcd(0x0c); LCD_Mychar(); // 写入自定义字符,代码01 } /**************************************************************************** * 函数名称:DisText() * 函数功能:显示文本 * 入口参数:addr 1602 DDRAM地址,*p 显示文本数据指针 ****************************************************************************/ void DisText(unsigned char addr,unsigned char *p){ WC_Lcd(addr); while(*p !=' |