標題: 基于51單片機車載空調系統設計Proteus仿真+源程序 [打印本頁]
作者: bbxyliyang 時間: 2023-11-23 19:59
標題: 基于51單片機車載空調系統設計Proteus仿真+源程序
一、系統方案
1、本設計采用這51單片機作為主控器。
2、DS18B20采集溫度值送到液晶1602顯示。
3、按鍵設置報警值。
4、溫度控制風扇檔位。
1.jpg (4.6 KB, 下載次數: 26)
下載附件
2023-11-23 19:58 上傳
二、硬件設計
原理圖如下:
2.jpg (39.76 KB, 下載次數: 40)
下載附件
2023-11-23 19:58 上傳
三、單片機軟件設計
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(hang==1)
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.zg4o1577.cn/bbs/) |
Powered by Discuz! X3.1 |
主站蜘蛛池模板:
久草视频在线播放
|
欧美日韩一区在线播放
|
成人免费一区二区三区视频网站
|
电影午夜精品一区二区三区
|
粉嫩av|
亚洲国产精品91
|
一区二区在线不卡
|
在线免费激情视频
|
一区精品视频
|
免费观看的av毛片的网站
|
亚洲乱码国产乱码精品精的特点
|
久热伊人
|
亚洲欧美日韩国产综合
|
国产精品7777777
|
在线一区|
精品综合
|
色婷婷综合久久久中字幕精品久久
|
日本午夜网站
|
国产欧美一级
|
亚洲视频在线看
|
日本理论片好看理论片
|
97精品国产97久久久久久免费
|
自拍偷拍3p
|
久久久久久免费精品一区二区三区
|
国产精品日韩一区二区
|
成人欧美一区二区三区1314
|
国产91精品网站
|
亚洲国产精品人人爽夜夜爽
|
久久大香
|
欧美黑人一区
|
欧美片网站免费
|
精品国产乱码一区二区三区a
|
亚洲精彩视频
|
国产免费又黄又爽又刺激蜜月al
|
欧美一级二级视频
|
免费一级欧美在线观看视频
|
浴室洗澡偷拍一区二区
|
日本久久精
|
人人做人人澡人人爽欧美
|
91国自产
|
国产欧美精品一区二区
|