基于蓝桥杯单片机第七届省赛模拟风扇系统源码

由于涉及到的外设较少,工程也较简单,主要逻辑代码(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

posted @   昊月光华  阅读(12)  评论(0编辑  收藏  举报  
相关博文:
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
点击右上角即可分享
微信分享提示