#include #include #define uint unsigned int #define uchar unsigned char uchar code digit[10]={"0123456789"}; //定义字符数组显示数字 unsigned char code Temp[]={"Temp:"}; //说明显示的是温度 unsigned char code Cent[]={"Cent"}; //温度单位 sbit DS=P1^1; sbit rs=P1^0; sbit rw=P1^1; sbit en=P1^2; uchar TH,TL,TN,TD; //uint temp; //uchar code table[]={"temp"}; void delay(uint sum) //延时函数 { uint i; for(i=sum;i>0;i--) _nop_(); } void begin(void) //初始化 { uint i=4; DS=0; delay(720); DS=1; while(i>0) i--; } void write(uchar dat) //写数据 { uint i=0; uchar j; bit testb; for(j=1;j<=8;j++) { testb=dat&0x01; dat=dat>>1; if(testb) { DS=0; i++;i++; DS=1; delay(50); } else { DS=0; delay(60); DS=1; i++;i++; } } } bit readbit(void) //读取一位 { uint i; bit dat; DS=0; i++; DS=1; i++;i++; dat=DS; delay(50); return(dat); } uchar read(void) //读取一个字节 { uint i; uchar j,dat; for(i=1;i<=8;i++) { j=readbit(); dat=(j<<7)|(dat>>1); } return(dat); } void wenduchange() //温度转换 { begin(); delay(1); write(0xcc); write(0x44); delay(100); } wendu() //读取温度数值 { // float tempp; begin(); delay(1); write(0xcc); write(0xbe); // TL=read(); // TH=read(); // temp=TH; // temp<<=8; // temp=temp|TL; // tempp=temp*0.0625; // temp=tempp*10+0.5; // return temp; } void write_date(uchar date) { rs=1; rw=0; P0=date; delay(1000); en=1; delay(1000); en=0; } void write_com(uint com) { rs=0; rw=0; P0=com; delay(1000); en=1; delay(1000); en=0; } void init() { en=0; write_com(0x38); write_com(0x0e); write_com(0x06); write_com(0x01); // write_com(0x80+0x10); } void display_symbol(void) //显示温度字符 { uint num; write_com(0x80); for(num=0;num<4;num++) { write_date(Temp[num]); } } void display_cent(void) //显示温度单位 { uint num; write_com(0x80+0x0b); for(num=0;num<4;num++) { write_date(Cent[num]); } } void display_dot() //显示温度小数点 { write_com(0x80+0x08); write_date('.'); } void display_temp1(uchar x) //显示温度整数部分 { uchar j,k,l; j=x/100; k=(x%100)/10; l=x%10; write_com(0x80+0x05); write_date(digit[j]); write_date(digit[k]); write_date(digit[l]); delay(50000); } void display_temp2(uchar x) //显示温度小数部分 { write_com(0x80+0x09); write_date(digit[x]); delay(1000); } void main() { // uchar TH,TL,TN,TD; init(); delay(5000); display_symbol(); display_dot(); display_cent(); while(1) { wenduchange(); wendu(); TL=read(); TH=read(); TN=TH*16+TL/16; TD=(TL%16)*10/16; display_temp1(TN); //显示温度的整数部分 display_temp2(TD); //显示温度的小数部分 delay(1000); } }
运行结果
刚刚学习温度检测并用1602液晶显示,调试时有警告“missing return value”,不知怎么改,求大神指导··········