1、用构件调用方式实现
(1)先初始化三种颜色的灯
gpio_init(LIGHT_GREEN,GPIO_OUTPUT,LIGHT_OFF); //初始化绿灯
gpio_init(LIGHT_RED,GPIO_OUTPUT,LIGHT_OFF); //初始化红灯
gpio_init(LIGHT_BLUE,GPIO_OUTPUT,LIGHT_OFF); //初始化蓝灯
(2)添加实现代码
ch = uart_re1(UART_User,&flag);
// 若接收到字符flag为1,未接收到则为0
if(flag){
// 收到字符时的处理
if(ch == 'G'){
gpio_set(LIGHT_GREEN,LIGHT_ON); // 亮绿灯
gpio_set(LIGHT_RED,LIGHT_OFF); // 关闭红灯
gpio_set(LIGHT_BLUE,LIGHT_OFF); // 关闭蓝灯
} else if(ch == 'R'){
gpio_set(LIGHT_RED,LIGHT_ON); // 亮红灯
gpio_set(LIGHT_GREEN,LIGHT_OFF); // 关闭绿灯
gpio_set(LIGHT_BLUE,LIGHT_OFF); // 关闭蓝灯
} else if(ch == 'B'){
gpio_set(LIGHT_BLUE,LIGHT_ON); // 亮蓝灯
gpio_set(LIGHT_RED,LIGHT_OFF); // 关闭红灯
gpio_set(LIGHT_GREEN,LIGHT_OFF); // 关闭绿灯
} else {
// 默认情况下关闭所有LED灯
gpio_set(LIGHT_RED,LIGHT_OFF); // 关闭红灯
gpio_set(LIGHT_GREEN,LIGHT_OFF); // 关闭绿灯
gpio_set(LIGHT_BLUE,LIGHT_OFF); // 关闭蓝灯
}
printf("%c\n",ch+1); // 显示下一个字符
}
当输入R时,亮红灯;
当输入B时,亮蓝灯
当输入G时,亮绿灯;
其余情况,灯不亮
2、UART部分用直接地址方式实现(即不调用uart.c中的函数,其他部分如GPIO、中断设置可调用函数)
uint8_t receivedChar; // 定义接收到的字符变量
// (1.5)用户外设模块初始化
gpio_init(LIGHT_BLUE, GPIO_OUTPUT, LIGHT_OFF); // 初始化蓝灯为关闭状态
gpio_init(LIGHT_RED, GPIO_OUTPUT, LIGHT_OFF); // 初始化红灯为关闭状态
gpio_init(LIGHT_GREEN, GPIO_OUTPUT, LIGHT_OFF); // 初始化绿灯为关闭状态
for (;;) {
// 检查接收缓冲区是否不满,如果不满,则尝试接收字符
if (*uart_isr & (0x1UL << 5U)) {
// 读取接收到的字符,并将其强制转换为 char 类型
receivedChar = (char)(*uart_tdr & 0xFF);
// 等待发送缓冲区变为空闲状态
for (volatile uint32_t j = 0; j <= 30000; j++) {
if (*uart_isr & (0x1UL << 7UL)) {
// 发送缓冲区为空,发送接收到的字符加1
*uart_tdr = receivedChar + 1;
break;
}
}
// 根据接收到的字符点亮相应的LED灯
if (receivedChar == 'B') {
// 如果接收到 'B',则点亮蓝灯,关闭其他灯
gpio_set(LIGHT_BLUE, LIGHT_ON);
gpio_set(LIGHT_RED, LIGHT_OFF);
gpio_set(LIGHT_GREEN, LIGHT_OFF);
} else if (receivedChar == 'R') {
// 如果接收到 'R',则点亮红灯,关闭其他灯
gpio_set(LIGHT_RED, LIGHT_ON);
gpio_set(LIGHT_GREEN, LIGHT_OFF);
gpio_set(LIGHT_BLUE, LIGHT_OFF);
} else if (receivedChar == 'G') {
// 如果接收到 'G',则点亮绿灯,关闭其他灯
gpio_set(LIGHT_GREEN, LIGHT_ON);
gpio_set(LIGHT_RED, LIGHT_OFF);
gpio_set(LIGHT_BLUE, LIGHT_OFF);
} else {
// 如果接收到其他字符,则关闭所有灯
gpio_set(LIGHT_RED, LIGHT_OFF);
gpio_set(LIGHT_GREEN, LIGHT_OFF);
gpio_set(LIGHT_BLUE, LIGHT_OFF);
}
}
}
可以看到和第一种实现方式一样,
输入’R’,‘G’,‘B’,对应颜色灯亮。
输出其他字符时,不亮灯
4babcdbe6f9f7