基于51單片機車載空調系統設計proteus仿真+源程序)

一、系統方案
1、本設計采用這51單片機作為主控器。
2、DS18B20采集溫度值送到液晶1602顯示。
3、按鍵設置報警值。
4、溫度控制風扇檔位。
在這里插入圖片描述

二、硬件設計
原理圖如下:
在這里插入圖片描述

三、單片機軟件設計
1、首先是系統初始化
/T0初始化*/
void init_t0()
{
//TMOD=0x01;//定時器0工作方式1
TH0=(65536-100)/256;//賦初值定時
TL0=(65536-100)%256;//0.01ms
EA=1;//開總中斷
ET0=1;//開定時器0中斷
TR0=1;//啟動定時器0

SCON = 0X50;  //UART方式1;8位UART
REN  = 1;     //允許串行口接收數據
PCON = 0x00;  //SMOD=0;波特率不加倍
TMOD = 0x21;  //T1方式2,用于產生波特率
TH1  = 0xFD;  //裝初值
TL1  = 0xFD;
TR1  = 1;     //啟動定時器1
EA   = 1;     //打開全局中斷控制
ES   = 1;     //打開串行口中斷	

}
2、液晶顯示程序
/*******************************************************************
寫命令
*****/
void xiemingling(unsigned char mingling)
{
en=0;
rs=0;
rw=0;
P0=mingling;
delayxms(5);
en=1;
delayxms(10);
en=0;
}
/

寫數據
*****/
void xieshuju(unsigned char shuju)
{
en=0;
rs=1;
rw=0;
P0=shuju;
delayxms(5);
en=1;
delayxms(10);
en=0;
}
/

液晶初始化
******************************/
void chushihua()
{
en=0;
xiemingling(0x38);//設置16
2顯示,5
7點陣,8位數據接口
delayxms(20);
xiemingling(0x0c);//設置開顯示,不顯示光標
delayxms(20);
xiemingling(0x06);//寫一個字符后地址指針加1
delayxms(20);
xiemingling(0x01);//顯示清零,數據指針清零
delayxms(20);
xiemingling(0x80);//指定字符顯示的實際地址,,,顯示位置的確定方法規定為"80H+地址碼x"
delayxms(20);
}
/lcd1602上顯示這字符函數
/
void write_string(uchar hang,uchar add,uchar p)
{
if(hang1)
xiemingling(0x80+add);
else
xiemingling(0x80+0x40+add);
while(1)
{
if(*p == ‘\0’) break;
xieshuju(p);
p++;
}
}
/lcd1602上顯示2位十進制數
/
void write_num2(uchar hang,uchar add,uint date)
{
if(hang
1)
xiemingling(0x80+add);
else
xiemingling(0x80+0x40+add);
xieshuju(0x30+date/10);
xieshuju(0x30+date%10);
}
/lcd1602上顯示1位十進制數
/
void write_num1(uchar hang,uchar add,uint date)
{
if(hang==1)
xiemingling(0x80+add);
else
xiemingling(0x80+0x40+add);
xieshuju(0x30+date%10);
}
3、DS18B20程序
/初始化
/
Init_DS18B20(void)
{
DQ = 1; //DQ復位
Delay(8); //稍做延時
DQ = 0; //將DQ拉低
Delay(90); //精確延時 大于 480us
DQ = 1; //拉高總線
Delay(8);
presence = DQ; //讀取存在信號
Delay(100);
DQ = 1;
return(presence); //返回信號,0=presence,1= no presence
}
/讀一位
/
uchar read_bit(void)
{
uchar i;
DQ = 0; //將DQ 拉低開始讀時間隙
DQ = 1; // then return high
for (i=0; i<3; i++); // 延時15μs
return(DQ); // 返回 DQ 線上的電平值
}
/讀一個字節
/
uchar ReadOneChar(void)
{
uchar i = 0;
uchar dat = 0;

for (i=0;i<8;i++)
{ // 讀取字節,每次讀取一個字節
if(read_bit())
dat|=0x01<<i; // 然后將其左移

Delay(4);

}
return (dat);
}
/寫一位*************/
void write_bit(uchar bitval)
{
DQ = 0; // 將DQ 拉低開始寫時間隙
if(bitval==1) DQ =1; // 如果寫1,DQ 返回高電平
Delay(5); // 在時間隙內保持電平值,
DQ = 1; // Delay函數每次循環延時16μs,因此delay(5) = 104μs
}
/寫一個字節*************/
void WriteOneChar(uchar dat)
{
uchar i = 0;
uchar temp;

for (i=0; i<8; i++) // 寫入字節, 每次寫入一位
{
temp = dat>>i;
temp &= 0x01;
write_bit(temp);
}
Delay(5);
}
/------------------------------------------------
單個DS18B20 讀取溫度
------------------------------------------------
/
int ReadTemperature()
{
uchar a;
uchar b;
Init_DS18B20();
WriteOneChar(0xCC); // 跳過讀序號列號的操作
WriteOneChar(0x44); // 啟動溫度轉換
delayxms(10);
Init_DS18B20();
WriteOneChar(0xCC); //跳過讀序號列號的操作
WriteOneChar(0xBE); //讀取溫度寄存器等(共可讀9個寄存器) 前兩個就是溫度
a = ReadOneChar(); //低位
b = ReadOneChar(); //高位
t = b;
t <<= 8;
t |= a;

	if(t < 0)		   //溫度為負數{flag_temp = 1;t -= 1;t = ~t;t = t * 0.0625;//溫度值擴大-倍,精確到-位小數}else{flag_temp = 0;  t = t * 0.0625;//溫度值擴大-倍,精確到-位小數}return(t);

}
4、核心算法程序
if(number==0)
{
/根據溫度控制檔位/
if(t<alarm)
{
dangwei = 0;

				 PWM1=0;TR0=0;pwm(0); //控制PWM輸出,進而控制電機的速度}else if(t<alarm+5) { dangwei = 1;TR0=1;pwm(20); //控制PWM輸出,進而控制電機的速度} else if(t<alarm+10) {dangwei = 2;TR0=1;pwm(50); //控制PWM輸出,進而控制電機的速度} else { dangwei = 3;TR0=1;pwm(99); //控制PWM輸出,進而控制電機的速度}

四、 proteus仿真設計
Proteus軟件是一款應用比較廣泛的工具,它可以在沒有硬件平臺的基礎上通過自身的軟件仿真出硬件平臺的運行情況,這樣就可以通過軟件仿真來驗證我們設計的方案有沒有問題,如果有問題,可以重新選擇器件,連接器件,直到達到我們設定的目的,避免我們搭建實物的時候,如果當初選擇的方案有問題,我們器件都已經焊接好了,再去卸載下去,再去焊接新的方案的器件,測試,這樣會浪費人力和物力,也給開發者帶來一定困惑,Proteus仿真軟件就很好的解決這個問題,我們在設計之初,就使用該軟件進行模擬仿真,測試,選擇滿足我們設計的最優方案。最后根據測試沒問題的仿真圖紙,焊接實物,調試,最終完成本設計的作品。
在這里插入圖片描述

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/164094.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/164094.shtml
英文地址,請注明出處:http://en.pswp.cn/news/164094.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

數據庫實驗三 Sql多表查詢和視圖

數據庫實驗三 Sql多表查詢和視圖 一、Sql表二、在線練習 一、Sql表 www.db-book.com 二、在線練習 對所有表執行查詢語句&#xff0c;查看有哪些數據。 select * from tableName; 一、執行以下查詢語句&#xff0c;寫出查詢意圖。 (1) select * from student,takes whe…

經典滑動窗口試題(一)

&#x1f4d8;北塵_&#xff1a;個人主頁 &#x1f30e;個人專欄:《Linux操作系統》《經典算法試題 》《C》 《數據結構與算法》 ??走在路上&#xff0c;不忘來時的初心 文章目錄 一、將x減到0的最小操作數1、題目講解2、講解算法原理3、代碼實現 二、無重復的最長子串1、題…

OpenCV數據類型及CV_16UC1深度圖ros訂閱

最近用到深度圖,對其數據類型及顯示有些迷惑,記筆記于此: 目錄 一、cv::Mat 的數據類型及轉換方式1. cv::Mat 數據類型2. cv::Mat 數據類型互轉2.1 OpenCV數據類型轉換的函數2.2 可視化深度圖像(CV_16UC1)二、cv::Mat 與 sensor_msgs::msg::Image 互轉(基于cv_bridge)1.…

黑臭水體的“黑”和“臭”形成的機理

水體“黑”和“臭”即呈現令人不悅的顏色和(或)散發令人不適氣味的水體。由于水環境遭受超過其自凈能力的有機污染&#xff0c;有機物的好氧分解使水體中耗氧速率大于復氧速率&#xff0c;造成水體缺氧&#xff0c;致使有機物降解不完全、速度減緩&#xff0c;厭氧生物降解過程…

mybatis 語法使用各種踩坑(持續更新中。。。)

1、大小寫命名&#xff1a;這個別說了&#xff0c;都是淚。 2、聯表查詢查詢&#xff0c;多條合成一條&#xff0c;不生效的原因 博主各種檢查關聯關系和字段大小寫&#xff0c;本來是4條數據最后合成一條數據&#xff0c;死活給你直接返回了4條數據&#xff0c;而且每個類似p…

leetcode刷題之用棧實現隊列(C語言版)

leetcode刷題之用棧實現隊列&#xff08;C語言版&#xff09; 一、題目描述二、題目要求三、題目解析Ⅰ、typedef structⅡ、MyQueue* myQueueCreateⅢ、void myQueuePush(MyQueue* obj, int x)Ⅳ、int myQueuePeek(MyQueue* obj)Ⅴ、int myQueuePop(MyQueue* obj)Ⅶ、bool myQ…

邦芒忠告:求職者面試時絕不能說的8件事

求職者在面試時應該注意言行舉止&#xff0c;避免提及一些敏感或不合適的話題&#xff0c;以下是一些絕不能說的事情&#xff1a; 1、攻擊性言辭&#xff1a;不要使用攻擊性言辭&#xff0c;如貶低、批評或攻擊公司、同事或競爭對手等&#xff0c;這會給人留下不成熟、不尊重他…

新手必看!!附源碼!!STM32通用定時器-比較輸出PWM

一、什么是PWM? PWM&#xff08;脈沖寬度調制&#xff09;是一種用于控制電子設備的技術。它通過調整信號的脈沖寬度來控制電壓的平均值。PWM常用于調節電機速度、控制LED亮度、產生模擬信號等應用。 二、PWM的原理 PWM的基本原理是通過以一定頻率產生的脈沖信號&#xff0…

SPSS多元對應分析

前言&#xff1a; 本專欄參考教材為《SPSS22.0從入門到精通》&#xff0c;由于軟件版本原因&#xff0c;部分內容有所改變&#xff0c;為適應軟件版本的變化&#xff0c;特此創作此專欄便于大家學習。本專欄使用軟件為&#xff1a;SPSS25.0 本專欄所有的數據文件請點擊此鏈接下…

紅隊攻防實戰之釘釘RCE

我這一生如履薄冰&#xff0c;你說我能走到對岸嗎&#xff1f; 本文首發于SecIN社區&#xff0c;原創作者即是本人 前言 網絡安全技術學習&#xff0c;承認??的弱點不是丑事。只有對原理了然于?&#xff0c;才能突破更多的限制。擁有快速學習能力的白帽子&#xff0c;是不…

vue3 教程(中)

偵聽器 用于偵聽指定變量&#xff0c;當其響應式狀態變化時觸發回調函數。 watch() watch() 需明確指定偵聽的數據源&#xff0c;并且僅當數據源變化時&#xff0c;才會執行回調&#xff0c;在創建偵聽器時&#xff0c;不會執行回調&#xff0c;可以獲取到數據源變化前后的值…

Flutter 父子組件通信

在Flutter 中父組件調用子組件的方法可以通過GlobalKey實現&#xff0c;而子組件調用父組件方法可以通過回調函數實現。 父組件 class _MyHomePageState extends State<MyHomePage> {final GlobalKey<LoadPencilState> loadPencilKey GlobalKey<LoadPencilSt…

react中虛擬dom,diff,fiber - 初級了解

借鑒&#xff1a; 「React深入」一文吃透虛擬DOM和diff算法 - 掘金 (juejin.cn) 虛擬dom、fiber、渲染dom、dom-diff - 掘金 (juejin.cn) 未閱讀源碼&#xff0c;了解層面&#xff0c;后續可以深入了解 1.虛擬DOM ①.結構上&#xff1a;虛擬DOM比真實DOM輕很多 ②.操作上&…

主流的低代碼平臺有哪些?程序員應該如何與低代碼相處?

本文主要闡述低代碼的概念&#xff0c;介紹目前主流的低代碼平臺&#xff0c;總結低代碼平臺的典型特征、存在優勢以及未來發展趨勢。并站在程序員的角度&#xff0c;分析如何在已經到來的低代碼戰爭中&#xff0c;找到自己的定位&#xff0c;一展所長。 什么是低代碼&#xff…

脈沖寬度基礎知識簡介

脈沖寬度是指脈沖所能達到的最大值所持續的周期時間。脈沖寬度是電子領域中一個重要的概念&#xff0c;它與脈沖重復間隔和占空比等參數密切相關。 脈沖寬度通常用于電信號的測量&#xff0c;可以用來描述脈沖的形狀、幅度和寬度等特性。在雷達和電源領域中&#xff0c;脈沖寬度…

Flink 替換 Logstash 解決日志收集丟失問題

在某客戶日志數據遷移到火山引擎使用 ELK 生態的案例中&#xff0c;由于客戶反饋之前 Logstash 經常發生數據丟失和收集性能較差的使用痛點&#xff0c;我們嘗試使用 Flink 替代了傳統的 Logstash 來作為日志數據解析、轉換以及寫入 ElasticSearch 的組件&#xff0c;得到了該客…

實現一個計算機

圖片&#xff1a; 實現代碼&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>Title</title><style>body {padding: 20px;font-family: Arial;}.calc-wrap {width: 300px;bor…

VL06O報表添加增強字段

業務描述 用戶需要在VL06O事務代碼下進行批量交貨過賬&#xff0c;現有的篩選條件不太適用當前公司的業務&#xff0c;需要在報表中新增三個交貨單增強字段&#xff0c;方便其篩選&#xff08;選擇屏幕沒有加&#xff0c;用戶在報表里用標準按鈕功能自己篩選&#xff09; 效果…

十一 動手學深度學習v2計算機視覺 ——微調

一、網絡架構 一個神經網絡一般可以分成兩塊 特征抽取&#xff0c;將原始像素變成容易線性分割的特征。線性分類器來做分類。 二、訓練 是一個目標數據集上的正常訓練任務&#xff0c; 但使用更強的正則化 使用更小的學習率使用更少的數據迭代 源數據集遠遠復雜于目標數據集…

藍橋杯算法雙周賽心得——迷宮逃脫(dp)

大家好&#xff0c;我是晴天學長&#xff0c;dp版的來啦&#xff0c;可以是受益匪淺啊&#xff0c;需要的小伙伴可以關注支持一下哦&#xff01;后續會繼續更新的。&#x1f4aa;&#x1f4aa;&#x1f4aa; 1) .迷宮逃脫 迷官逃脫[算法賽] 問題描述 在數學王國中&#xff0c;存…