求教STC12C5A60S2+12864OLED+DS18B20无法显示温度(附件有KEIL工程)新人小白,代码是拼的,搞不好了希望在这里能得到帮助,怎么搞都没法显示温度,真心求教。下图是运行时照片,后面那个小点是乱码不知是什么鬼。
MAIN.c #include "lq12864.h" #include "ds18b20.h" #include "REG52.h"
/**********************************定义变量*********************************/
unsigned int Temp_Buffer = 0;
/********************(STC12C5608AD 11MHZ z=1时精确延时1ms)*******************/ void delayms(unsigned int z) { unsigned int x,y; for(x=z; x>0; x--) for(y=1848; y>0; y--); }
/*****************************************显示温度****************************/ void Display_Temp() { Temp_Buffer = Get_temp(); //读取DS18B20的值 LCD_WrCmd(0x80+0x40+10); if(flag_temper == 1) //根据温度标志位显示温度正负 { LCD_WrDat('-'); } if( Temp_Buffer/1000 != 0 ) //如果第一位为0,忽略显示 { LCD_WrDat(Temp_Buffer/1000+0X30); //显示温度百位值 } LCD_WrDat(Temp_Buffer%1000/100+0X30); //显示温度十位值 LCD_WrDat(Temp_Buffer%100/10+0X30); //显示温度个位值 LCD_WrDat('.'); //显示小数点 LCD_WrDat(Temp_Buffer%10+0X30); //显示温度十分位值 LCD_WrDat('C'); //显示字符C } /***********************************主函数**********************************/ void main() { unsigned char i; LCD_Init(); //OLED初始化
LCD_P8x16Str(0,3,"Wellcome to use!"); //显示欢迎界面 delayms(1000); //延时 LCD_CLS(); //清屏 Temp_Buffer = Get_temp(); //读取DS18B20的值 delayms(500);
while(1) { for(i=0; i<8; i++) {LCD_P16x16Ch(i*16,0,i); //点阵显示 } LCD_P16x161Ch(0,2,0); LCD_P16x161Ch(16,2,1); LCD_P16x161Ch(32,2,2); LCD_P16x161Ch(48,2,3); LCD_P16x161Ch(64,2,4); Display_Temp(); //获取并显示温度值 } } 这里红色部分的LCD_WrDat和LCD_WrDat以及后面跟的参数我真的不理解,他们的定义在LQ12864.c里,下面我贴出来:
/*********************LCD写数据************************************/
void LCD_WrDat(unsigned char dat)
{
unsigned char i=8;
LCD_DC=1;
for(i=0;i<8;i++) //发送一个八位数据
{
LCD_SCL=0;
LCD_SDA=dat&0x80;
LCD_SCL=1;
dat<<=1;
}
}
/*********************LCD写命令************************************/
void LCD_WrCmd(unsigned char cmd)
{
unsigned char i=8;
LCD_DC=0;
for(i=0;i<8;i++) //发送一个八位数据
{
LCD_SCL=0;
LCD_SDA=cmd&0x80;
LCD_SCL=1;
cmd<<=1;;
}
}
不知道问题出在哪儿,小白虚心求教,也可能原因跟上面这些没有关系,下面我把Keil工程文件上传上来,希望各位大大能帮下小弟,虚心求教
stc51 ds18b20 oled.rar
(55.06 KB, 下载次数: 151)
|