您的位置:首页 > 其它

<备战蓝桥杯之嵌入式>——BUTTON按键实验

2016-02-21 17:16 429 查看
这次要实现的功能是LCD显示我按下的是哪一个键。

需要注意一下几个点:

1:配置Button的时候要注意是输入模式,因此不需要配置频率。

2:配置成上拉输入(IPU)还是下拉输入(IPD)要看硬件连接,按键没按下时检测到高电平则为上拉输入,按键没按下前检测到低电平则为下拉输入

3:#define xxxx xx语句后不能加;,否则出现错误“expect expression”

4:LCD显示程序中,要想覆盖掉某一段文字,可用空格,如LCD_ShowString(30,150,200,16,16,"KEY0 IS PRESSED );

这里贴一段正点原子的LCD在主函数里的通用写法,方便以后随时调用:

#include "delay.h"

#include "sys.h"

#include "usart.h"

#include "lcd.h"

int main(void)

{

u8lcd_id[12]; //存放LCD ID字符串

delay_init(); //延时函数初始化

uart_init(9600); //串口初始化为9600

LCD_Init();

POINT_COLOR=RED;

sprintf((char*)lcd_id,"LCDID:%04X",lcddev.id);//将LCD ID打印到lcd_id数组。

POINT_COLOR=RED;

LCD_ShowString(30,40,200,24,24,"MiniSTM32 ^_^");

LCD_ShowString(30,70,200,16,16,"TFTLCDTEST");

LCD_ShowString(30,90,200,16,16,"ATOM@ALIENTEK");

LCD_ShowString(30,110,200,16,16,lcd_id); //显示LCD ID LCD_ShowString(30,130,200,12,12,"2014/3/7");

}

再贴一段switch语句的格式,自己老是忘记:

Switch(x)

{

Case0: LCD_ShowString(30,40,200,24,24,"Mini STM32 ^_^"); break;

Case1: LCD_ShowString(30,40,200,24,24,"Mini STM32 ^_^"); break;

****

****

}

最后贴出主函数:

#include "delay.h"

#include "sys.h"

#include "usart.h"

#include "lcd.h"

#include "button.h"

#include "led.h"

int main(void)

{

u8temp;

u32i=0,j;

u8lcd_id[12]; //存放LCD ID字符串

delay_init(); //延时函数初始化

uart_init(9600); //串口初始化为9600

LCD_Init();

Button_Init();

LED_Init();

POINT_COLOR=RED;

sprintf((char*)lcd_id,"LCDID:%04X",lcddev.id);//将LCD ID打印到lcd_id数组。

POINT_COLOR=RED;

LCD_ShowString(30,40,200,24,24,"MiniSTM32 ^_^");

LCD_ShowString(30,70,200,16,16,"TFTLCDTEST");

LCD_ShowString(30,90,200,16,16,"ATOM@ALIENTEK");

LCD_ShowString(30,110,200,16,16,lcd_id); //显示LCD ID

LCD_ShowString(30,130,200,12,12,"2016/2/8HELLO Monkey Year");

while(1)

{

i++;

temp=Button_Scan(0);

switch(temp)

{

//case0:LCD_ShowString(30,150,200,16,16,"NO KEY IS PRESSED"); break;

case1:LCD_ShowString(30,150,200,16,16,"KEY0 IS PRESSED "); break;

case2:LCD_ShowString(30,150,200,16,16,"KEY1 IS PRESSED "); break;

case3:LCD_ShowString(30,150,200,16,16,"WK_UP IS PRESSED "); break;

}

if(i>1000000)

{

if(j%2) GPIO_SetBits(GPIOA,GPIO_Pin_8);

elseGPIO_ResetBits(GPIOA,GPIO_Pin_8);

j++;

i=0;

}

}

}

主函数中我还加入了LED显示,这里需要注意的是LED闪烁不能用延时函数。

BTW如果你的光标突然变成了黑色小方块,按一下insert(0)即可切换。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: