新手上路
- 积分
- 43
- 金钱
- 43
- 注册时间
- 2016-12-19
- 在线时间
- 10 小时
|
1金钱
int main(void)
{
u8 a,b;
vu8 key=0;
delay_init(); //延时函数初始化
LED_Init(); //LED端口初始化
KEY_Init(); //初始化与按键连接的硬件接口
BEEP_Init(); //初始化蜂鸣器端口
LED0=0; //先点亮红灯
while(1)
{
key=KEY_Scan(0); //得到键值
if(key)
{
switch(key)
{
case WKUP_PRES: //控制蜂鸣器
// BEEP=!BEEP;
a=GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_8);
if(a)
GPIO_ResetBits(GPIOB,GPIO_Pin_8);
else
GPIO_SetBits(GPIOB,GPIO_Pin_8);
break;
case KEY2_PRES: //控制LED0翻转
//LED0=!LED0;
b=GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_5);
if(b)
GPIO_ResetBits(GPIOB,GPIO_Pin_5);
else
GPIO_SetBits(GPIOB,GPIO_Pin_5);
break;
case KEY1_PRES: //控制LED1翻转
LED1=!LED1;
break;
case KEY0_PRES: //同时控制LED0,LED1翻转
LED0=!LED0;
LED1=!LED1;
break;
}
}else delay_ms(10);
}
}
在历程里使用BEEP=!BEEP;LED0=!LED0;这样的位带操作LED和蜂鸣器的翻转。那么在没有正点原子SYS文件夹的情况下,只能用固件库里的函数,怎么控制状态翻转呢?
我再上面的主函数里写了前面两个,先读状态,再判断用SET 和RESET,试了下也能实现,但是感觉挺笨的,请问有没有更简洁的写法呢??~
|
最佳答案
查看完整内容[请看2#楼]
就是IO口输出电平的问题,实质是改变输出寄存器的对应位,
至于c语句怎么写,用宏定义还是库函数还是寄存器,这些形式都是次要的,没什么笨不笨的说法,大家都这样。
|