代码解释if(flag==1) { OLED_ShowCH(0,2,"Banana"); OLED_ShowCH(0,4,"2023.1.23"); OLED_ShowCH(0,6,"sichuan fujian"); } if(flag==2) { OLED_ShowCH(0,2,"Apple"); OLED_ShowCH(0,4,"2023.1.18"); OLED_ShowCH(0,6,"shandong yunan"); } if(flag==3) { OLED_ShowCH(0,2,"fish"); OLED_ShowCH(0,4,"2023.1.31"); OLED_ShowCH(0,6,"rizhao jinan"); }
时间: 2023-11-02 07:04:58 浏览: 37
这段代码是一个条件语句,根据变量`flag`的值来判断执行哪个分支。
如果`flag`的值为1,那么执行第一个分支,会在OLED屏幕上的第2行、第4行和第6行分别显示“Banana”、“2023.1.23”和“sichuan fujian”。
如果`flag`的值为2,那么执行第二个分支,会在OLED屏幕上的第2行、第4行和第6行分别显示“Apple”、“2023.1.18”和“shandong yunan”。
如果`flag`的值为3,那么执行第三个分支,会在OLED屏幕上的第2行、第4行和第6行分别显示“fish”、“2023.1.31”和“rizhao jinan”。
相关问题
解释代码。#include "led.h" #include "delay.h" #include "key.h" #include "sys.h" #include "lcd.h" #include "usart.h" #include "adc.h" #include "ds18b20.h" #include "oled_iic.h" short temperature; unsigned char Tx_Buf[10]; extern u8 flag; int main(void) { float temp; delay_init(); NVIC_Configuration(); uart_init1(9600); LED_Init(); // KEY_Init(); OLED_Init(); OLED_Clear(); OLED_ShowCH(0,0,"tem"); while(DS18B20_Init()) } while(1) { temperature=DS18B20_Get_Temp(); temperature=temperature/100*10+temperature%100/10; OLED_ShowNum(40, 0, temperature, 2,1); if(flag==1) { OLED_ShowCH(0,2,"Banana"); OLED_ShowCH(0,4,"2023.1.23"); OLED_ShowCH(0,6,"sichuan fujian"); } if(flag==2) { OLED_ShowCH(0,2,"Apple"); OLED_ShowCH(0,4,"2023.1.18"); OLED_ShowCH(0,6,"shandong yunan"); } if(flag==3) { OLED_ShowCH(0,2,"fish"); OLED_ShowCH(0,4,"2023.1.31"); OLED_ShowCH(0,6,"rizhao jinan"); } delay_ms(250); if(temperature>30) { GPIO_SetBits(GPIOA,GPIO_Pin_0); } if(temperature<30) { GPIO_ResetBits(GPIOA,GPIO_Pin_0); } } }
这段代码是一份嵌入式系统的 C 语言程序,用于控制温度传感器 DS18B20 和 OLED 显示屏。主要功能是读取温度传感器的温度数据并在 OLED 显示屏上显示出来,同时根据温度值控制 LED 灯的开关。
具体实现过程如下:
1. 引入需要的头文件包括 led.h、delay.h、key.h、sys.h、lcd.h、usart.h、adc.h、ds18b20.h 和 oled_iic.h。
2. 初始化系统延时、中断配置、串口通信、LED 灯和 OLED 显示屏。
3. 判断温度传感器 DS18B20 是否初始化成功。
4. 进入主循环,读取温度传感器的温度数据并在 OLED 显示屏上显示出来。同时根据温度值控制 LED 灯的开关。
5. 根据外部的 flag 变量的值,在 OLED 显示屏上显示不同的信息,其中 flag 的值由外部设备设置。
6. 延时 250 毫秒后再次执行读取温度数据和控制 LED 灯的操作。
需要注意的是,该程序的具体实现可能会因为硬件平台的不同而略有差异。例如,其中的 GPIO_SetBits 和 GPIO_ResetBits 函数可能是根据具体的开发板而定制的。
帮我改写一下这段程序,要求更换为不使用templatetemplate <size_t ARRAY_SIZE> void common_print_border(struct INFORMATION(*information)[ARRAY_SIZE], int L, int C, int cell_width, int cell_height, bool inner_border) { int X = 0, Y = 0; for (int j = 0; j < C; j++) { X = 3 + cell_width / 2 + j * (cell_width + 2 * inner_border); cct_showch(X, 1, information[0][j].C); } for (int i = 0; i < L; i++) { Y = 3 + i * (cell_height + inner_border); if (i == 0) { cct_showstr(2, 2, "╔", COLOR_HWHITE, COLOR_BLACK); for (int j = 0; j < C; j++) { X = 4 + j * (cell_width + 2 * inner_border); cct_showstr(X, 2, "═", COLOR_HWHITE, COLOR_BLACK, cell_width / 2); if (inner_border && j < C - 1) { X += cell_width; cct_showstr(X, 2, "╦", COLOR_HWHITE, COLOR_BLACK); } } X += cell_width; cct_showstr(X, 2, "╗", COLOR_HWHITE, COLOR_BLACK); } for (int j = 0; j <= C; j++) { if (inner_border || j == 0 || j == C) { X = 2 + j * (cell_width + 2 * inner_border); if (!inner_border && j == C) { X += 2; } for (int k = 0; k < cell_height; k++) { if (k == cell_height / 2) { cct_showch(0, Y + k, information[i][0].L); } cct_showstr(X, Y + k, "║", COLOR_HWHITE, COLOR_BLACK); } } } Y += cell_height; if (inner_border && i < L - 1) { cct_showstr(2, Y, "╠", COLOR_HWHITE, COLOR_BLACK); for (int j = 0; j < C; j++) { X = 4 + j * (cell_width + 2 * inner_border); cct_showstr(X, Y, "═", COLOR_HWHITE, COLOR_BLACK, cell_width / 2); X += cell_width; cct_showstr(X, Y, (j < C - 1) ? "╬" : "╣", COLOR_HWHITE, COLOR_BLACK); } } if (i == L - 1) { cct_showstr(2, Y, "╚", COLOR_HWHITE, COLOR_BLACK); for (int j = 0; j < C; j++) { X = 4 + j * (cell_width + 2 * inner_border); cct_showstr(X, Y, "═", COLOR_HWHITE, COLOR_BLACK, cell_width / 2); if (inner_border && j < C - 1) { X += cell_width; cct_showstr(X, Y, "╩", COLOR_HWHITE, COLOR_BLACK); } } X += cell_width; cct_showstr(X, Y, "╝", COLOR_HWHITE, COLOR_BLACK); } } return; }
以下是不使用template的改写程序:
void common_print_border(struct INFORMATION information[][ARRAY_SIZE], int L, int C, int cell_width, int cell_height, bool inner_border) {
int X = 0, Y = 0;
for (int j = 0; j < C; j++) {
X = 3 + cell_width / 2 + j * (cell_width + 2 * inner_border);
cct_showch(X, 1, information[0][j].C);
}
for (int i = 0; i < L; i++) {
Y = 3 + i * (cell_height + inner_border);
if (i == 0) {
cct_showstr(2, 2, "╔", COLOR_HWHITE, COLOR_BLACK);
for (int j = 0; j < C; j++) {
X = 4 + j * (cell_width + 2 * inner_border);
cct_showstr(X, 2, "═", COLOR_HWHITE, COLOR_BLACK, cell_width / 2);
if (inner_border && j < C - 1) {
X += cell_width;
cct_showstr(X, 2, "╦", COLOR_HWHITE, COLOR_BLACK);
}
}
X += cell_width;
cct_showstr(X, 2, "╗", COLOR_HWHITE, COLOR_BLACK);
}
for (int j = 0; j <= C; j++) {
if (inner_border || j == 0 || j == C) {
X = 2 + j * (cell_width + 2 * inner_border);
if (!inner_border && j == C) {
X += 2;
}
for (int k = 0; k < cell_height; k++) {
if (k == cell_height / 2) {
cct_showch(0, Y + k, information[i][0].L);
}
cct_showstr(X, Y + k, "║", COLOR_HWHITE, COLOR_BLACK);
}
}
}
Y += cell_height;
if (inner_border && i < L - 1) {
cct_showstr(2, Y, "╠", COLOR_HWHITE, COLOR_BLACK);
for (int j = 0; j < C; j++) {
X = 4 + j * (cell_width + 2 * inner_border);
cct_showstr(X, Y, "═", COLOR_HWHITE, COLOR_BLACK, cell_width / 2);
X += cell_width;
cct_showstr(X, Y, (j < C - 1) ? "╬" : "╣", COLOR_HWHITE, COLOR_BLACK);
}
}
if (i == L - 1) {
cct_showstr(2, Y, "╚", COLOR_HWHITE, COLOR_BLACK);
for (int j = 0; j < C; j++) {
X = 4 + j * (cell_width + 2 * inner_border);
cct_showstr(X, Y, "═", COLOR_HWHITE, COLOR_BLACK, cell_width / 2);
if (inner_border && j < C - 1) {
X += cell_width;
cct_showstr(X, Y, "╩", COLOR_HWHITE, COLOR_BLACK);
}
}
X += cell_width;
cct_showstr(X, Y, "╝", COLOR_HWHITE, COLOR_BLACK);
}
}
return;
}