【ESK32-360测评】+按键控件LED个数流水灯闪烁,并按键操作有提示音
[复制链接]
本帖最后由 szkei 于 2020-8-8 23:18 编辑
一,感言。
从2010年开始有所了解合泰,但因当时经济能力影响无法购买编程器,所以未能用上合泰。一晃10年过去,在7月份时来EEWROLD上转转,发现了合泰ESK32-360开发板进行测评活动,即时就申请了,结果EEWROLD给了我这次的机会,可以与合泰有个零距离的接触。当收到板子时,有种莫明的兴奋感,很想打开包装一见【ESK32-360开发板】真容,但还是自己定力足,等到回家才打开,结果出乎意料的是开发板由外到内的包装都是那么讲究,做到真材实料,这是EEWROLD及合泰工作人员对工作要求做到一丝不苟的良好结果。感谢EEWROLD及合泰的工作人员对体验者的关心。
二,【ESK32-360开发板】真容。
拆开包装后,被开发板的大块板吸引了,特别是开发板按照教科书的标准要求来Layout,顶层横画,底层竖画,丝印贴近元件封装,这是这么的专业。好的来上图一起见证。
三,测试目标及介绍。
每一个体验者大多数的情况下拿到开发板都是从点灯开始,这是每种MCU最基础的测试。从标题可以看出是按键来控制LED的个数流水灯闪烁。
1,wakeup键来控制一粒LED灯的闪烁。
2,key1控制二粒灯的闪烁。
3,key2按制三料的闪烁。
4,开始上电是所有LED处于OFF状态。
四,keil5环境搭建及功能实现。
1,建立环境,因为合泰单片机资料相对于其它的比较少,所以只能用这次测评给出的例程进行移植。
2,解压随附的“HT32_STD_1xxxx_FWLib_v004_2103.zip”压缩包。将文件夹“HT32_STD_1xxxx_FWLib_v004_2103”改为“EEWORLD_HT32F1654_TEST__LED+BUZZER”。后打开到..\project_template\IP\Example,将maic.c文件给删除。再打开文件夹MDK_ARMv5双击Project_1654.uvprojx。
3,打开keil5软件后,在左边项目栏的User下重新新建一个main.c文件,并如下添加头文件
#include "ht32.h"
#include "ht32_board.h"
#include "ht32_board_config.h"
4,建立此标题所需要如下函数。
5,关于端口初始化,合泰给出了简单实用的函数,详细请参阅例程中的HT32F1xxxx_Programmer_Guide_v004_2103.chm文件,查找下图的位置,查看Functions下的方法函数。
6,这次测试只是用到以下7个函数:
void HT32F_DVB_LEDInit (LED_TypeDef HT_LEDn);//LED初始化
void HT32F_DVB_LEDOn (LED_TypeDef HT_LEDn) ;//LED开
void HT32F_DVB_LEDOff (LED_TypeDef HT_LEDn) ;//LED关
void HT32F_DVB_PBInit (BUTTON_TypeDef BUTTON_x, BUTTON_MODE_TypeDef BUTTON_MODE_x) ; //按键初始化
u32 HT32F_DVB_PBGetState (BUTTON_TypeDef BUTTON_x) ;//获得键的状态
void HT32F_DVB_BuzzerFun (u16 hFreq, u8 bDuty, u32 mode) ;//蜂鸣器初始化
void HT32F_DVB_BuzzerOutputCmd (ControlStatus Control) ;//蜂鸣器使能
每一个函数有详细的阐释,值得其它软件人员阅览此使用帮助文档,会给到一份意想不到的收获效果,就当是一种自我交流提升手册。
7,具体实现代码如下:
按下键时,蜂鸣器会报音一次,要释放按键再重新按下才才再次报音。
#include "ht32.h"
#include "ht32_board.h"
#include "ht32_board_config.h"
u8 led_show_amount_value = 0; //led显示数量值
u8 forx = 0; //循环显示
bool key_down_flag = FALSE; //按键按下状态
void LED_Init(void);
void LED_Function(void);
void SET_LED_SHOW_COUNT(void);
void Delay(u32 clock);
int main(void){
LED_Init();
while(1){
LED_Function();
}
}
void LED_Init(void){
/* LED初始化 */
HT32F_DVB_LEDInit(HT_LED1);
HT32F_DVB_LEDInit(HT_LED2);
HT32F_DVB_LEDInit(HT_LED3);
/* 按键初始化 */
HT32F_DVB_PBInit(BUTTON_WAKEUP,BUTTON_MODE_GPIO);
HT32F_DVB_PBInit(BUTTON_KEY1,BUTTON_MODE_GPIO);
HT32F_DVB_PBInit(BUTTON_KEY2,BUTTON_MODE_GPIO);
/* LED状态关闭 */
HT32F_DVB_LEDOff(HT_LED1);
HT32F_DVB_LEDOff(HT_LED2);
HT32F_DVB_LEDOff(HT_LED3);
HT32F_DVB_BuzzerFun(2400,50,0); //蜂鸣器初始化
}
void SET_LED_SHOW_COUNT(void){
if(HT32F_DVB_PBGetState(BUTTON_WAKEUP) == SET){
if(!key_down_flag){
HT32F_DVB_BuzzerOutputCmd(ENABLE); //使能蜂鸣器
key_down_flag = TRUE;
}else{
HT32F_DVB_BuzzerOutputCmd(DISABLE); //禁止使能蜂鸣器
}
led_show_amount_value = 1;
}else if(HT32F_DVB_PBGetState(BUTTON_KEY1) == RESET){
if(!key_down_flag){
HT32F_DVB_BuzzerOutputCmd(ENABLE);
key_down_flag = TRUE;
}else{
HT32F_DVB_BuzzerOutputCmd(DISABLE); //禁止使能蜂鸣器
}
led_show_amount_value = 2;
}else if(HT32F_DVB_PBGetState(BUTTON_KEY2) == RESET){
if(!key_down_flag){
HT32F_DVB_BuzzerOutputCmd(ENABLE);
key_down_flag = TRUE;
}else{
HT32F_DVB_BuzzerOutputCmd(DISABLE); //禁止使能蜂鸣器
}
led_show_amount_value = 3;
}else if(key_down_flag){
HT32F_DVB_BuzzerOutputCmd(DISABLE); //禁止使能蜂鸣器
key_down_flag = FALSE;
}
}
void Delay(u32 clock){
do{
__NOP();
}while(clock--);
}
void LED_Function(void){
SET_LED_SHOW_COUNT();
for(forx = 0;forx < led_show_amount_value;forx++){
Delay(3000000);
SET_LED_SHOW_COUNT();
HT32F_DVB_LEDOn((LED_TypeDef)forx);
Delay(3000000);
SET_LED_SHOW_COUNT();
HT32F_DVB_LEDOff((LED_TypeDef)forx);
}
}
五,用后感想。
对于官方给出这几个函数,给一些不了解硬件的软件工程师来讲无疑是一种福音。点击代码HT_LED1选择去定义会弹出ht32f1654_dvb.h。在此文件中可以修改想要的端口从而实现此端口快速定义及使用,这样会给开发者带来质的速度及代码质量,会减少好多其它由于个人编写的未知BUG。
六,视频及整个测试项目原代码。
视频地址https://training.eeworld.com.cn/course/5749/learn?preview=1#lesson/26888
原代码
EEWORLD_HT32F1654_TEST__LED BUZZER.rar
(4.73 MB, 下载次数: 0)
|