智能風扇調速系統
智能風扇調速系統.jpg (102.68 KB, 下載次數: 121)
下載附件
2017-5-16 21:57 上傳
總體設計框圖 系統電路設計總體設計方框圖所示,控制器采用單片機AT89S52,溫度傳感器采用DS18B20,用2位LED數碼管以串口傳送數據實現溫度顯示。
1_1.002.jpg (29.36 KB, 下載次數: 111)
下載附件
2017-5-16 22:07 上傳
總體設計方框圖 主控制器 單片機AT89S52具有低電壓供電和體積小等特點,四個端就能滿足電路系統的設計需要,很適合便攜手持式產品的設計使用系統可用二節電池供電。 狀態顯示 顯示風扇調速系統處于的工作狀態,狀態有三種分別是 低速狀態、中速狀態和高速狀態,此系統以發光二極管指示作演示。 LED顯示 本系統共使用的三個共陽極七段數碼管分別顯示,當前的溫度和設定定時的倒計時時間。溫度以標準攝氏度為單位。時間以分鐘為單位。數碼管采用單片機P0口并行數據輸出,P2口數據掃描控制顯示,三極管8550做數碼管的驅動。 鍵盤控制 有一組鍵盤控制倒計時溫度的設定加與減。另一組控制系統處于的三種狀態,分別對應的是低速狀態、中速狀態和高速狀態,此系統以發光二極管指示作演示。還有一個開關按鍵是控制系統是處于自動狀態和手動狀態的開關。 溫度傳感器 DS18B20溫度傳感器是美國DALLAS半導體公司最新推出的一種改進型智能溫度傳感器,與傳統的熱敏電阻等測溫元件相比,它能直接讀出被測溫度,并且可根據實際要求通過簡單的編程實現9~12位的數字值讀數方式。DS18B20的性能特點如下: ●獨特的單線接口僅需要一個端口引腳進行通信; ●多個DS18B20可以并聯在惟一的三線上,實現多點組網功能; ●無須外部器件; ●可通過數據線供電,電壓范圍為3.0~5.5V; ●零待機功耗; ●溫度以9或12位數字; ●用戶可定義報警設置; ●報警搜索命令識別并標志超過程序限定溫度(溫度報警條件)的器件; ●負電壓特性,電源極性接反時,溫度計不會因發熱而燒毀,但不能正常工作; 系統復位 系統單片機采用的是上電復位,當復位鍵按下時,系統會變為,開始的初始狀態。 時鐘振蕩 系統單片機使用的是外部時鐘振蕩,振蕩頻率為標準的11.0592MHZ。
ALIM1061.JPG (507.93 KB, 下載次數: 119)
下載附件
2017-5-16 21:57 上傳
ALIM1062.JPG (367.63 KB, 下載次數: 101)
下載附件
2017-5-16 21:57 上傳
ALIM1063.JPG (362.16 KB, 下載次數: 90)
下載附件
2017-5-16 21:57 上傳
ALIM1064.JPG (473.43 KB, 下載次數: 97)
下載附件
2017-5-16 21:57 上傳
ALIM1065.JPG (518.47 KB, 下載次數: 115)
下載附件
2017-5-16 21:57 上傳
調整大小 800600.jpg (50 KB, 下載次數: 109)
下載附件
2017-5-16 21:57 上傳
調整大小 znfsts-d.jpg (36.19 KB, 下載次數: 135)
下載附件
2017-5-16 21:57 上傳
0.png (64.72 KB, 下載次數: 123)
下載附件
2017-5-16 21:57 上傳
0.png (29.83 KB, 下載次數: 115)
下載附件
2017-5-16 21:57 上傳
元件清單 風扇調速系統使用說明書 - 接通交流220伏電源,電源指示燈亮。
- 按下啟動電源開關,系統開始運行。
- 當手動/自動按鍵彈起時,為手動狀態,溫度顯示為當前溫度,時間顯示為零,加,減鍵不起作用。
- 分別按下,低速至高速按鍵,相應的指示燈亮。
- 當手動/自動按鍵按下時,為自動狀態,溫度顯示為當前溫度,時間顯示為零,加,減鍵起作用。每次加1或減1 。系統處于倒計時狀態。
- 分別按下,低速至高速按鍵,相應的指示燈亮。
- 當系統處于自動狀態時,如果溫度大于30度,低速燈自動點亮。如果溫度大于32度,中速燈自動點亮。如果溫度大于34度,高速燈自動點亮。
Altium Designer畫的原理圖如下:(51hei附件中可下載工程文件)
1_1.003.jpg (112.09 KB, 下載次數: 134)
下載附件
2017-5-16 22:07 上傳
風扇調速最終程序: - #include
- code unsigned char seg7code[11]={ 0xc0,0xf9,0xa4,0xb0,0x99,0x92,
- 0x82,0xf8,0x80,0x90,0x40}; //顯示段碼
-
- sbit TMDAT =P3^1; //DS18B20 的數據輸入/輸出腳DQ,根據情況設定
-
- sbit P2_7=P2^7;
- sbit P2_6=P2^6;
- sbit P2_5=P2^5;
-
- sbit jia=P2^4;
- sbit jian=P2^3;
- sbit di=P2^2;
- sbit zh=P2^1;
- sbit ga=P2^0;
-
- unsigned int z=0;
- sbit q=P1^7;
-
- unsigned int sdata;//測量到的溫度的整數部分
- //unsigned char xiaoshu1;//小數第一位
- //unsigned char xiaoshu2;//小數第二位
- //unsigned char xiaoshu;//兩位小數
-
- bit fg=1; //溫度正負標志
-
- //////////*顯示延時程序*///////////////
-
- void Delay(unsigned int tc)
- {while( tc != 0 )
- {unsigned int i;
- for(i=0; i<80; i++);
- tc--;}
- }
-
- ////////////延時部分///////////////
-
- void yanshi (unsigned int count)
- {
- unsigned char i;
- while(count--)
- {for(i=0;i<115;i++);}
- }
-
-
- /////////////發送復位///////////////
-
- void fashong (void)
- {
- unsigned char i;
- TMDAT = 0; for(i=0;i<103;i++);
- TMDAT = 1; for(i=0;i<4;i++);
- }
-
-
- bit tmrbit (void) //讀一位//
- {
- unsigned int i;
- bit dat;
- TMDAT = 0;
- i++;
- TMDAT = 1;
- i++; i++; //微量延時 //
- dat = TMDAT;
- for(i=0;i<8;i++);
- return (dat);
- }
-
- unsigned char tmrbyte (void) //讀一個字節
- {
- unsigned char i,j,dat;
- dat = 0;
- for (i=1;i<=8;i++)
- { j = tmrbit(); dat = (j << 7) | (dat >> 1); }
- return (dat);
- }
-
- void tmwbyte (unsigned char dat) //寫一個字節
- {
- unsigned char j,i;
- bit testb;
- for (j=1;j<=8;j++)
- { testb = dat & 0x01;
- dat = dat >> 1;
- if (testb)
- { TMDAT = 0; //寫0
- i++; i++;
- TMDAT = 1;
- for(i=0;i<8;i++); }
- else
- { TMDAT = 0; //寫0
- for(i=0;i<8;i++);
- TMDAT = 1;
- i++; i++;}
- }
- }
-
- void tmstart (void) //發送ds1820 開始轉換
- {
- fashong(); //復位
- yanshi(1); //延時
- tmwbyte(0xcc); //跳過序列號命令
- tmwbyte(0x44); //發轉換命令 44H,
- }
- void tmrtemp (void) //讀取溫度
- {
- unsigned char a,b;
- fashong (); //復位
- yanshi (1); //延時
- tmwbyte (0xcc); //跳過序列號命令
- tmwbyte (0xbe); //發送讀取命令
- a = tmrbyte (); //讀取低位溫度
- b = tmrbyte (); //讀取高位溫度
- if(b>0x7f) //最高位為1 時溫度是負
- {a=~a; b=~b+1; //補碼轉換,取反加一
- fg=0; //讀取溫度為負時fg=0
- }
- sdata = a/16+b*16; //整數部分
- //xiaoshu1 = (a&0x0f)*10/16; //小數第一位
- //xiaoshu2 = (a&0x0f)*100/16%10;//小數
- //xiaoshu=xiaoshu1*10+xiaoshu2; //小數
- }
- void DS18B20PRO(void)
- {
- tmstart();
- //yanshi(5); //如果是不斷地讀取的話可以不延
- tmrtemp(); //讀取溫度,執行完畢溫度將存于
- }
- void Led()
- {
- if(fg==1) //溫度為正時顯示的數據
- {
- P2_7=0;
- P0=seg7code[sdata/10]; //輸出十位
- Delay(8); P2=P2|0xf0;
-
- P2_6=0;
- P0=seg7code[sdata%10]|0x80; //輸出個位
- Delay(8); P2=P2|0xf0;
-
- P2_5=0;
- P0=seg7code[z%10]|0x80; //輸出延時位
- Delay(4); P2=P2|0xf0;
-
- if(sdata>30)
- {P1=0xfe;}
- if(sdata>32)
- {P1=0xfd;}
- if(sdata>34)
- {P1=0xfb;}
-
- }
- }
-
- void buzidong()
- {
-
- void DS18B20PRO();
- void Led();
-
- DS18B20PRO();
- Led();
- if(di==0)
- {Delay(200);P1=0xfe;}
- if(zh==0)
- {Delay(200);P1=0xfd;}
- if(ga==0)
- {Delay(200);P1=0xfb;}
-
- }
- void zidong()
- {
- while(z--)
- {
- void DS18B20PRO();
- void Led();
-
- unsigned char i,k;
- //for(y=30;y>0;y--)
- for(i=12;i>0;i--)
- //for(j=80;j>0;j--)
- for(k=248;k>0;k--)
- {
- if(jia==0)
- {Delay(200);z++;}
- if(jian==0)
- {Delay(200);z--;}
-
- DS18B20PRO();
- Led();
- if(di==0)
- {Delay(200);P1=0xfe;}
- if(zh==0)
- {Delay(200);P1=0xfd;}
- if(ga==0)
- {Delay(200);P1=0xfb;}
-
- /*
- if((di==0)||(sdata>30))
- {Delay(200);P1=0xfe;}
- ……………………
- …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼
0.png (58.67 KB, 下載次數: 120)
下載附件
2017-5-16 22:04 上傳
全部資料下載地址:
智能風扇調速系統資料.zip
(12.31 MB, 下載次數: 359)
2017-5-16 21:42 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|