/* 将一个无符号长整型数字显示数码管上,num-待显示数字 */ void ShowNumber(ulong num) { signed char i ; uchar buf[8] ; for (i = 0 ; i < 8 ; i ++) { buf[i] = num % 10 ; num = num / 10 ; } for (i = 7 ; i >= 1 ; i --) { if(buf[i] == 0) { ledBuff[i] = 0x00 ; } else break ; } for ( ; i >= 0 ; i --) { ledBuff[i] = ~ledChar[buf[i]] ; } }
时间: 2024-03-31 09:38:07 浏览: 9
这段代码是用来在数码管上显示一个无符号长整型数字的。它的实现思路是将数字逐位取出,存储在一个数组中,然后再将数组中的每个数字对应的数码管显示字符取出,存储在另一个数组中。最终将这个数组中的数码管显示字符发送到数码管上进行显示。其中,ledChar数组存储了每个数字对应的数码管显示字符,ledBuff数组则是用来存储最终要显示在数码管上的数据。在第二个for循环中,为了避免数字前面的0显示在数码管上,需要先将前导0去掉。
相关问题
AT89C518×8 LED点阵屏显示一个字符和一个数字循环程序
好的,以下是AT89C518×8 LED点阵屏显示一个字符和一个数字循环程序的示例代码:
```
#include <reg52.h>
// 定义LED点阵屏的共阴极连接方式
#define LED_COM P0
// 定义LED点阵屏的阴极连接方式
#define LED_SEG P2
// 定义字符和数字
unsigned char code LED_Char = 0x54; // 字符:K
unsigned char code LED_Number = 9; // 数字:9
// 延时函数
void Delay(unsigned int u16ms) {
unsigned int i, j;
for(i = u16ms; i > 0; i--) {
for(j = 110; j > 0; j--);
}
}
// 显示一个字符
void ShowChar(void) {
LED_COM = LED_Char;
}
// 显示一个数字
void ShowNumber(void) {
LED_COM = 0x3F; // 数字在LED点阵屏上的编码为0x3F~0x48
LED_SEG = 0xFE; // 打开第一个数码管
Delay(1); // 延时一段时间
LED_SEG = 0xFF; // 关闭数码管
LED_COM = LED_Number;
}
// 主函数
void main(void) {
// 定义循环计数器
unsigned int i;
// 循环显示一个字符和一个数字
while(1) {
// 显示一个字符
ShowChar();
// 延时一段时间
for(i = 0; i < 1000; i++) {
Delay(1);
}
// 显示一个数字
ShowNumber();
// 延时一段时间
for(i = 0; i < 1000; i++) {
Delay(1);
}
}
}
```
该程序使用了AT89C518微控制器和LED点阵屏,循环显示一个字符和一个数字。其中,ShowChar和ShowNumber函数用于显示一个字符和一个数字,Delay函数用于延时一段时间,主函数则是循环调用这些函数来完成显示的过程。在程序中,字符和数字的值可以通过修改LED_Char和LED_Number变量来改变。
AT89C518×8 LED点阵屏数组方式显示一个字符和一个数字循环程序
好的,以下是AT89C518×8 LED点阵屏数组方式显示一个字符和一个数字循环程序的示例代码:
```
#include <reg52.h>
// 定义LED点阵屏的共阴极连接方式
#define LED_COM P0
// 定义LED点阵屏的阴极连接方式
#define LED_SEG P2
// 定义字符和数字的数组
unsigned char code LED_CharTable[] = {
0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07, 0x7F, 0x6F,
// 0, 1, 2, 3, 4, 5, 6, 7, 8, 9
0x77, 0x7C, 0x39, 0x5E, 0x79, 0x71,
// A, b, C, d, E, F
0x76, 0x30, 0x1E, 0x38, 0x15, 0x54,
// G, H, I, J, K, L
0x3F, 0x73, 0x67, 0x50, 0x6D, 0x78,
// M, n, O, P, q, r
0x3E, 0x6B, 0x4F, 0x5C, 0x73, 0x67,
// S, t, U, V, W, X
0x50, 0x6D, 0x78, 0x1C, 0x2A, 0x76
// Y, Z, -, _, .
};
// 定义字符和数字的索引
unsigned char code LED_IndexTable[] = {
0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99
};
// 定义当前显示的字符和数字的索引
unsigned char g_u8CharIndex = 0;
unsigned char g_u8NumberIndex = 0;
// 延时函数
void Delay(unsigned int u16ms) {
unsigned int i, j;
for(i = u16ms; i > 0; i--) {
for(j = 110; j > 0; j--);
}
}
// 显示一个字符
void ShowChar(unsigned char u8Index) {
LED_COM = LED_CharTable[u8Index];
}
// 显示一个数字
void ShowNumber(unsigned char u8Index) {
LED_COM = LED_CharTable[u8Index / 10];
LED_SEG = 0xFE;
Delay(1);
LED_SEG = 0xFF;
LED_COM = LED_CharTable[u8Index % 10];
}
// 主函数
void main(void) {
// 定义循环计数器
unsigned int i;
// 循环显示一个字符和一个数字
while(1) {
// 显示一个字符
ShowChar(LED_IndexTable[g_u8CharIndex]);
// 延时一段时间
for(i = 0; i < 1000; i++) {
Delay(1);
}
// 显示一个数字
ShowNumber(LED_IndexTable[g_u8NumberIndex]);
// 延时一段时间
for(i = 0; i < 1000; i++) {
Delay(1);
}
// 更新字符和数字的索引
g_u8CharIndex++;
if(g_u8CharIndex >= sizeof(LED_IndexTable)) {
g_u8CharIndex = 0;
}
g_u8NumberIndex++;
if(g_u8NumberIndex >= sizeof(LED_IndexTable)) {
g_u8NumberIndex = 0;
}
}
}
```
该程序使用了AT89C518微控制器和LED点阵屏,在数组方式下循环显示一个字符和一个数字,并且可以通过修改索引表来显示不同的字符和数字。其中,ShowChar和ShowNumber函数用于显示一个字符和一个数字,Delay函数用于延时一段时间,主函数则是循环调用这些函数来完成显示的过程。