版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、 、结语本设计结合生活中的实际情况,利用单片机技术设计并制作了温控风扇系统,完全达到了设计要求,其次通过独立键盘和温度传感器可以实现对应的操作,使操作更加方便灵活,所选取的单片机具有较高的抗干扰能力,也符合这个设计的稳定性要求。我们队伍的各成员在整个设计制作过程中,相互配合,相互检查,但又进行了分工,大大提高了工作效率。参考文献:郭天祥新概念51 单片机C语言教程入门、提高、 开发、 拓展全攻略电子工业大学出版社 2010李广弟 , 朱月秀 , 等 . 单片机基础 M. 北京航空航天大学出版社, 2001.模拟电子技术基础M. 高等教育出版社, 2001.数字电子技术基础M. 高等教育出版社,
2、 2006.14 实物硬件图#include#include #define uchar unsigned char#define uint unsigned int#define LCD1602_DATAPINS P0sfr PCAPWM0 = 0 xf2; /sfr PCAPWM1 = 0 xf3; /定义寄存器PCAPWM0定义寄存器PCAPWM1sbit LCD1602_E=P12;/定义lcd1602的使能端sbit LCD1602_RW=P11;/定义lcd1602的写操作端sbit LCD1602_RS=P10;/定义lcd1602的发送命令端sbit DSPORT=P27; /
3、 温度传感器读写端sbit LED0 = P23;sbit LED1 = P24;加速按钮控制温度调节按键1 加速按钮控制温度调节按键1 、 2温控与键控切换开关sbit key1 = P21; / sbit key2 = P22;sbit key_sw = P37;/ uint a=0;uint b=0;uint c=0;uint tem_1=27;uint tem_2=30;uchar num=0;/*函数名: Delay1ms函数功能: 延时函数*/ void Delay1ms(uint y) / 粗略延时1msuint x;for( ; y0; y-)for(x=440; x0; x-
4、);void delay1ms(void) / 误差 0usunsigned char a,b; for(b=129;b0;b-)for(a=45;a0;a-);void delay1us(uint x) / unsigned char a,b;for(b=x;b0;b-)for(a=3;a0;a-);误差 0us/*函数名 函数功能 输入 输出for(a=45;a0;a-);void delay1us(uint x) / unsigned char a,b;for(b=x;b0;b-)for(a=3;a0;a-);误差 0us/*函数名 函数功能 输入 输出: Ds18b20Init: 初始
5、化无初始化成功返回1 ,失败返回0*/void LcdWriteCom(uchar com) / 写入命令LCD1602_E = 0;LCD1602_RS = 0;LCD1602_RW = 0;/使能 选择发送命令 选择写入LCD1602_DATAPINS = com; / 放入命令Delay1ms(1);/ Delay1ms(1);/ 等待数据稳定/ 写入时序保持时间/ 写入时序保持时间Delay1ms(5);LCD1602_E = 0;void LcdWriteData(uchar dat)/ 写入数据LCD1602_E = 0;/ 使能清零LCD1602_RS = 1; / 选择输入数据
6、LCD1602_RW = 0; / 选择写入LCD1602_DATAPINS = dat; / 写入数据Delay1ms(1);LCD1602_E = 1; / 写入时序Delay1ms(5); / 保持时间 LCD1602_E = 0;void LcdInit()LcdWriteCom(0 x38); /LcdWriteCom(0 x0c); /LcdWriteCom(0 x06); /LcdWriteCom(0 x01); /LcdWriteCom(0 x80); / /LCD 初始化子程序开显示开显示不显示光标写一个指针加1清屏设置数据指针起点uchar Ds18b20Init() uc
7、har i;DSPORT = 0;delay1us(642);DSPORT = 1;线拉低/ 将总线拉低480us960us/ 延时 642us/ 然后拉高总线,如果DS18B20做出反应会将在15us60us 后总i = 0;while(DSPORT) i+;if(i5)/ 等待DS18B20拉低总线等待 5MSreturn 0;/ 初始化失败delay1ms( );return 1;/ 初始化成功/*函数名: Ds18b20WriteByte函数功能: 向18B20写入一个字节*/void Ds18b20WriteByte(uchar dat) uint j;for(j=0; j= 1;/
8、*函数名: Ds18b20ReadByte函数功能: 读取一个字节*/uchar Ds18b20ReadByte() uchar byte, bi; uint j;for(j=8; j0; j-)/*函数名: Ds18b20ReadByte函数功能: 读取一个字节*/uchar Ds18b20ReadByte() uchar byte, bi; uint j;for(j=8; j0; j-)DSPORT = 0;/ delay1us(1);DSPORT = 1;/ delay1us(6); bi = DSPORT;先将总线拉低1us然后释放总线/ 延时 6us 等待数据稳定/ 读取数据,从最低
9、位开始读取/* 将 byte 左移一位,然后与上右移byte = (byte 1) | (bi 7); delay1us(45);return byte;7 位后的 bi ,注意移动之后移掉那位补0。*/*函数名: Ds18b20ChangTemp函数功能: 让 18b20 开始转换温度*/void Ds18b20ChangTemp()Ds18b20Init();delay1ms( );/ 跳过/ 跳过ROM操作命令温度转换命令Ds18b20WriteByte(0 x44); /*函数名: Ds18b20ReadTempCom函数功能: 发送读取温度命令*/ void Ds18b20ReadT
10、empCom() Ds18b20Init();delay1ms( );Ds18b20WriteByte(0 xcc); /跳过ROM操作命令Ds18b20WriteByte(0 xbe); /发送读取温度命令/*函数名: Ds18b20ReadTemp函数功能: 读取温度*/int Ds18b20ReadTemp()int temp = 0;uchar tmh, tml;/ 先写入转换命令/ 先写入转换命令/ 然后等待转换完后发送读取温度命令/ 读取温度值共16 位,先读低字节/ 再读高字节Ds18b20ReadTempCom();tml = Ds18b20ReadByte();tmh = D
11、s18b20ReadByte();temp = tmh;temp = 8;temp |= tml;return temp; /*函数名: LcdDisplay()函数功能: LCD 显示读取到的温度*/void LcdDisplay(int temp)/lcd 显示unsigned char datas = 0, 0, 0, 0, 0; /定义数组float tp;if(temp 0)/ 当温度值为负数LcdWriteCom(0 x80);/ 写地址 80 表示初始地址LcdWriteData(-);/ 显示负/ 因为读取的温度是实际温度的补码,所以减1 ,再取反求出原码temp=temp-1
12、;temp=temp;tp=temp;temp=tp*0.0625*100+0.5;/ 留两个小数点就*100, +0.5 是四舍五入,因为C语言浮点数转换为整型的时候把小数点/ 后面的数自动去掉,不管是否大于0.5 , 而 +0.5 之后大于0.5 的就是进1 了, 小于 0.5 的就/ 算加上 0.5,还是在小数点后面。elseLcdWriteCom(0 x80);/ 写地址80 表示初始地址LcdWriteData(+);/ 显示正tp=temp;/ 因为数据处理有小数点所以将温度赋给一个浮点型变量/ 如果温度是正的那么,那么正数的原码就是补码它本身temp=tp*0.0625*100+
13、0.5;/ 留两个小数点就*100, +0.5 是四舍五入,因为C语言浮点数转换为整型的时候把小数点/ 后面的数自动去掉,不管是否大于0.5 , 而 +0.5 之后大于0.5 的就是进1 了, 小于 0.5 的就/ 算加上 0.5,还是在小数点后面。datas0 = temp / 10000;datas1 = temp % 10000 / 1000;datas2 = temp % 1000 / 100;datas3 = temp % 100 / 10;datas4 = temp % 10;a = datas0; /a,b,c 的作用是取温度的整数,进行温控b = datas1;c = data
14、s2;LcdWriteCom(0 x82);/ 写地址LcdWriteData(0+datas0); /百位LcdWriteCom(0 x83);/ 写地址LcdWriteData(0+datas1); /十位LcdWriteCom(0 x84);/写地址LcdWriteData(0+datas2); /个位LcdWriteCom(0 x85);/写地址LcdWriteData(.);/显示.LcdWriteCom(0 x86);/ 写地址LcdWriteData(0+datas3); /显示小数点LcdWriteCom(0 x87);/ 写地址LcdWriteData(0+datas4);
15、/显示小数/*温度控制电机输出占空比函数void control (void)if(a*100+b*10+c) tem_1)0%占空比CCAP0H = CCAP0L = 0%占空比LED0 = 0;LED1 = 0;else if (tem_1 = (a*100+b*10+c)&(a*100+b*10+c)tem_2 )CCAP0H = CCAP0L = 0 xB3; /PWM0 口输出30%占空比LED0 = 1;LED1 = 0;else if (tem_2 = (a*100+b*10+c)CCAP0H = CCAP0L = 0 x1a; /PWM0 口输出90%占空比LED0 = 1;L
16、ED1 = 1;函数名: keyscan函数功能: 键盘扫描void keyscan1 ()if (0 = key1) / 温度下限调整按键Delay1ms(20);if (0 = key1)tem_1+;if(31 = tem_1) tem_1 = 17;while(!key1);if (0 = key2) / 温度上限调整按键 Delay1ms(20);if (0 = key2)tem_2+;if(44 = tem_2)tem_2 = 23;while(!key2 );防止两个温度范围一样if(tem_1 = tem_2) tem_2+; /防止两个温度范围一样if(tem_2 tem_1
17、) / 防止温度上限比温度下限低tem_2=tem_1+1; void keyscan2 ()if(jia_key=0) / 加速按键Delay1ms(20);if(jia_key=0)num+;if(num=3)num=0;while(jia_key=0);/* 电机输出档位选择函数*/void dangwei()switch(num)case 0:CCAP0H = CCAP0L = 0 xff; /PWM0口输出0%占空比LED0 = 0;LED1 = 0;break;case 1:CCAP0H = CCAP0L = 0 x67;LED0 = 1;LED1 = 0;break;case 2
18、:CCAP0H = CCAP0L = 0 x1a;LED0 = 1;LED1 = 1;break;/PWM0/PWM060%占空比90%占空比/*函数名: displayx ()函数功能: LCD 显示读取到的键盘的数值*/ void display1 (int p)unsigned char datas = 0, 0;datas0 = p / 10;datas1 = p % 10;LcdWriteCom(0 x8b);LcdWriteData(0+datas0);LcdWriteCom(0 x8c);LcdWriteData(0+datas1); void display2 (int t)u
19、nsigned char datas = 0, 0;datas0 = t / 10;datas1 = t % 10;LcdWriteCom(0 x8e);LcdWriteData(0+datas0);LcdWriteCom(0 x8f);LcdWriteData(0+datas1); /*/void init_dianji()CCON void init_dianji()CCON = 0;/PCA / /CL = 0;/CH = 0;CMOD = 0 x02;/CCAPM0 = 0 x42;/PCA断CR = 1;/PCA初始化 PCA控制寄存器计数器停止运行清除CF标志位清除所有中断标志位重置PCA的 16 位计数器设置PCA 计数器时钟源为Fosc/2禁止PCA 计数器溢出中断模块 0 工作在 8 位 PWM模式并且没有计数器开始运行PCA中/*函数名: main函数功能: 主函数
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 食堂轮班制度规范
- 方管模具保养制度规范
- 露天矿山各种制度规范
- 员工间隙规范制度
- 面食加工作坊制度规范
- 安装与维修制度规范
- 规范经营倒查追究制度
- 小学生规范写字制度
- 零件工具库房制度规范
- 制剂规范与处方制度
- 继电保护装置调试作业指导书
- 老同学聚会群主的讲话发言稿
- 国家开放大学最新《监督学》形考任务(1-4)试题解析和答案
- 天然气输气管线阴极保护施工方案
- 高血压问卷调查表
- QC成果提高花岗岩砖铺装质量
- GB/T 25156-2010橡胶塑料注射成型机通用技术条件
- GB/T 25085.3-2020道路车辆汽车电缆第3部分:交流30 V或直流60 V单芯铜导体电缆的尺寸和要求
- GB/T 242-2007金属管扩口试验方法
- GB/T 21776-2008粉末涂料及其涂层的检测标准指南
- 第六单元作文素材:批判与观察 高一语文作文 (统编版必修下册)
评论
0/150
提交评论