【兆易GD32F310测评】+KEY扩展与参数设置
<p style="text-align:justify">由于板载的用户键只有一个,在进行参数设置时是很受限制的,为此可为其配备一个薄膜软按键以进行按键扩展,该薄膜按键共有4个键位,可满足常规参数设置需要,其连接形式如图所示。</p><p> </p>
<p>按键扩展</p>
<p>该按键所连接的引脚为:</p>
<p>K1---PA6</p>
<p>K2---PA7</p>
<p>K3---PB0</p>
<p>K4---PB1</p>
<p>相应的按键初始化函数为:</p>
<pre>
<code class="language-cpp">void key_init(void)
{
rcu_periph_clock_enable(RCU_GPIOA);
rcu_periph_clock_enable(RCU_CFGCMP);
gpio_mode_set(GPIOA, GPIO_MODE_INPUT, GPIO_PUPD_PULLUP, GPIO_PIN_6|GPIO_PIN_7);
rcu_periph_clock_enable(RCU_GPIOB);
gpio_mode_set(GPIOB, GPIO_MODE_INPUT, GPIO_PUPD_PULLUP, GPIO_PIN_0|GPIO_PIN_1);
}</code></pre>
<p>配备按键状态的函数分别为:</p>
<pre>
<code class="language-cpp">uint8_t key1_state_get(void)
{
return gpio_input_bit_get(GPIOA,GPIO_PIN_6);
}
uint8_t key2_state_get(void)
{
return gpio_input_bit_get(GPIOA,GPIO_PIN_7);
}
uint8_t key3_state_get(void)
{
return gpio_input_bit_get(GPIOB,GPIO_PIN_0);
}
uint8_t key4_state_get(void)
{
return gpio_input_bit_get(GPIOB,GPIO_PIN_1);
}</code></pre>
<p>实现RTC参数设置的测试主程序为:</p>
<pre>
<code class="language-cpp">int main(void)
{
uint16_t i=0,j=0,k=0;
systick_config();
rcu_periph_clock_enable(RCU_GPIOA);
gpio_mode_set(GPIOA, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE, GPIO_PIN_1);
gpio_output_options_set(GPIOA, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_1);
gpio_bit_reset(GPIOA, GPIO_PIN_1);
gd_eval_led_init(LED1);
rcu_periph_clock_enable(RCU_GPIOB);
gpio_mode_set(GPIOB, GPIO_MODE_OUTPUT, GPIO_PUPD_PULLUP, GPIO_PIN_6|GPIO_PIN_7);
gpio_output_options_set(GPIOB, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_6|GPIO_PIN_7);
gpio_bit_reset(GPIOB, GPIO_PIN_6);
gpio_bit_reset(GPIOB, GPIO_PIN_7);
OLED_Init();
OLED_Clear();
OLED_ShowString(20,0,"GD32F310G",16);
OLED_ShowString(20,2,"OLED & RTC ",16);
OLED_ShowString(20,4," : :",16);
OLED_ShowNum(68,4,i,2,16);
key_init();
delay_1ms(100);
while(1){
if(RESET == key1_state_get()){
i=i+1;
delay_1ms(50);
while(RESET == key1_state_get());
}
OLED_ShowNum(68,4,i,2,16);
if(RESET == key4_state_get()){
j=j+1;
delay_1ms(50);
while(RESET == key4_state_get());
}
OLED_ShowNum(44,4,j,2,16);
if(RESET == key3_state_get()){
k=k+1;
delay_1ms(50);
while(RESET == key3_state_get());
}
OLED_ShowNum(20,4,k,2,16);
delay_1ms(50);
}
}</code></pre>
<p>这样,就可以用该按键来设置RTC的测试值了。</p>
工具不少嘛,期待精彩作品呀! lugl4313820 发表于 2022-5-9 22:05
工具不少嘛,期待精彩作品呀!
<p>哈哈,都是一些压箱子底的老物件了。</p>
页:
[1]