jinglixixi 发表于 2022-5-9 20:54

【兆易GD32F310测评】+KEY扩展与参数设置

<p style="text-align:justify">由于板载的用户键只有一个,在进行参数设置时是很受限制的,为此可为其配备一个薄膜软按键以进行按键扩展,该薄膜按键共有4个键位,可满足常规参数设置需要,其连接形式如图所示。</p>

<p> &nbsp;</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 &amp; 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

工具不少嘛,期待精彩作品呀!

jinglixixi 发表于 2022-5-9 22:47

lugl4313820 发表于 2022-5-9 22:05
工具不少嘛,期待精彩作品呀!

<p>哈哈,都是一些压箱子底的老物件了。</p>
页: [1]
查看完整版本: 【兆易GD32F310测评】+KEY扩展与参数设置