智能散热系统设计 1.1设计目的 本设计是为了帮助学生掌握单片机I/O口、中断等功能部件及直流电机等一些常见外围设备的使用,建立综合应用编程的基本能力,训练学生综合运用所学知识解决实际问题而创建较完整的简单应用程序的独立编程能力。 1.2设计要求 基本要求:系统能采集当前环境温度,当温度达到一定值时触发直流风扇的转动进行主动散热,而且随着温度的变化,散热风扇的转速有明显区别,达到温度高风力强,温度低风力弱的效果。要求温度值可以显示。 扩展部分:可以设计三档风力及对应的触发条件。 1.3学习要点 l 单片机I/O使用 l PWM脉宽调制 l 中断 l 定时器控制
单片机源程序如下:
- #include"temp.h"
- #include"lcd.h"
- //数码管位选段选:
- 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; //定义串口数据
- 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, 下载次数: 38)
|