智能散熱系統(tǒng)設計 1.1設計目的 本設計是為了幫助學生掌握單片機I/O口、中斷等功能部件及直流電機等一些常見外圍設備的使用,建立綜合應用編程的基本能力,訓練學生綜合運用所學知識解決實際問題而創(chuàng)建較完整的簡單應用程序的獨立編程能力。 1.2設計要求 基本要求:系統(tǒng)能采集當前環(huán)境溫度,當溫度達到一定值時觸發(fā)直流風扇的轉(zhuǎn)動進行主動散熱,而且隨著溫度的變化,散熱風扇的轉(zhuǎn)速有明顯區(qū)別,達到溫度高風力強,溫度低風力弱的效果。要求溫度值可以顯示。 擴展部分:可以設計三檔風力及對應的觸發(fā)條件。 1.3學習要點 l 單片機I/O使用 l PWM脈寬調(diào)制 l 中斷 l 定時器控制
單片機源程序如下:
- #include"temp.h"
- #include"lcd.h"
- //數(shù)碼管位選段選:
- unsigned char code weixuan[8] = {
- 0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};//位選控制
- unsigned char code gyduanxuan[17] = {
- 0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
- 0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
- //0、1、2、3、4、5、6、7、8、9、A、b、C、d、E、F的顯示碼
- unsigned char LCDtemp[6];
- sbit beep=P3^0; // P3^5 不能用,會高低電平一直變換,問老師。
- unsigned int value; //矩陣鍵盤的鍵值
- int temp; //定義溫度
- unsigned int biaozhi; //定義控制標志
- unsigned int RTdata; //定義串口數(shù)據(jù)
- sbit fengshan=P2^4;
- void xianxiang();
- void JZjianpan(void);
- void zhongduanInit();
- void LCDxianshi();
- void chuli();
- void main()
- {
- unsigned int yanshiCS;
- zhongduanInit();
- biaozhi=0;
- temp=0;
- fengshan=0;
- Delay(50);
- LcdInit();
- while(1)
- {
-
- if(biaozhi==0)
- {
- temp=Ds18b20ReadTemp();
- xianxiang();
- LCDxianshi();
- chuli();
- Delay(1);
- }
- if(biaozhi==4)
- {
-
- for(yanshiCS=500;yanshiCS>0;yanshiCS--)
- {
- switch(RTdata)
- {
- case('1'):temp=400;break; //25度
- case('2'):temp=480;break; //30度
- case('3'):temp=560;break; //35度
- }
- xianxiang();
- LCDxianshi();
- chuli();
- Delay(1);
- }
- biaozhi=0;
- }
- }
- }
- void xianxiang()
- {
- float tp;
- if(temp<0)
- {
- temp--;
- temp=~temp;
- tp=temp;
- temp=tp*0.0625*100+0.5;
- P0=0x40;
- LcdWriteCom(0x80);
- LcdWriteData('-');
- }
- else
- {
- tp=temp;
- temp=tp*0.0625*100+0.5;
- LcdWriteCom(0x80);
- LcdWriteData('+');
- Delay(1);
- }
- LCDtemp[0]=temp/10000;
- LCDtemp[1]=temp%10000/1000;
- LCDtemp[2]=(temp%1000/100);
- LCDtemp[3]=('.');
- LCDtemp[4]=temp%100/10;
- LCDtemp[5]=temp%10;
- }
- void LCDxianshi()
- {
- LcdWriteCom(0x81);
- LcdWriteData('0'+LCDtemp[0]);
- LcdWriteCom(0x82);
- LcdWriteData('0'+LCDtemp[1]);
- LcdWriteCom(0x83);
- LcdWriteData('0'+LCDtemp[2]);
- LcdWriteCom(0x84);
- LcdWriteData(LCDtemp[3]);
- LcdWriteCom(0x85);
- LcdWriteData('0'+LCDtemp[4]);
- LcdWriteCom(0x86);
- LcdWriteData('0'+LCDtemp[5]);
- LcdWriteCom(0x87);
- LcdWriteData('C');
- }
- void chuli()
- {
- int a=1;
- int q;
- while((temp>=2800)&&(temp<2900)&&a)
- {
- fengshan=1;
- Delay(30);
- for(q=0;q<500;q++)
- {
- beep=~beep;
- Delay(1);
- }
- a=0;
- }
- fengshan=0;
- a=1;
- while((temp>=2900)&&(temp<3000)&&a)
- {
- fengshan=1;
- Delay(60);
- for(q=0;q<500;q++)
- {
- beep=~beep;
- Delay(1);
- }
- a=0;
-
- }
- fengshan=0;
- a=1;
- while((temp>=3000)&&(temp<4000)&&a)
- {
- fengshan=1;
- Delay(120);
- for(q=0;q<500;q++)
- {
- beep=~beep;
- Delay(1);
- }
- a=0;
- }
- fengshan=0;
- }
- void zhongduanInit()
- {
- SCON=0X50;
- PCON=0X80;
- TMOD=0X20;
- TH1=0XF3;
- TL1=0XF3;
- ES=1;
- EA=1;
- TR1=1;
- }
- void chuankou() interrupt 4
- {
- biaozhi=4;
- RTdata=SBUF;
- RI=0;
- SBUF=RTdata;
- while(!TI);
- TI=0;
- }
復制代碼
所有資料51hei提供下載:
散熱器—液晶1602顯示 串口.rar
(49.56 KB, 下載次數(shù): 38)
2018-11-9 11:07 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|