标题:
单片机蓝桥杯智能风扇程序
[打印本页]
作者:
sfefafwa
时间:
2021-6-27 08:35
标题:
单片机蓝桥杯智能风扇程序
工作模式
设备具有“睡眠风”、“自然风”和“常风”三种工作模式可以通过按键切换,通过
单片机 P34 引脚输出脉宽调制信号控制电机运行状态,信号频率为 1KHz。
1.1 “睡眠风”模式下,对应 PWM 占空比为 20%;
1.2 “自然风”模式下,对应 PWM 占空比为 30%;
1.3 “常风”模式下,对应 PWM 占空比为 70%;
2. 数码管显示
数码管实时显示设备当前工作模式和剩余工作时间(倒计时),如图 2 所示。
- - 1 1 - - 8 8 0 0 0 0 5 5 0 0
工作模式:睡眠风 熄灭 剩余工作时间:50 秒
图 2.工作模式和剩余工作时间显示
“睡眠风”状态下,对应数码管显示数值为 1,自然风模式下,显示数值为 2,常
风模式下,显示数值为 3。
3. 按键控制
使用 S4、S5、S6、S7 四个按键完成按键控制功能。
2.1 按键S4定义为工作模式切换按键,每次按下S4,设备循环切换三种工作模式。
工作过程如下:
2.2 按键 S5 定义为“定时按键”每次按下 S5,定时时间增加 1 分钟,设备的剩余
工作时间重置为当前定时时间,重新开始倒计时,工作过程如下:
设备剩余工作时间为 0 时,停止 PWM 信号输出。
2.3 按键 S6 定义为“停止”按键,按下 S6 按键,立即清零剩余工作时间,PWM
信号停止输出,直到通过 S5 重新设置定时时间。
2.4 按键 S7 定义为“室温”按键,按下 S7,通过数码管显示当前室温,数码管显
示格式如图 3 所示,再次按下 S7,返回图 2 所示的工作模式和剩余工作时间
睡眠风 自然风 常风
0 分钟 1 分钟 2 分钟
3 / 4
显示界面,如此往复。
- - 4 4 - - 8 8 8 8 2 2 5 5 C C
室温显示 熄灭 当前室内:25℃
图 3.室温显示界面
室温测量、显示功能不应影响设备正在执行的 PWM 信号输出、停止、模式切
换和计时等功能。
4. LED 指示灯
“睡眠风”模式下,L1 点亮,“自然风”模式下 L2 点亮,“常风”模式下 L3 点亮;
按下停止按键或倒计时结束时,LED 全部熄灭。
单片机源程序如下:
#include<reg52.h>
#include<dulianjian.h>
#include<shumaguan.h>
#include<onewire.h>
void Timer0Init();
void anjian();
unsigned char jianzhi;
unsigned char fengsu=1;
unsigned char time;
unsigned char wendu;
unsigned char t;
unsigned char c;
static unsigned char s=0;
static unsigned char w=0;
unsigned char timeplay[8];
unsigned char wenduplay[8];
bit anjianflag;
bit wenduflag;
void main()
{
Timer0Init();
P2=0X80;P0=~0X00;P2=0X00;
P2=0X80;P0=~0X01;P2=0X00;
while(1)
{
timeplay[0]=17;timeplay[1]=fengsu;timeplay[2]=17;timeplay[3]=16;timeplay[4]=0;
timeplay[5]=time/100;
timeplay[6]=(time%100)/10;
timeplay[7]=time%10;
if(wenduflag)
{
wendu=(unsigned char)rd_temperature_f();
}
wenduplay[0]=17;wenduplay[1]=4;wenduplay[2]=17;wenduplay[3]=16;wenduplay[4]=16;
wenduplay[5]=wendu/10;
wenduplay[6]=wendu%10;
wenduplay[7]=12;
if(anjianflag==1)
{
jianzhi=zhuangtaiji();
if(jianzhi==1)
{
c++;
P2=0X80;P0=~0X00;P2=0X00;
P2=0X80;P0=~0X01;P2=0X00;
}
if(jianzhi==2)
{
time=0;t=0;
}
if(jianzhi==3)
{
t++;
if(t==1)time=60;
if(t==2)time=120;
if(t==3)
{
time=0;t=0;
}
}
if(jianzhi==4)
{
fengsu++;
if(fengsu==1)
{
P2=0X80;P0=~0X00;P2=0X00;
P2=0X80;P0=~0X01;P2=0X00;
}
if(fengsu==2)
{
P2=0X80;P0=~0X00;P2=0X00;
P2=0X80;P0=~0X02;P2=0X00;
}
if(fengsu==3)
{
P2=0X80;P0=~0X00;P2=0X00;
P2=0X80;P0=~0X04;P2=0X00;
}
if(fengsu==4)
{
fengsu=1;
P2=0X80;P0=~0X00;P2=0X00;
P2=0X80;P0=~0X01;P2=0X00;
}
}
}
}
}
void Timer0Init(void) //1毫秒@11.0592MHz
{
AUXR |= 0x80; //定时器时钟1T模式
TMOD &= 0xF0; //设置定时器模式
TL0 = 0xAE; //设置定时初值
TH0 = 0xFB; //设置定时初值
TF0 = 0; //清除TF0标志
TR0 = 1; //定时器0开始计时
ET0=1;
EA=1;
}
void tm0_isr() interrupt 1
{
static int shumaguancount;static int anjiancount;static int timecount;
shumaguancount++;anjiancount++;timecount++;
TL0 = 0xAE; //设置定时初值
TH0 = 0xFB; //reload timer0 high byte
if (shumaguancount == 20) //1ms * 1000 -> 1s
{
shumaguancount = 0;
if(c%2==0)
{
display(timeplay[s],w);
wenduflag=0;
}
if(c%2==1)
{
display(wenduplay[s],w);
wenduflag=1;
}
s++;w++;
if(s==8)s=0;
if(w==8)w=0;
}
if(anjiancount==100)
{
anjiancount=0;
anjianflag=1;
}
if(timecount==10000)
{
if(time>0)
time--;
}
}
复制代码
所有程序51hei提供下载:
fengshan2.zip
(53.96 KB, 下载次数: 76)
2021-6-27 08:32 上传
点击文件名下载附件
智能风扇
下载积分: 黑币 -5
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1