LCDSEG12 和 LCDSEG13 的声明已经被修改为数组了,怎么声明数组
时间: 2024-03-17 18:44:22 浏览: 30
在 C 语言中声明一个数组需要指定数组的类型和数组的大小。在这个例子中,`LCDSEG12` 和 `LCDSEG13` 都是类似于二维数组的变量,它们的每个元素都包含一个字节。因此,你可以将它们声明为如下所示的数组:
```c
unsigned char LCDSEG12[2][1];
unsigned char LCDSEG13[2][1];
```
这里的 `[2][1]` 意味着 `LCDSEG12` 和 `LCDSEG13` 都是由两个长度为 1 的数组组成的二维数组。你可以根据实际需要修改数组的大小。注意,这里的 `unsigned char` 是数组元素的类型,它指定了数组元素的大小和数据类型。
声明数组时,你需要在函数的开头或者全局作用域中进行。在这个例子中,你需要在函数 `displayMinutesOnLCD` 的外面进行声明,或者在程序的顶部进行声明。
相关问题
void LCD_Display(void) { LCDSEG8 = 0x0F; LCDSEG9 = 0x0F; LCDSEG10 = 0x05; LCDSEG11 = 0x0B; LCDSEG12 = 0x01; LCDSEG13 = 0x0F; LCDSEG14 = 0x02; LCDSEG15 = 0x07; } 如果我告诉你LCDSEG8和LCDSEG9分别对应显示数字8; LCDSEG10和LCDSEG11分别对应显示数字2; LCDSEG12和LCDSEG13分别对应显示数字3; LCDSEG14和LCDSEG15分别对应显示数字4,那么我的问题来了,如果我要显示5555你知道要怎么显示吗
如果要显示数字5555,可以按照以下方法设置LCDSEG8~LCDSEG15的值:
LCDSEG8 = 0x05;
LCDSEG9 = 0x05;
LCDSEG10 = 0x05;
LCDSEG11 = 0x05;
LCDSEG12 = 0x0F;
LCDSEG13 = 0x0F;
LCDSEG14 = 0x0F;
LCDSEG15 = 0x0F;
这样LCD屏幕上就会显示数字5555。
void LCD_Display_min(min) { int a; int b; a=min/10; b=min%10; switch(b) { case 0: LCDSEG14 = 0x07; LCDSEG15 = 0x0D; break; case 1: LCDSEG14= 0x00; LCDSEG15 = 0x05; break; case 2: LCDSEG14 = 0x05; LCDSEG15 = 0x0B; break; case 3: LCDSEG14 = 0x01; LCDSEG15 = 0x0F; break; case 4: LCDSEG14 = 0x02; LCDSEG15 = 0x07; break; case 5: LCDSEG14 = 0x03; LCDSEG15 = 0x0E; break; case 6: LCDSEG14 = 0x07; LCDSEG15 = 0x0E; break; case 7: LCDSEG14 = 0x01; LCDSEG15 = 0x05; break; case 8: LCDSEG14 = 0x07; LCDSEG15 = 0x0F; break; case 9: LCDSEG14 = 0x03; LCDSEG15 = 0x0F; break; } switch(a) { case 0: LCDSEG12 = 0x07; LCDSEG13 = 0x0D; break; case 1: LCDSEG12 = 0x00; LCDSEG13 = 0x05; break; case 2: LCDSEG12 = 0x05; LCDSEG13 = 0x0B; break; case 3: LCDSEG12 = 0x01; LCDSEG13 = 0x0F; break; case 4: LCDSEG12 = 0x02; LCDSEG13 = 0x07; break; case 5: LCDSEG12 = 0x03; LCDSEG13 = 0x0E; break; case 6: LCDSEG12 = 0x07; LCDSEG13 = 0x0E; break; } // LCDSEG8 = 15; // LCDSEG9 = 0x0F; // LCDSEG10 = 0x05; // LCDSEG11 = 0x0B; // LCDSEG12 = 0x01; // LCDSEG13 = 0x0F; // LCDSEG14 = 0x02; // LCDSEG15 = 0x07; }帮我把这个代码优化下
以下是对代码的一些优化建议:
1. 函数名可以更具体地表示函数的作用,比如 `displayMinutesOnLCD`。
2. 可以将 `min` 参数声明为 `unsigned int` 类型,因为时间不会是负数。
3. 可以将 `a` 和 `b` 声明为 `unsigned int` 类型,因为它们的值不会为负数。
4. 可以使用数组和循环来简化代码。比如可以定义一个名为 `digitSegments` 的二维数组,存储每个数字对应的 LCD 数码管段码。然后可以使用循环来依次显示每个数字的数码管段码。
5. 可以将相同的段码赋值语句提取出来,减少重复代码。比如可以将 `LCDSEG14` 和 `LCDSEG15` 的赋值语句提取到一个函数中。
6. 可以使用 `const` 关键字定义常量,比如 `const int DIGIT_SEGMENTS[10][2]`,这样可以提高代码的可读性和可维护性。
下面是对优化后的代码示例:
```c
void displayMinutesOnLCD(unsigned int minutes) {
const int DIGIT_SEGMENTS[10][2] = {
{0x07, 0x0D}, // 0
{0x00, 0x05}, // 1
{0x05, 0x0B}, // 2
{0x01, 0x0F}, // 3
{0x02, 0x07}, // 4
{0x03, 0x0E}, // 5
{0x07, 0x0E}, // 6
{0x01, 0x05}, // 7
{0x07, 0x0F}, // 8
{0x03, 0x0F} // 9
};
unsigned int a = minutes / 10;
unsigned int b = minutes % 10;
for (int i = 0; i < 2; i++) {
const int* segments = DIGIT_SEGMENTS[i == 0 ? a : b];
LCDSEG12 + i*2 = segments[0];
LCDSEG13 + i*2 = segments[1];
}
}
```
请注意,这只是一种可能的优化方式,具体的优化策略需要根据具体的应用场景和需求来确定。
阅读全文