源程序基于ats智能电风扇控制系统设计

上传人:第*** 文档编号:61594501 上传时间:2018-12-05 格式:PDF 页数:25 大小:91.76KB
返回 下载 相关 举报
源程序基于ats智能电风扇控制系统设计_第1页
第1页 / 共25页
源程序基于ats智能电风扇控制系统设计_第2页
第2页 / 共25页
源程序基于ats智能电风扇控制系统设计_第3页
第3页 / 共25页
源程序基于ats智能电风扇控制系统设计_第4页
第4页 / 共25页
源程序基于ats智能电风扇控制系统设计_第5页
第5页 / 共25页
点击查看更多>>
资源描述

《源程序基于ats智能电风扇控制系统设计》由会员分享,可在线阅读,更多相关《源程序基于ats智能电风扇控制系统设计(25页珍藏版)》请在金锄头文库上搜索。

1、源程序源程序_ _基于基于 ATSATS 的智能电风扇控制系统设计的智能电风扇控制系统设计 源程序 /* 基于 AT89S52 的智能电风扇控制系统设计 江经坤、史 宣、李占伟 器件参数:AT89S52 12MHZDS18B20 BT136 MOC3041 A3144 实现功能:显示环境温度、风扇测速、倒计时、温控调速 编写日期: 2011.5.17 */ #includeregx52.h/头文件 / /宏定义 #define uchar unsigned char #define uint unsigned int #define HI_T0(65536-10000)/256 /给定时器 T

2、0 高 8 位赋值,定时 10ms #define LO_T0(65536-10000)/256 /给定时器 T0 低 8 位赋值 #define HI_T1(65536-10000)/256 /给定时器 T1 高 8 位赋值 #define LO_T1(65536-10000)/256 /给定时器 T1 低 8 位赋值 #define _TH2_TL2_(65536 - 50000)/定时 50ms #define HI(_TH2_TL2_ / 256) /给定时器 T2 高 8 位赋值 #define LO(_TH2_TL2_ % 256) /给定时器 T2 低 8 位赋值 #define

3、 M_1s20/(1000/50)1 秒要 20 个中断的 累计 / /位定义 sbit wei1=P20;/位定义数码管用到的片选,高电平有效 sbit wei2=P21; sbit wei3=P22; sbit wei4=P23; sbit wei5=P24; sbit wei6=P33; sbit K0=P14;/位定义按键 sbit K1=P10; sbit K2=P11; sbit K3=P12; sbit DQ = P30; sbit PWM = P37; /sbit buzzer=P37; sbit su=P36; / /定义全局变量 uint M=0;/T0 中断次数,M*10

4、ms 即输出低定平维持时间 uint N=2;/T1 中断次数,20ms,即输出高电平维持时间 uint M_V=1000;/定时 10s,用于测取 10s 内风扇平均速度 uint V,VV;/ uchar TT=25; /定义电风扇开启温度 uchar TT0; uchar TT1;/定义变量保存上一时刻和当前温度值 uchar hour = 0, min = 1, sec = 5; /定时器的初始值 uchar code SEG_TAB = 0xc0, 0xf9, 0xa4, 0xb0, 0x99, 0x92, 0x82, 0xf8, 0x80, 0x90;/共阳极 数码管 0-9 数字

5、段码 uchar code SEG_TAB_1 = 0x40, 0x79, 0x24, 0x30, 0x19, 0x12, 0x02, 0x78, 0x00, 0x10;/共阳 极数码管 0-9 带点数字段码 / /函数提前声明 void init_wei(void);/初始化位选 void show(uchar date,uchar wei);/在哪一个(wei)数码管上显示什么 数据(date) void disp_v (void);/速度显示函数 void key();/ void disp_js(); /倒计时显示函数 / void delayms(uint x) /延时子函数,延时约

6、 x ms uint i,j; for(i=x;i0;i-) for(j=120;j0;j-); / void Delay(uint time)/延时函数 while( time- ); / void EX_int0Init(void) /初始化外部中断 0 IT0=0; /设置外部中断 0 为电平触发方式 EX0=1;/INT 0 中断开 EA=1; /总中断开 / void Timer0Init(void)/初始化定时器 0 程序 TMOD = 0x01; /设置定时器 0 工作方式 1 TH0=HI_T0; /高位赋初值 TL0=LO_T0; /低位赋初值 TR0 = 1;/启动定时器

7、0 ET0 = 1;/定时器 0 中断开 EA = 1;/总中断开 / void Timer1Init(void)/初始化定时器 1 程序 TMOD = 0x01; /设置定时器 1 工作方式 1 TH1=HI_T1; /高位赋初值 TL1=LO_T1; /低位赋初值 ET1 = 1;/定时器 1 中断开 EA = 1;/总中断开 / void Timer2Init(void)/初始化定时器 2 程序 T2CON=0x00;/实现 16 位自动重载定时 T2MOD = 0x01; /设置定时器 2 工作方式 1 RCAP2H=HI;/自动重载寄存器赋值 RCAP2L=LO; TH2 = HI;

8、 /给 TH0,TL0 赋初始值 TL2 = LO; TR2 = 1;/启动定时器 0 ET2 = 1;/定时器 0 中断开 EA = 1;/总中断开 / Init_18B20()/初始化 18B20 uchar x = 0; DQ = 1;/DQ 复位 Delay(10);/稍做延时 DQ = 0;/单片机将 DQ 拉低 Delay(80); /延时 480us DQ = 1;/拉高总线 Delay(10); x = DQ;/稍做延时后 如果 x=0 则初始化成功 x=1 则初始化失败 Delay(20); / uchar ReadOneChar()/读一个字节 uchar i = 0; u

9、char dat = 0; for (i = 8; i 0; i-) DQ = 0; / 给脉冲信号 dat = 1; DQ = 1; / 给脉冲信号 if(DQ) dat |= 0x80; Delay(15); return (dat); / void WriteOneChar(uchar dat)/写一个字节 uchar i = 0; for (i = 8; i 0; i-) DQ = 0; DQ = dat0x01; Delay(5); DQ = 1; dat=1; / void disp_t()/读取并显示温度 uint a = 0, b = 0, c = 0, t = 0; floa

10、t tt = 0; Init_18B20(); WriteOneChar(0xCC); / 跳过读序号列号的操作 WriteOneChar(0x44); / 启动温度转换 Init_18B20(); WriteOneChar(0xCC); /跳过读序号列号的操作 WriteOneChar(0xBE); /读取温度寄存器 a = ReadOneChar(); b = ReadOneChar(); t = b; t = 8; t = t | a; tt = t * 0.0625; t = tt * 10 + 0.5; /放大 10 倍输出并四舍五入 TT0=TT1; TT1= t / 10;/保存

11、当前温度 a = t / 100;/十位 b = t / 10 - a * 10;/个位 c = t - a * 100 - b * 10; /小数位 init_wei(); /初始化位选 P0 = 0xc6;/显示温度C字符 wei1 = 1; delayms(5); wei1 = 0; init_wei();/显示温度小数位 show(c,2); delayms(5); P0 = SEG_TAB_1b;/显示温度个位 wei3 = 1; delayms(5); wei3 = 0; init_wei();/显示温度十位 show(a,4); delayms(5); / void main()

12、 EX_int0Init(); Timer0Init(); Timer1Init(); Timer2Init(); TT1=TT0=TT; while(1) if(TT1-TT0=0.1)/温度变化,则 pwm 变化,以实时调节风扇转速 M += 2; if(M=198)M=2; if(TT0-TT1=0.1) M -=2; If(M=0)M=200; key();/手动调整定时时间 disp_js();/显示倒计时时间 /disp_t(); /显示温度 /disp_v();/显示速度 / void EX_int0(void) interrupt 0/INT0 中断服务程序 V+; / void Timer0(void) interrupt 1/定时器 0 中断服务程序 static uchar count0; / static uint count00; TH0=HI_T0; /高位重装初值 TL0=LO_T0; /低位重装初值 PWM=0; count0+; count00+; if(c

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 高等教育 > 大学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号