您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > 基于51单片机的12864显示温度(ds18b20)
#ifndef__LCD12864_H#define__LCD12864_H//---包含头文件---//#includereg51.h//---重定义关键词---//#ifndefuchar#defineucharunsignedchar#endif#ifndefuint#defineuintunsignedint#endif//---如果使用画图模式定义这个---//#defineLCD12864_PICTURE//---定义使用的IO口---//#defineLCD12864_DATAPORTP1//数据IO口sbitLCD12864_RS=P2^6;//(数据命令)寄存器选择输入sbitLCD12864_RW=P2^5;//液晶读/写控制sbitLCD12864_EN=P2^7;//液晶使能控制sbitLCD12864_PSB=P3^2;//串/并方式控制sbitLCD12864_RST=P3^4;//复位端//---声明全局函数---//voidLCD12864_Delay1ms(uintc);ucharLCD12864_Busy(void);voidLCD12864_WriteCmd(ucharcmd);voidLCD12864_WriteData(uchardat);voidLCD12864_Init();voidLCD12864_ClearScreen(void);voidLCD12864_SetWindow(ucharx,uchary);voidLCD12864_DrowPic(uchar*a);voidLCD12864_DrowPoint(ucharx,uchary);#endif#ifndef__TEMP_H_#define__TEMP_H_#includereg51.h//---重定义关键词---//#ifndefuchar#defineucharunsignedchar#endif#ifndefuint#defineuintunsignedint#endif//--定义使用的IO口--//sbitDSPORT=P3^3;//--声明全局函数--//voidDelay1ms(uint);ucharDs18b20Init();voidDs18b20WriteByte(ucharcom);ucharDs18b20ReadByte();voidDs18b20ChangTemp();voidDs18b20ReadTempCom();intDs18b20ReadTemp();#endif#includelcd12864.h/********************************************************************************函数名:LCD12864_Delay1ms*函数功能:延时1MS*输入:c*输出:无*******************************************************************************/voidLCD12864_Delay1ms(uintc){uchara,b;for(;c0;c--){for(b=199;b0;b--){for(a=1;a0;a--);}}}/********************************************************************************函数名:LCD12864_Busy*函数功能:检测LCD是否忙*输入:无*输出:1或0(1表示不忙,0表示忙)*******************************************************************************/ucharLCD12864_Busy(void){uchari=0;LCD12864_RS=0;//选择命令LCD12864_RW=1;//选择读取LCD12864_EN=1;LCD12864_Delay1ms(1);while((LCD12864_DATAPORT&0x80)==0x80)//检测读取到的值{i++;if(i100){LCD12864_EN=0;return0;//超过等待时间返回0表示失败}}LCD12864_EN=0;return1;}/********************************************************************************函数名:LCD12864_WriteCmd*函数功能:写命令*输入:cmd*输出:无*******************************************************************************/voidLCD12864_WriteCmd(ucharcmd){uchari;i=0;while(LCD12864_Busy()==0){LCD12864_Delay1ms(1);i++;if(i100){return;//超过等待退出}}LCD12864_RS=0;//选择命令LCD12864_RW=0;//选择写入LCD12864_EN=0;//初始化使能端LCD12864_DATAPORT=cmd;//放置数据LCD12864_EN=1;//写时序LCD12864_Delay1ms(1);LCD12864_EN=0;}/********************************************************************************函数名:LCD12864_WriteData*函数功能:写数据*输入:dat*输出:无*******************************************************************************/voidLCD12864_WriteData(uchardat){uchari;i=0;while(LCD12864_Busy()==0){LCD12864_Delay1ms(1);i++;if(i100){return;//超过等待退出}}LCD12864_RS=1;//选择数据LCD12864_RW=0;//选择写入LCD12864_EN=0;//初始化使能端LCD12864_DATAPORT=dat;//放置数据LCD12864_EN=1;//写时序LCD12864_Delay1ms(1);LCD12864_EN=0;}/********************************************************************************函数名:LCD12864_ReadData*函数功能:读取数据*输入:无*输出:读取到的8位数据*******************************************************************************/#ifdefLCD12864_PICTUREucharLCD12864_ReadData(void){uchari,readValue;i=0;while(LCD12864_Busy()==0){LCD12864_Delay1ms(1);i++;if(i100){return0;//超过等待退出}}LCD12864_RS=1;//选择命令LCD12864_RW=1;LCD12864_EN=0;LCD12864_Delay1ms(1);//等待LCD12864_EN=1;LCD12864_Delay1ms(1);readValue=LCD12864_DATAPORT;LCD12864_EN=0;returnreadValue;}#endif/********************************************************************************函数名:LCD12864_Init*函数功能:初始化LCD12864*输入:无*输出:无*******************************************************************************/voidLCD12864_Init(){LCD12864_PSB=1;//选择并行输入LCD12864_RST=1;//复位LCD12864_WriteCmd(0x30);//选择基本指令操作LCD12864_WriteCmd(0x0c);//显示开,关光标LCD12864_WriteCmd(0x01);//清除LCD12864的显示内容}/********************************************************************************函数名:LCD12864_ClearScreen*函数功能:在画图模式下,LCD12864的01H命令不能清屏,所以要自己写一个清**屏函数*输入:无*输出:无*******************************************************************************/#ifdefLCD12864_PICTUREvoidLCD12864_ClearScreen(void){uchari,j;LCD12864_WriteCmd(0x34);//开启拓展指令集for(i=0;i32;i++)//因为LCD有纵坐标32格所以写三十二次{LCD12864_WriteCmd(0x80+i);//先写入纵坐标Y的值LCD12864_WriteCmd(0x80);//再写入横坐标X的值for(j=0;j32;j++)//横坐标有16位,每位写入两个字节的的数据,也{//就写入32次以为当写入两个字节之后横坐标会自LCD12864_WriteData(0x00);//动加1,所以就不用再次写入地址了。}}LCD12864_WriteCmd(0x36);//0x36扩展指令里面打开绘图显示LCD12864_WriteCmd(0x30);//恢复基本指令集}#endif/********************************************************************************函数名:LCD12864_SetWindow*函数功能:设置在基本指令模式下设置显示坐标。注意:x是设置行,y是设置列*输入:x,y*输出:无*******************************************************************************/voidLCD12864_SetWindow(ucharx,uchary){ucharpos;if(x==0)//第一行的地址是80H{x=0x80;}elseif(x==1)//第二行的地址是90H{x=0x90;}elseif(x==2)//第三行的地址是88H{x=0x88;}elseif(x==3){x=0x98;//第4行的地址是98H}pos=x+y;LCD12864_WriteCmd(pos);}/********************************************************************************函数名:LCD12864_ClearScreen*函数功能:在画图模式下,LCD12864的01H命令不能清屏,所以要自己写一个清**屏函数*输入:无*输出:无*****************************************************************************
本文标题:基于51单片机的12864显示温度(ds18b20)
链接地址:https://www.777doc.com/doc-2567798 .html