<备战蓝桥杯之嵌入式>——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)即可切换。
需要注意一下几个点:
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)即可切换。
相关文章推荐
- 蓝牙传送_多点连接 (适用于>iOS7)
- Apache shiro 笔记整理之HelloWorld
- 方法
- java(16)--利用session防止重复登录操作
- Kafka 0.9.0 文档翻译-1、Getting Started
- javascript之一切皆为对象2
- 什么时候该考虑辞职
- STL sort源码剖析(转)
- JDBC最全面的介绍
- iOS面试题七
- android开发中 ScrollView当显示超出当前页面时自动移动到最底端
- (一四八)多重继承
- <备战蓝桥杯之嵌入式>——SYSTICK
- 项目开发-树形层级结构中的数量统计
- uva 10670 Work Reduction
- CodeIgniter简要总结
- JS数组定义及详解
- python学习笔记二--列表
- 新手之路——java JVM_Bind问题解决
- Mac下Hexo+GitHub搭建博客图文教程