标题: 基于51单片机的智能散热系统设计 PWM+1602液晶显示 [打印本页]
作者: 海风吹着凉 时间: 2018-11-9 11:08
标题: 基于51单片机的智能散热系统设计 PWM+1602液晶显示
智能散热系统设计
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)
作者: 海风吹着凉 时间: 2018-11-9 11:10
分享学习51的时候做的课设 ,当时的满分作品。 虽然现在看起来有些稚嫩,但对于只学过51的同学来说是一份很不错的51实例,可以从中学到不少东西
作者: 时光浅唱fly 时间: 2018-11-9 16:09
刚刚开始学,希望以后可以看懂
作者: 32号 时间: 2018-11-18 18:31
请问有这个的仿真图吗
作者: A1010346122 时间: 2018-11-26 19:33
并没有仿真图啊
作者: enchidianzi 时间: 2018-11-27 07:14
学习了
欢迎光临 (http://www.51hei.com/bbs/) |
Powered by Discuz! X3.1 |