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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值