我是靠谱客的博主 霸气悟空,最近开发中收集的这篇文章主要介绍在单片机中如何实现手动/自动控制外设简介思路详细代码代码分析,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

简介

在一般的应用中都会有控制要求,比如当采集的土壤湿度过低时开启水泵灌溉,这样一个简单的外设控制就实现了。水泵就是外设,而控制它的就是土壤湿度。这种模式是我们经常使用的代码编写起来也很简单,然而如何实现手动开启或者关闭水泵?

思路

编写这种逻辑的基本思路就是需要一个标志位来表示手动和自动的模式,1表示手动模式,0表示自动模式。外设的控制也需要一个标志位1表示开启0表示关闭。

详细代码

方法一

此方法就是一一发送一个数据控制一个外设

//此版本是在STM32下编写的
u8 HAND_IT; //手动与自动模式标志位
u8 WATER_IT; //水泵控制标志位

int main(){

	while(1){
		if(HAND_IT){//进入手动模式
			if(WATER_IT){
				//打开水泵
			}else{
				//关闭水泵
			}
		}
		else{//自动模式下
		}
	}
}

方法二

方法二发送数据不需要与方法一样不需要发送那么多数据,只需要发送一个数据就可以控制外设。

/*PERI_STATUS
*0000 0000
*7:手动和自动控制
*6-1:保留
*0:水泵手动控制标志位
*/
u8 PERI_STATUS;//外设控制标志位

int main(){

	while(1){
		if((PERI_STATUS&0x80)==0x80){//手动控制
			if((PERI_STATUS&0x01)==0x01){
				//水泵打开
			}else if((PERI_STATUS&0x01)==0x00){
				//水泵关闭
			}
		}
		else{//自动控制
			
		}
	}
}

优缺点

方法一 传输的数据量大,需要的空间大浪费严重。
方法二 传输的数据很少,可以降低数据处理的时间和内存空间。

代码分析

方法一

方法一的代码就和思路一样的就是按照思路中规中矩没有可以分析的。

方法二

首先需要理解两个位运算符:
1)& 运行符 有0则为0
2)| 运算符 有1则为1
了解这两个运算符号后,开始分析代码

/*PERI_STATUS
*0000 0000
*7:手动和自动控制
*6-1:保留
*0:水泵手动控制标志位
u8 就是c语言中的char类型 也就是1个字节 8Byte 可以控制7个外设
需要控制外设越多则可以定义为u16(short)、u32(int)类型
u8 PERI_STATUS;//外设控制标志位
*/

PERI_STATUS=0x80的时候进入手动模式,也是就最高位控制手动和自动模式的切换。

PERI_STATUS&0x80 由于由于&是有0则为0,所以就可以精切判断第7位是否为1。
PERI_STATUS=0x01的时候水泵打开,第0位控制水泵的状态。
PERI_STATUS&0x01 就是精确判断第0位的数据是否为1。

最后

以上就是霸气悟空为你收集整理的在单片机中如何实现手动/自动控制外设简介思路详细代码代码分析的全部内容,希望文章能够帮你解决在单片机中如何实现手动/自动控制外设简介思路详细代码代码分析所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(64)

评论列表共有 0 条评论

立即
投稿
返回
顶部