单片机不带操作系统架构简视

不带操作系统架构适合用状态机方式来做功能逻辑应用。每一种状态跑完跑下一种,时时要求高的用中断,要求不高的定时器标记计数,while循环中用累加延长时间。执行函数。人懒只随便写了一点。。。。。。。

#define overcurrent_ADC_val 100;
//版本
typedef struct 
{
	unsigned char ucVersion[32];
	unsigned char ucDate[32];
	unsigned char ucTime[32];
}TS_versions;
const TS_versions versions=
{
	"Pro_name_V00",
	__DATE__,
	__TIME__,
}

//显示运行状态
enum en_led_state{
	Led_star=0,
	led_run,
	led_charge,
	led_stop,
	led_short_error,
	led_overcurrent_error
};
//程序运行状态
enum en_state{
	Fun_start=0,
	Fun_run,
	Fun_stop,
	Fun_sleep,
	Fun_error
};
enum en_state state;
enum en_led_state led_state;

extern unsigned int GET_ADC_VAL(unsigned char num);
//PWM调整参数处理
void	PWM_PRO(enum state flag);
//LED工作显示处理
void   LED_PRO(enum state flag);
//ADC工作选择
void   ADC_PRO(enum state flag)
{
unsigned int temp_bat_val=0;

	switch(flag)
	{
		case	Fun_start:
				temp_bat_val= GET_ADC_BAT_VAL();
				 break;
		case    Fun_run:
				temp_bat_val= GET_ADC_LOAD_VAL();
				if(temp_bat_val>overcurrent_ADC_val)
				led_state=led_run;
				else
				led_state=led_overcurrent_error;
				break;
        case	Fun_stop:
        		break;
        case	Fun_sleep:
        		break;
		case Fun_error:
				break;
	    default:
	           break;
	}
}
//输入启动检测
void KEY_CAN(void);
//开门狗喂狗
void WD_DOG();
//唤醒睡眠操作
void WAKE_UP(void)
{
	GPIO_WAKEUP_Init();
}

void Sleep(void)
{
	GPIO_Sleep_Init();
}
//EEPROM 操作
EEPROM_Wirte(void);
EEPROM_Read(void);
void Fun_PRO(void)
{
	printf("Version  : %s\r\n", versions.ucVersion);
    printf("buildTime: %s\r\n", versions.ucDate);
    printf("buildTime: %s\r\n", versions.ucTime);
    
	EEPROM_Read();//读取保存的状态和重要的数据参数
	
			 if(timer_1ms_count>10)//延时执行函数
			 {
				 	timer_start_10ms_count++;
				 	timer_1ms_count=0;
				 	KEY_CAN();
			 }
			 
			WD_DOG();	 
				
		switch(state)
		{
			case Fun_start:
				 WAKE_UP();
				 if(timer_start_10ms_count>10)
				{
					ADC_PRO(Fun_start);
					timer_start_10ms_count=0;
				}
				break;
			case Fun_run:
				 PWM_PRO(Fun_run);
				 ADC_PRO(Fun_run);
				 LED_RUN(Fun_run);
				 break;
			case Fun_stop:
				PWM_PRO(Fun_stop);
				LED_PRO(Fun_stop);
				
			break;
			case Fun_sleep:
				Sleep();
			break;
			case Fun_error:
				LED_PRO(Fun_error);
			break;
			default:
			break;
		}
}
//main.c

int main(void)
{
	Hard_Init();
	while(1)
	{
		Fun_PRO();
	}
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值