编程小结

@Xin

编程小结

标志位

利用标志位可以减少变量的声明,这样可以减少内存的使用。

实例:两个按键控制两个灯,A建按下切换是控制LED1还是LED2,B键切换LED亮灭。
假设0为灭,1为亮。

u8 flag_state = 0x00;			//定义初始状态为0x00
#define state_1 0x00			
#define state_2 0x10
#define state_3 0x01
#define state_4 0x11			//0x作为16进制,占四个位,这里是位4作为A键按下与否的标志位
								//位0作为B键按下与否的标志位

这样就可以实现一个变量里面含有多个状态,可以减少程序的变量区的大小,做到储存变小的效果。

if(flag)判断flag是0还是非0,不仅仅是判断0和1。
比如flag为4,那么判断则是:4非0为真,则会执行下一条语句。

基本位运算

计算机中变量、函数等都会转换为0和1进行运算,在某些情况使用位运算可以极大的缩减代码,使代码变得简洁起来。

常见的位运算有:

运算符作用
取反(只在0和非0中取反)
I或(按位或)
&与(按位与)
`取反(按位取反)
>>右移
<<左移

实例: 8个灯跑马灯的效果,第一个灯的地址为0x0100,后续每一个灯的地址为下一位。

	u16 i ;
	u32 j =0;
	i = 0x0100;
	while(1)
	{
		LED_Bit(i,0);					//点亮i灯
		for(j = 0;j < 800000;j++);		//延时
		LED_Bit(i,1);					//熄灭i灯
		if(i == 0x8000)					
			i = 0x0100;
		else
			i <<= 1;			//左移灯
		for(j = 0;j < 800000;j++);
	}

一般是用|将某一位置或几个位置为1,其他位要为0;用&将某一位或几位清0,其他位为1。
取某一位或者几位用&取出即可,取出的相关位为1,其他位为0。

框架小技巧

对于有多种条件的情况,可以先处理特殊情况,然后一般情况在else里写,这样让逻辑更加清晰,更加易于维护;当然也可以先处理一般情况再对特殊情况进行处理。
实例: 时、分、秒的进位。

u8 sec,min,hour
sec = 59;
hour = 23;
min = 59;		//初始值,下面的为sec加1该执行的操作
if(sec == 59)
{
	sec = 0;
	if(min == 59)
	{
		min = 0;
		if(hour == 23)
			hour =0;
		else
			hour++;
	}
	else
		min++;
}
else
	sec++;

End

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值