楼主并没有把代码贴全,我不上后面部分的代码。- /*****************************************************
- 函数功能:显示说明信息
- ***************************************************/
- void display_explain(void)
- {
- unsigned char i;
- WriteAddress(0x00); //写显示地址,将在第1行第1列开始显示
- i = 0; //从第一个字符开始显示
- while(gao[i] != '\0') //只要没有写到结束标志,就继续写
- {
- WriteData(gao[i]); //将字符常量写入LCD
- i++; //指向下一个字符
- delaynms(10); //延时100ms较长时间,以看清关于显示的说明
- }
- }
- void display_explain1(void)
- {
- unsigned char i;
- WriteAddress(0x07); //写显示地址,将在第1行第1列开始显示
- i = 0; //从第一个字符开始显示
- while(di[i] != '\0') //只要没有写到结束标志,就继续写
- {
- WriteData(di[i]); //将字符常量写入LCD
- i++; //指向下一个字符
- delaynms(10); //延时100ms较长时间,以看清关于显示的说明
- }
- }
- void display_explain11(void)
- {
- unsigned char i;
- WriteAddress(0x0e); //写显示地址,将在第1行第1列开始显示
- i = 0; //从第一个字符开始显示
- while(h[i] != '\0') //只要没有写到结束标志,就继续写
- {
- WriteData(h[i]); //将字符常量写入LCD
- i++; //指向下一个字符
- delaynms(10); //延时100ms较长时间,以看清关于显示的说明
- }
- }
- void display_explain111(void)
- {
- unsigned char i;
- WriteAddress(0x0e); //写显示地址,将在第1行第1列开始显示
- i = 0; //从第一个字符开始显示
- while(l[i] != '\0') //只要没有写到结束标志,就继续写
- {
- WriteData(l[i]); //将字符常量写入LCD
- i++; //指向下一个字符
- delaynms(10); //延时100ms较长时间,以看清关于显示的说明
- }
- }
- /*****************************************************
- 函数功能:显示温度符号
- ***************************************************/
- void display_symbol(void)
- {
- unsigned char i;
- WriteAddress(0x40); //写显示地址,将在第2行第1列开始显示
- i = 0; //从第一个字符开始显示
- while(Temp[i] != '\0') //只要没有写到结束标志,就继续写
- {
- WriteData(Temp[i]); //将字符常量写入LCD
- i++; //指向下一个字符
- delaynms(20); //延时1ms给硬件一点反应时间
- }
- }
- /*****************************************************
- 函数功能:显示温度的小数点
- ***************************************************/
- void display_dot(void)
- {
- WriteAddress(0x49); //写显示地址,将在第2行第10列开始显示
- WriteData('.'); //将小数点的字符常量写入LCD
- delaynms(20); //延时1ms给硬件一点反应时间
- }
- /*****************************************************
- 函数功能:显示温度的单位(Cent)
- ***************************************************/
- void display_cent(void)
- {
- unsigned char i;
- WriteAddress(0x4c); //写显示地址,将在第2行第13列开始显示
- i = 0; //从第一个字符开始显示
- while(Cent[i] != '\0') //只要没有写到结束标志,就继续写
- {
- WriteData(Cent[i]); //将字符常量写入LCD
- i++; //指向下一个字符
- delaynms(20); //延时1ms给硬件一点反应时间
- }
- }
- /*****************************************************
- 函数功能:显示温度的整数部分
- 入口参数:x
- ***************************************************/
- void display_temp1(unsigned char x)
- {
- unsigned char j,k,l; //j,k,l分别储存温度的百位、十位和个位
- j=x/100; //取百位
- k=(x%100)/10; //取十位
- l=x%10; //取个位
- WriteAddress(0x46); //写显示地址,将在第2行第7列开始显示
- WriteData(digit[j]); //将百位数字的字符常量写入LCD
- WriteData(digit[k]); //将十位数字的字符常量写入LCD
- WriteData(digit[l]); //将个位数字的字符常量写入LCD
- delaynms(50); //延时1ms给硬件一点反应时间
- }
- /*****************************************************
- 函数功能:显示温度的整数部分
- 入口参数:x
- ***************************************************/
- void display_temp11(unsigned char x)
- {
- unsigned char j,k,l; //j,k,l分别储存温度的百位、十位和个位
- j=x/100; //取百位
- k=(x%100)/10; //取十位
- l=x%10; //取个位
- WriteAddress(0x03); //写显示地址,将在第2行第7列开始显示
- WriteData(digit[j]); //将百位数字的字符常量写入LCD
- WriteData(digit[k]); //将十位数字的字符常量写入LCD
- WriteData(digit[l]); //将个位数字的字符常量写入LCD
- delaynms(50); //延时1ms给硬件一点反应时间
- }
- /*****************************************************
- 函数功能:显示温度的整数部分
- 入口参数:x
- ***************************************************/
- void display_temp12(unsigned char x)
- {
- unsigned char j,k,l; //j,k,l分别储存温度的百位、十位和个位
- j=x/100; //取百位
- k=(x%100)/10; //取十位
- l=x%10; //取个位
- WriteAddress(0x0a); //写显示地址,将在第2行第7列开始显示
- WriteData(digit[j]); //将百位数字的字符常量写入LCD
- WriteData(digit[k]); //将十位数字的字符常量写入LCD
- WriteData(digit[l]); //将个位数字的字符常量写入LCD
- delaynms(50); //延时1ms给硬件一点反应时间
- }
- /*****************************************************
- 函数功能:显示温度的小数数部分
- 入口参数:x
- ***************************************************/
- void display_temp2(unsigned char x)
- {
- WriteAddress(0x4a); //写显示地址,将在第2行第11列开始显示
- WriteData(digit[x]); //将小数部分的第一位数字字符常量写入LCD
- delaynms(50); //延时1ms给硬件一点反应时间
- }
- /*****************************************************
- 函数功能:做好读温度的准备
- ***************************************************/
- void ReadyReadTemp(void)
- {
- Init_DS18B20(); //将DS18B20初始化
- WriteOneChar(0xCC); // 跳过读序号列号的操作
- WriteOneChar(0x44); // 启动温度转换
- for(time=0;time<100;time++)
- ; //温度转换需要一点时间
- Init_DS18B20(); //将DS18B20初始化
- WriteOneChar(0xCC); //跳过读序号列号的操作
- WriteOneChar(0xBE); //读取温度寄存器,前两个分别是温度的低位和高位
- }
- /*****************************************************
- 函数功能:按键处理
- ***************************************************/
- void led_1()
- {
- if(TN>=hi)
- {hi_led=~hi_led;
- delay(1000);
- }
- if(TN<lo)
- {lo_led=~lo_led;
- delay(1000);
- }
- }
- /*****************************************************
- 函数功能:按键处理
- ***************************************************/
- void key_switch(void)
- {
- if(key1==0)
- {
- delay(30);
- if(key1==0)
- {
- t2+=1;
- if(t2==2)
- {t2=0;}
- }
- }
- if(key2==0)
- {
- delay(30);
- if(key2==0)
- {
- if(t2==0)
- {
- hi+=1;
- if(hi==200)
- {hi=200;}
- }
- if(t2==1)
- {
- lo+=1;
- if(lo==hi)
- {lo=hi;}
- }
-
- }
- }
- if(key3==0)
- {
- delay(30);
- if(key3==0)
- {
- if(t2==0)
- {
- hi-=1;
- if(hi==lo)
- {hi=lo;}
- }
- if(t2==1)
- {
- lo-=1;
- if(lo==-20)
- {lo=-20;}
- }
-
- }
- }
- }
- /*****************************************************
- 函数功能:主函数
- ***************************************************/
- void main(void)
- {
- hi_led=0;
- lo_led=0;
- LcdInitiate(); //将液晶初始化
- delaynms(1); //延时5ms给硬件一点反应时间
- if(Init_DS18B20()==1)
- display_error();
- display_explain();
- display_explain1();
- display_symbol(); //显示温度说明
- display_dot(); //显示温度的小数点
- display_cent(); //显示温度的单位
- while(1) //不断检测并显示温度
- { key_switch();
- if(t2==0)
- {display_explain11();}
- else
- {display_explain111();}
- led_1();
- display_temp11(hi); //显示温度的整数部分
- display_temp12(lo); //显示温度的整数部分
- ReadyReadTemp(); //读温度准备
- TL=ReadOneChar(); //先读的是温度值低位
- TH=ReadOneChar(); //接着读的是温度值高位
- TN=TH*16+TL/16; //实际温度值=(TH*256+TL)/16,即:TH*16+TL/16
- //这样得出的是温度的整数部分,小数部分被丢弃了
- TD=(TL%16)*10/16; //计算温度的小数部分,将余数乘以10再除以16取整,
- //这样得到的是温度小数部分的第一位数字(保留1位小数)
- display_temp1(TN); //显示温度的整数部分
- display_temp2(TD); //显示温度的小数部分
- delaynms(10);
- }
-
- }
复制代码 |