HZCU单片机实验 WCH CH32V103R8T6代码及注释

目录

HZCU单片机实验 WCH CH32V103R8T6

实验一:LED灯显示实验

led.h

led.c

main.c

实验二:独立按键控制实验(中断)

Bsp_button.h

Bsp_button.c

Main.c

实验三:音频控制实验

bsp_Beep.h

bsp_Beep.c

main.c

实验四:PWM输出实验

实验五:串口通讯usart实验(查询法)

bsp_gpio.h

bsp_gpio.c

USART1.c

USART1.h

main.c

实验六:TFT液晶显示实验(SPI总线)

ShohChar

Main.c

实验七:ADC采样实验

ADC.h

ADC.c

main.c

实验八:RGB彩色LED灯实验

bsp_WS2812.h

bsp_WS2812.c

main.c

全部代码和文档 百度网盘链接

链接:https://pan.baidu.com/s/1zUDpFD3FFf-5tfISb8_JnQ?pwd=8888 
提取码:8888 
--来自百度网盘超级会员V3的分享

实验一:LED灯显示实验

led.h

void led_Init(void); 初始化LED引脚的函数。

void led_alloff(void): 关闭所有LED灯的函数。

void led_allon(void): 打开所有LED灯的函数。

void led_liushuideng(void): 控制LED灯流水灯效果的函数。

void led_breath(void): 控制LED灯呼吸灯效果的函数。

void led_666(void): 控制LED灯特殊效果的函数。

led.c

void led_Init(void)

{

    GPIO_InitTypeDef gpio;                           // 定义一个GPIO_InitTypeDef类型的结构体变量gpio,用于配置GPIO

    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);   // 使能GPIOB外设时钟

    gpio.GPIO_Pin = GPIO_Pin_8|GPIO_Pin_9|GPIO_Pin_10|GPIO_Pin_11|GPIO_Pin_12|GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15;   // 设置GPIO的引脚,这里是设置了GPIOB的引脚8-15

    gpio.GPIO_Speed = GPIO_Speed_2MHz;               // 设置GPIO的速度,这里是2MHz

    gpio.GPIO_Mode = GPIO_Mode_Out_PP;               // 设置GPIO的模式为推挽输出模式

    GPIO_Init(GPIOB, &gpio);                          // 初始化GPIOB的引脚为配置好的参数

}

void led_666(void)

{

    led_alloff();                   // 关闭所有LED灯

    uint16_t a = 0x0100;            // 定义变量a并初始化为0x0100 (二进制表示:0000 0001 0000 0000)

    uint16_t b = 0x8000;            // 定义变量b并初始化为0x8000 (二进制表示:1000 0000 0000 0000)

    for(int i = 0; i <= 3; i++) {

        GPIOB->BSHR = a;            // 使用位带操作将变量a的值写入GPIOB的BSHR寄存器

        a = a << 1;                 // 将变量a左移1位

        GPIOB->BSHR = b;            // 使用位带操作将变量b的值写入GPIOB的BSHR寄存器

        b = b >> 1;                 // 将变量b右移1位

        Delay_Ms(500);              // 延时500毫秒

    }

    for(int i = 0; i <= 4; i++) {

        GPIOB->BCR = a;             // 使用位带操作将变量a的值写入GPIOB的BCR寄存器

        a = a >> 1;                 // 将变量a右移1位

        GPIOB->BCR = b;             // 使用位带操作将变量b的值写入GPIOB的BCR寄存器

        b = b << 1;                 // 将变量b左移1位

        Delay_Ms(500);              // 延时500毫秒

    }

}

main.c

#include "debug.h"

int main(void)

{

    led_Init();  // 初始化LED

    Delay_Init();  // 初始化延迟函数

    led_alloff();  // 关闭所有LED灯

    while(1)

    {

        led_allon();  // 打开所有LED灯

        Delay_Ms(500);  // 延迟500毫秒

        led_alloff();  // 关闭所有LED灯

        led_liushuideng();  // 水流灯效果

        Delay_Ms(500);  // 延迟500毫秒

        led_breath();  // 呼吸灯效果

        Delay_Ms(500);  // 延迟500毫秒

        led_666();  // 自定义的灯效

        Delay_Ms(1000);  // 延迟1000毫秒

    }

}

实验二:独立按键控制实验(中断)

Bsp_button.h

#include "bsp.h"

void bsp_ButtonInit(void);

uint8_t bsp_ReadButton(void);

Bsp_button.c

#include "bsp_Button.h"

//使用特殊的 __attribute__((interrupt("WCH-Interrupt-fast")))来修饰中断服务函数

void EXTI0_IRQHandler(void) __attribute__((interrupt("WCH-Interrupt-fast")));

void EXTI1_IRQHandler(void) __attribute__((interrupt("WCH-Interrupt-fast")));

void EXTI2_IRQHandler(void) __attribute__((interrupt("WCH-Interrupt-fast")));

void EXTI3_IRQHandler(void) __attribute__((interrupt("WCH-Interrupt-fast")));

void EXTI4_IRQHandler(void) __attribute__((interrupt("WCH-Interrupt-fast")));

void EXTI9_5_IRQHandler(void) __attribute__((interrupt("WCH-Interrupt-fast")));

void EXTI15_10_IRQHandler(void) __attribute__((interrupt("WCH-Interrupt-fast")));

//extern uint8_t SystemStatus;

uint8_t KeyNum = 0;

uint8_t FormarKeyNum = 0;

void bsp_ButtonInit(void)

{

    GPIO_InitTypeDef  GPIO_InitStructure;

    RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO | RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB, ENABLE);  // 使能PA和PB端口时钟

    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13 | GPIO_Pin_14;  // 选定PA的13和14引脚

    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;  // 设定引脚模式为浮动输入

    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;  // IO口速度

    GPIO_Init(GPIOA, &GPIO_InitStructure);  // 根据设定参数初始化GPIOA

    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3 | GPIO_Pin_4;  // 选定PB的3和4引脚

    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;  // 设定引脚模式为浮动输入

    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;  // IO口速度

    GPIO_Init(GPIOB, &GPIO_InitStructure);  // 根据设定参数初始化GPIOB

bsp_BeepInit();

    //以下为开启中断方式读取键盘

    EXTI_InitTypeDef EXTI_InitStructure;

NVIC_InitTypeDef NVIC_InitStructure;

    // 配置GPIOB的引脚3为外部中断输入,并将其连接到EXTI_Line3上

    GPIO_EXTILineConfig(GPIO_PortSourceGPIOB, GPIO_PinSource3);

    EXTI_InitStructure.EXTI_Line = EXTI_Line3;  // 外部中断线为EXTI_Line3

    EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;  // 外部中断模式为中断模式

    EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;  // 触发方式为下降沿触发

    EXTI_InitStructure.EXTI_LineCmd = ENABLE;  // 使能外部中断线

    EXTI_Init(&EXTI_InitStructure);

    // 配置NVIC中断向量表的参数,使能EXTI3_IRQn中断通道,设置优先级为2,子优先级为2

    NVIC_InitStructure.NVIC_IRQChannel = EXTI3_IRQn;

    NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 2;

    NVIC_InitStructure.NVIC_IRQChannelSubPriority = 2;

    NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;

    NVIC_Init(&NVIC_InitStructure);

    // 配置GPIOB的引脚4为外部中断输入,并将其连接到EXTI_Line4上

    GPIO_EXTILineConfig(GPIO_PortSourceGPIOB, GPIO_PinSource4);

    EXTI_InitStructure.EXTI_Line = EXTI_Line4;  // 外部中断线为EXTI_Line4

    EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;  // 外部中断模式为中断模式

    EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;  // 触发方式为下降沿触发

    EXTI_InitStructure.EXTI_LineCmd = ENABLE;  // 使能外部中断线

    EXTI_Init(&EXTI_InitStructure);

    // 配置NVIC中断向量表的参数,使能EXTI4_IRQn中断通道,设置优先级为2,子优先级为2

    NVIC_InitStructure.NVIC_IRQChannel = EXTI4_IRQn;

    NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 2;

    NVIC_InitStructure.NVIC_IRQChannelSubPriority = 2;

    NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;

    NVIC_Init(&NVIC_InitStructure);

    // 配置GPIOA的引脚13为外部中断输入,并将其连接到EXTI_Line13上

    GPIO_EXTILineConfig(GPIO_PortSourceGPIOA, GPIO_PinSource13);

    EXTI_InitStructure.EXTI_Line = EXTI_Line13;  // 外部中断线为EXTI_Line13

    EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;  // 外部中断模式为中断模式

    EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;  // 触发方式为下降沿触发

    EXTI_InitStructure.EXTI_LineCmd = ENABLE;  // 使能外部中断线

    EXTI_Init(&EXTI_InitStructure);

  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值