樓主并沒有把代碼貼全,我不上后面部分的代碼。- /*****************************************************
- 函數功能:顯示說明信息
- ***************************************************/
- 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);
- }
-
- }
復制代碼 |