文章目錄
- 1 簡介
- 2 緒論
- 2.1 課題背景與目的
- 3 系統設計
- 3.1 智能飲水機功能設計
- 3.1.1 智能飲水機的按鍵功能:
- 3.1.2 智能飲水機的顯示功能:
- 3.2 系統架構
- 3.3 軟體部分
- 3.3.1 主程式部分
- 3.3.2 溫度檢測
- 3.3.3 顯示程式設計
- 3.3.4 鍵盤掃描程式
- 3.4 實作效果
- 4 最后
1 簡介
Hi,大家好,這里是丹成學長,今天向大家介紹一個 單片機專案
基于單片機的智能飲水機系統設計與實作
大家可用于 課程設計 或 畢業設計
技術解答、畢設幫助、開題指導
print("Q 746876041")

2 緒論
2.1 課題背景與目的
這次設計的智能飲水機就是單片機結合傳感器的一個應用,
該系統設計綜合單片機以及電子技術理論,從生活實際出發,完善了飲水機的功能,整個設計系統實作三個功能,即加熱、對溫度上下限的控制和定時加熱,與傳統的飲水機相比,由于采用了自動檢測和控制的電子設計技術,可較好地實作對水溫的測量和控制,具有較廣泛的應用前景,
系統包括溫度傳感器,鍵盤輸入模塊,輸出控制模塊,資料傳輸模塊,溫度顯示模塊和出水驅動電路等部分,
3 系統設計
3.1 智能飲水機功能設計
智能飲水機具有過熱保護防干燒、 加熱至沸騰、 設定溫度加熱、 超溫報警提示、 安全鎖定、 電動機出水功能等,
3.1.1 智能飲水機的按鍵功能:
- ① 出水鍵: 控制飲水機出水和停止出水;
- ② 加熱鍵: 負責控制開始加熱和停止加熱;
- ③ 鎖定鍵: 按下鎖定鍵, 其他按鍵無效;
- ④ 切換健:按下后開始設定用戶想要的溫度;
- ⑤ 溫度設定鍵: 按一下溫度增加 5℃,溫度可在 0℃到 100℃之間回圈,
3.1.2 智能飲水機的顯示功能:
- ①電源燈(綠色) : 接通電源, 電源燈點亮;
- ②加熱指示燈(黃色) :按下加熱鍵, 加熱指示燈點亮, 表示燒水開始作業, 再次按下加熱鍵,指示燈熄滅, 表示燒水停止;
- ③鎖定鍵指示燈(藍色) : 鎖定其他按鍵功能, 燈亮表示其他按鍵均不可用;
- ④超溫報警燈(紅色) : 燈點亮表示水已經達到設定的加熱溫度或已沸騰并停止加熱;
- ⑤數碼管: 顯示當前水溫或用戶設定的溫度,
- ⑥蜂鳴器: 響起后說明水以沸騰并停止加熱,
3.2 系統架構
整個硬體系統由主控制系統、輸入輸出模塊、傳感器、其他功能電路和電源部分組成,主控系統使用單片機控制,包括對鍵盤的資訊的接收和控制,對其他功能電路的控制等,通過軟體編程實作預定功能;傳感器部分即檢測子系統,主要是進行飲水機中水的溫度檢測和控制,采用智能溫度傳感器DS18B20;其他功能電路部分包括恒溫,防干燒,出水等電路,達到功能多樣化;電源部分為智能飲水機提供必要的電能,保證飲水機能夠正常的作業,

3.3 軟體部分
3.3.1 主程式部分
程式的初始化主要包括三個環節:
- (1) 實作各種設定堆疊指標、 定時器/計數器 0 初始化、 以及開中斷、定時器/計數器啟動;
- (2) 實作 LED 顯示當前水溫并能顯示預設的水溫;
- (3) 不斷的進行按鍵掃描, 判斷是否有按鍵按下, 如沒有按鍵按下,則回傳顯示; 如有按鍵按下, 則根據所按鍵實作相應的操作,
人機對話功能鍵設定如下:
- (1) “出水” 鍵: 控制其出水和停止出水;
- (2) “加熱” 鍵: 控制其加熱和停止加熱;
- (3) “鎖定” 鍵: 用于鎖定其他所有按鍵;
- (4) “切換” 鍵: 用于將顯示幕切換至溫度設定界面并開始設定溫度;
- (5) “設定溫度” 鍵: 以 5℃為間隔在 0℃至 100℃之間以遞增方式設定水溫,
// 關鍵代碼
void main()
{
T=100;
while(1)
{
Lock_key();
if(Lock==0)
keyscan();
if(flag2==0)
temp_display();
if(flag2==1)
SEG_display(T,0);
if(temp>=T*10) {Temp_led=0;Hot=1;Hot_led=1;}
if(temp< T*10) Temp_led=1;
if(temp>=1000){Beep=0;Hot=1;Hot_led=1;}
if(temp<1000) Beep=1;
}
}

3.3.2 溫度檢測
溫度檢測運用 DS18B20 芯片, 因為其功能全面且精度高, 完全可以滿足設計要求, 它將檢測到的水溫送給單片機, 再由單片機輸出給顯示電路將實時水溫顯示出來,

// 關鍵代碼
void init_ds18b20()
{
uchar x=0;
DQ = 1; //DQ 復位
delay_us(10); //稍做延時
DQ = 0; //單片機將 DQ 拉低
delay_us(100); //精確延時 大于 480us
DQ = 1; //拉高總線
delay_us(10);
x=DQ; //稍做延時后 如果 x=0則初始化成功 x=1 則初始化失敗
delay_us(20);
}
uchar ReadOneChar()
{
uchar i;
uchar dat=0;
for (i=8;i>0;i--)
{
DQ = 0;
dat>>=1;
DQ = 1;
if(DQ)
dat|=0x80;
delay_us(10);
}
return(dat);
}
void WriteOneChar(uchar dat)
{
uchar i;
for (i=8; i>0; i--)
{
DQ = 0;
DQ = dat&0x01;
delay_us(10);
DQ = 1;
dat>>=1;
}
}
int ReadTem()
{
int t;
uchar a,b;
init_ds18b20();
WriteOneChar(0xcc); // 跳過讀序號列號的操作
WriteOneChar(0x44); // 啟動溫度轉換
delay_us(200);
init_ds18b20();
WriteOneChar(0xcc); //跳過讀序號列號的操作
WriteOneChar(0xbe); //讀取溫度暫存器等
a=ReadOneChar();
b=ReadOneChar();
t=b;
t<<=8;
t=t|a;
return t;
}
void temp_display()
{
uint temp_point;
temp=ReadTem()*0.625; //將溫度的高位與低位合并
temp_point=temp%10; //取出小數位
SEG_display(temp/10,temp_point);
}
3.3.3 顯示程式設計
顯示程式是負責點亮 4 支數碼管, 并根據單片機送出的資料及時更新顯示的資料, 其程式流程圖如下
(大家可以換成oled屏顯示)

// 關鍵代碼
void SEG_display(uchar dat1,uchar dat2)
{
P23=1;
P0=table[dat1/100];
P20=0;
delay_us(80);
P20=1;
P0=table[dat1/10%10];
P21=0;
delay_us(80);
P21=1;
P0=table[dat1%10]|0x80;
P22=0;
delay_us(80);
P22=1;
P0=table[dat2];
P23=0;
delay_us(80);
}
3.3.4 鍵盤掃描程式
鍵盤掃描程式的任務是在程式運行程序中始終不停的檢測是否有按鍵被按下, 如果檢測到有按鍵被按下, 則進入與該按鍵對應的程式運行; 若該按鍵沒有被按下, 則繼續檢測下一個按鍵, 如此回圈, 從而完成每一個按鍵所對應的功能,

// 關鍵代碼
void keyscan()
{
if(key1==0)
{
delay_ms(2);
if(key1==0)
{
flag=~flag;
if(flag==1)
Out=0;
if(flag==0)
Out=1;
}
while(!key1);
}
if(key2==0)
{
delay_ms(2);
if(key2==0)
{
flag1=~flag1;
if(flag1==1)
{Hot=0;Hot_led=0;}
if(flag1==0)
{Hot=1;Hot_led=1;}
}
while(!key2);
}
if(key3==0)
{
delay_ms(2);
if(key3==0)
{
if(flag2==1) T+=5;
if(T>=101)T=0;
}
while(!key3);
}
if(key5==0)
{
delay_ms(2);
if(key5==0)
{
flag2=~flag2;
}
while(!key5);
}
}
void Lock_key() // 鎖定鍵盤
{
if(key4==0)
{
delay_ms(2);
if(key4==0)
{
Lock=~Lock;
if(Lock==1)
Lock_led=0;
if(Lock==0)
Lock_led=1;
}
while(!key4);
}
}
3.4 實作效果


4 最后
技術解答、畢設幫助、開題指導
print("Q 746876041")

單片機畢設專案大全:
https://blog.csdn.net/huawei123444/article/details/119822845
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/340542.html
標籤:其他
上一篇:RT-Thread正式成為RISC-V基金會戰略會員!
下一篇:HaaS云端一體智能語音互動方案
