|
期末大作業(yè):
多點溫度檢測系統(tǒng)的設(shè)計
基本要求:
1、掌握51系列單片機的基本結(jié)構(gòu)及設(shè)計方法;
2、了解多點溫度檢測系統(tǒng)的工作原理;
3、熟悉多點溫度檢測系統(tǒng)的設(shè)計方案及其優(yōu)劣;
4、選擇一款合適的方案完成多點溫度檢測系統(tǒng)的設(shè)計。
功能要求:
1、設(shè)計一個4路溫度檢測系統(tǒng),每路溫度的變化范圍是-10℃--+110℃;
2、對4路溫度循環(huán)進行顯示,顯示格式為“第X路 XXX.X度”,每路顯示的時間自定,當(dāng)按下【鎖定】鍵時,僅顯示鎖定的那一路的溫度,再次按下【鎖定】鍵后,恢復(fù)循環(huán)顯示;
3、每路溫度可單獨設(shè)置上下限報警范圍;
4、當(dāng)檢測到的實際溫度超出設(shè)置的上下限(高于上限或者低于下限)時發(fā)出聲音報警,同時顯示器閃爍顯示報警的溫度及路數(shù)(按【取消】鍵后停止報警);
5、按鍵若干。
設(shè)計內(nèi)容:
1、方案設(shè)計;
2、多點溫度檢測系統(tǒng)的硬件設(shè)計;
3、多點溫度檢測系統(tǒng)的軟件設(shè)計和調(diào)試;
4、多點溫度檢測系統(tǒng)的仿真;
5、完成大作業(yè)
的半成品。。。
單片機源程序如下:
- #include "reg52.h"
- #define uchar unsigned char
- #define uint unsigned int
- #define ulong unsigned long
-
- //sbit Buzz = P3^2;
- sbit Buzz = P1^5;
- /*******************************************lcd1602.c函數(shù)聲明************************************************/
- extern void InitLcd1602(); //lcd1602初始化函數(shù)
- extern void DisplayLimit(uchar x,uchar y,char dat); //在坐標(biāo)(x,y)顯示溫度上限或下限
- extern void InitMaxMin(); //進入溫度報警值設(shè)置界面
- extern void Display_user(uchar x); //顯示用戶自定義的字符“↑”
- extern void LcdShowStr(uchar x,uchar y,uchar *str);
- extern void LcdShowDat(uchar x,uchar y,uchar num);
- extern void Display_laba();
- /*******************************************key.c函數(shù)聲明****************************************************/
- extern void KeyDrive();
- extern void KeyScan();
- /****************************************ds18b20.c函數(shù)聲明***************************************************/
- extern bit RESET_DS18B20(void);
- extern uint Read_DS18B20_TEMP(void);
- /*****************************************main.c子函數(shù)聲明***************************************************/
- void Timer1Init(uint ms); //定時器1初始化函數(shù)
- void SetLimit(); //設(shè)置報警值函數(shù)
- void ControlBuzz(); //蜂鳴器控制函數(shù)
- void delay(uint z);
- /**********************************************變量定義******************************************************/
- extern uchar code buff[];
- uchar T1RH=1; //定時器初值
- uchar T1RL=1;
- bit flagBuzz=0; //蜂鳴器開關(guān)標(biāo)志
- bit EBuzz=0; //蜂鳴器使能標(biāo)志
- char High=20; //溫度上限 超過限度蜂鳴器開
- char Low=10; //溫度下限
- uchar mode=0; //模式變量
- uchar cnt=0; //ESC按鍵 變量
- uchar tflag; //溫度正負標(biāo)志位
- /*************************************主函數(shù)***************************************/
- void main()
- {
- EA=1; //開啟總中斷
- Timer1Init(1); //初始化定時器1
- RESET_DS18B20(); //復(fù)位18B20
- delay(20);
- InitLcd1602(); //初始化lcd1602
- while(1)
- {
- LcdShowDat(10,1,buff[Read_DS18B20_TEMP()/100]); //顯示溫度值十位
- LcdShowDat(11,1,buff[Read_DS18B20_TEMP()/10%10]); //顯示溫度值個位
- LcdShowStr(12,1,"."); //顯示小數(shù)點
- LcdShowDat(13,1,buff[Read_DS18B20_TEMP()%10]); //顯示小數(shù)位
- KeyDrive(); //按鍵驅(qū)動
- SetLimit(); //設(shè)置報警值
- }
- }
- /**********************************按鍵動作函數(shù)************************************/
- void KeyDown(uchar keycode)
- {
- if(keycode==0x0D) //回車鍵:進入模式設(shè)置
- {
- mode++;
- if(mode>2)mode=0;
- }
- else if(keycode==0x26) //向上鍵:模式1 上限值+1 模式2 下限值+1
- {
- if(mode==1)
- {
- High++;
- if(High>99)High=99;
- }
- else if(mode==2)
- {
- Low++;
- if(Low==High)Low=High-1;
- }
- }
- else if(keycode==0x28) //向下鍵:模式1 上限值-1 模式2 下限值-1
- {
- if(mode==1)
- {
- High--;
- if(High==Low)High=Low+1;
- }
- else if(mode==2)
- {
- Low--;
- if(Low<0)Low=0;
- }
- }
- else if(keycode==0x1B) //Esc鍵:開關(guān)蜂鳴器報警
- {
- if(mode==0)
- {
- cnt++;
- if(cnt>1)cnt=0;
- if(cnt==1) //蜂鳴器使能開啟 顯示喇叭圖像
- {
- EBuzz=1;
- Display_laba();
- }
- else if(cnt==0) //蜂鳴器使能關(guān)閉 不顯示喇叭
- {
- EBuzz=0;
- LcdShowStr(7,0," ");
- }
- }
- }
- }
- /************************************報警值設(shè)置函數(shù)*********************************/
- void SetLimit()
- {
- if(mode==0); //模式0 正常顯示 調(diào)用蜂鳴器控制函數(shù)
- {
- ControlBuzz();
- }
-
- if(mode!=0) //模式1 調(diào)整溫度上限
- { //模式2 調(diào)整溫度下限
- EBuzz=0;
- InitMaxMin();
- while(mode!=0)
- {
- KeyDrive();
- if(mode==1)
- {
- Display_user(3); //顯示自定義的 箭頭 圖像 指向溫度上限
- DisplayLimit(2,0,High); //顯示 溫度報警值上下限
- DisplayLimit(12,0,Low);
- }
- else if(mode==2)
- {
- Display_user(13); //顯示自定義的 箭頭 圖像 指向溫度下限
- LcdShowStr(3,1," ");
- DisplayLimit(2,0,High);
- DisplayLimit(12,0,Low);
- }
- }
- InitLcd1602();
- }
- }
- /************************************蜂鳴器控制函數(shù)************************************/
- void ControlBuzz()
- {
- if((Read_DS18B20_TEMP()>=(10*High))||(Read_DS18B20_TEMP()<=(10*Low)))
- flagBuzz=1;
- else
- flagBuzz=0;
- if((flagBuzz==1)&&(EBuzz==1))
- {
- Buzz=~Buzz;
- }
- }
- void delay(uint z)
- {
- uint x,y;
- for(x=z;x>0;x--)
- for(y=115;y>0;y--);
- }
- /**********定時器1初始化函數(shù)***********/
- void Timer1Init(uint ms)
- {
- ulong tmp; //16位長整型變量tmp
- ……………………
- …………限于本文篇幅 余下代碼請從51黑下載附件…………
復(fù)制代碼
所有資料51hei提供下載:
11.DS18B20溫度報警.rar
(68.75 KB, 下載次數(shù): 52)
2018-1-8 18:30 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|
評分
-
查看全部評分
|