438|2

8

帖子

0

资源

一粒金砂(中级)

【ESK32-360测评】+按键控件LED个数流水灯闪烁,并按键操作有提示音

本帖最后由 szkei 于 2020-8-8 23:18 编辑

 一,感言。

               从2010年开始有所了解合泰,但因当时经济能力影响无法购买编程器,所以未能用上合泰。一晃10年过去,在7月份时来EEWROLD上转转,发现了合泰ESK32-360开发板进行测评活动,即时就申请了,结果EEWROLD给了我这次的机会,可以与合泰有个零距离的接触。当收到板子时,有种莫明的兴奋感,很想打开包装一见【ESK32-360开发板】真容,但还是自己定力足,等到回家才打开,结果出乎意料的是开发板由外到内的包装都是那么讲究,做到真材实料,这是EEWROLD及合泰工作人员对工作要求做到一丝不苟的良好结果。感谢EEWROLD及合泰的工作人员对体验者的关心。

二,【ESK32-360开发板】真容。

        拆开包装后,被开发板的大块板吸引了,特别是开发板按照教科书的标准要求来Layout,顶层横画,底层竖画,丝印贴近元件封装,这是这么的专业。好的来上图一起见证。

包装1.jpg 包装2.jpg 包装3.jpg 顶面.jpg 底面.jpg 通电工作效果.jpg

 

三,测试目标及介绍。

每一个体验者大多数的情况下拿到开发板都是从点灯开始,这是每种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,建立此标题所需要如下函数。

image-20200808193529-2.png 5,关于端口初始化,合泰给出了简单实用的函数,详细请参阅例程中的HT32F1xxxx_Programmer_Guide_v004_2103.chm文件,查找下图的位置,查看Functions下的方法函数。

image-20200808195349-3.png

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。

六,视频及整个测试项目原代码。

点灯图片.jpg

视频地址http://training.eeworld.com.cn/course/5749/learn?preview=1#lesson/26888

原代码 EEWORLD_HT32F1654_TEST__LED BUZZER.rar (4.73 MB, 下载次数: 0)


回复

2557

帖子

1

资源

五彩晶圆(初级)

画的挺好看,看起来比其他xx,yy的板子做的细致得多。是一块“开发板”的长相了。

个人签名人已离开,无事别找,找也找不到。

回复

8

帖子

0

资源

一粒金砂(中级)

freebsder 发表于 2020-8-7 23:01 画的挺好看,看起来比其他xx,yy的板子做的细致得多。是一块“开发板”的长相了。

有同感


回复
您需要登录后才可以回帖 登录 | 注册

关闭
站长推荐上一条 1/5 下一条

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区知春路23号集成电路设计园量子银座1305 电话:(010)82350740 邮编:100191

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号 电信业务审批[2006]字第258号函 京公海网安备110108001534 Copyright © 2005-2020 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表