基于蓝桥杯单片机第七届省赛模拟风扇系统源码
由于涉及到的外设较少,工程也较简单,主要逻辑代码(main函数)如下。
main.c
#include "sys.h"
u16 smgtime=0;
u8 keytime=0;
u8 s=0;
u16 sytime=0;
u16 time=0;
u8 cmode=1;//工作模式 1:睡眠风 2:自然风 3:常风
u8 UIC=1;//界面选择
u8 DX=0;
u8 temp=0;//读取到的温度数据
u8 PwmTime=0;//计时
u8 HPwm=0;
u8 PWMFLAG=0;
void PwmSetting(){
if(sytime==0){
P34=0;
return ;
}
if(cmode==1) HPwm=2;
else if(cmode==2) HPwm=3;
else if(cmode==3)HPwm=7;
if(HPwm>PwmTime&&PWMFLAG==1){
P34=1;
PWMFLAG=2;
}
else if(HPwm<=PwmTime&&PWMFLAG==2){
P34=0;
PWMFLAG=3;
}
if(PwmTime==10){
PwmTime=0;
PWMFLAG=1;
}
}
void LedSetting(){
u8 leds=0;
if(!sytime)leds=8;
else if(cmode==1)leds=0;
else if(cmode==2)leds=1;
else if(cmode==3) leds=2;
P0=0xff;
P2=P2&0x1f|0x80;
if(leds!=8)
P0=~(1<<leds);
else P0=0xff;
P2=P2&0x1f;
}
void smgshow(){
if(UIC==2){//显示温度
DT[0]=12;
DT[1]=4;
DT[2]=12;
DT[3]=10;
DT[4]=10;
DT[5]=temp/10;
DT[6]=temp%10;
DT[7]=13;
return ;
}
else
{
DT[0]=12;
DT[1]=cmode;
DT[2]=12;
DT[3]=10;
DT[4]=sytime/1000;
DT[5]=sytime/100%10;
DT[6]=sytime/10%10;
DT[7]=sytime%10;
}
}
void main(){
sys_init();
Timer0Init();
Timer1Init();
while(1){
if(keytime==20){
keytime=0;
key_scan();
switch(rkey){
case 4:
if(cmode==1)cmode=2;
else if(cmode==2)cmode=3;
else cmode=1;
break;
case 5:
if(DX==0){
sytime+=60;
DX=1;
}
else if(DX==1){
sytime+=120;
DX=2;}
else DX=0;
break;
case 6:
sytime=0;//清空剩余时间
break;
case 7:
if(UIC==1)UIC=2;
else
UIC=1;
break;
default :
break;
}
rkey=0;
}
if(smgtime==50){//每50ms刷新一数码管
smgtime=0;
smgshow();
LedSetting();
if(UIC==1)temp=(u8)ReadTemp();
}
PwmSetting();
}
}
void time0() interrupt 1{
smgtime++;
keytime++;
smgplay(DT[s],s++);
if(s>7)s=0;
if(sytime!=0){
time++;
if(time==1000){
time=0;
sytime--;
}
}
}
void time1() interrupt 3{
if(sytime!=0){
PwmTime++;
}
}
附上百度网盘链接提供参考:
链接:https://pan.baidu.com/s/1EksLtBSP15IY9bsw1zK80w
提取码:yzh1
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?