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

这次要实现的功能是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)即可切换。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值