流水灯按键处理函数——学习笔记论坛——站长专属——冰糖橙之家

流水灯按键处理函数

一、范例

void key_proc()
{
	switch(uckey_read())
	{
		case 0x10:
		ucled <<=1;
			if(ucled==0x10)
				ucled=0x01;
			break;
		case 0x20:
		ucled >>=1;
			if(ucled==0x00)
				ucled=0x08;
	}	
	P0=~ucled;
}	

二、解析

  1. switch(uckey_read())uckey_read()调用按键读取函数。
  2. case 0x10:,case 0x20:判断SW按键按下状态:

    (1)SW1按下时由按键读取函数返回的数值为0x10 二进制表示为0001 0000

    (2)SW2按下时由按键读取函数返回的数值为0x20 二进制表示为0010 0000

  3. ucled <<=1;,ucled >>=1;使用双目位移运算符控制LED实现流水灯效果。
    <<在双目位移运算符中代表左移,>>在双目位移运算符中代表右移。
  4. if(ucled==0x10)     //如果LED4亮后
    	ucled=0x01;  //LED1点亮
    
    if(ucled==0x00)    //如果LED1亮后
    	ucled=0x08; //LED4点亮

    流水灯点循环点亮4个灯后,重载LED点亮状态

  5. P0=~ucled;代码中以1为点亮状态0为熄灭状态与单片机逻辑相反,翻转二进制数值是单片机可以正常识别。

 

 

 

 

请登录后发表评论

    没有回复内容