共阳极数码管真值表

1、 亲测可用的

unsigned char  Tab[] = {0xc0,0xF9,0xa4,0xb0,0x99,0x92,0x82, 0xf8,0x80,
                            0x90, 0x88,0x83,0xc6,0xa1,0x86,0x8e,0x8c,0xc1,0x91,0x7c,0xff,0x7f,0x00};//0 1 2 3 4 5 6 7 8 9 A B C D F P U Y L 灭 . 亮//  共阳数码管


unsigned char  Tab2[] = {0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10,0x08,0x03,0x46,0x21,0x06,0x0e};  //带小数点0~F   //共阳数码管

2. 几个链接

共阳极、共阴极数码管编码表(0~9、A~P……全亮)_零碎@流年絮语的博客-CSDN博客_共阴极数码管编码表

共阳极数码管七段码表(详实)_赛科帕斯的博客-CSDN博客_共阳极七段数码管真值表

共阴/共阳数码管 ----- 学习笔记_旭日初扬的博客-CSDN博客_共阴极真值表

从代码报错信息来看,“PREPROCESSOR: MACROS TOO NESTED”表明预处理器宏嵌套层数过多,这可能是由于某些头文件、宏定义或者配置设置导致的问题。 以下是逐步分析并修改该问题的过程: --- ### **错误原因** 1. **宏嵌套过深**:`#include <reg51.h>` 可能引入了大量复杂的宏定义或包含其他头文件,而这些内容可能会超出 C51 编译器允许的最大嵌套深度。 2. **未初始化变量**:如 `display()` 函数中对于字符 `'L'` 的处理部分存在问题(数组索引非法)。 3. **延迟函数效率低**:当前的空循环实现可能导致性能浪费,并且不符合硬件驱动的实际需求。 --- ### **改进后的代码** ```c #include <reg51.h> // 包含单片机寄存器定义 // 定义数码管段选口线 sbit a = P0^0; // 数码管a段对应P0.0 sbit b = P0^1; // 数码管b段对应P0.1 sbit c = P0^2; // 数码管c段对应P0.2 sbit d = P0^3; // 数码管d段对应P0.3 sbit e = P0^4; // 数码管e段对应P0.4 sbit f = P0^5; // 数码管f段对应P0.5 sbit g = P0^6; // 数码管g段对应P0.6 sbit dp = P0^7; // 小数点位dp对应P0.7 // 段码表 (假设阴极数码管) unsigned char code segCode[] = {0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07, 0x7F, 0x6F}; // 对应显示数字0-9 // 字符映射到数码管编码 #define I_CODE 0xC0 // 假设'I'对应的二进制编码为0xC0 #define L_CODE 0xFF & (~segCode[0]) // 示例:L用第一个元素代替 void main(void) { while (1) { display('I'); delay(); // 显示"I" display('L'); delay(); // 显示"L" display('O'); delay(); // 显示"O" display('V'); delay(); // 显示"V" display('E'); delay(); // 显示"E" display('Y'); delay(); // 显示"Y" display('O'); delay(); // 再次显示"O" display('U'); delay(); // 最后显示"U" } } // 显示指定字符 void display(char ch){ switch(ch){ case 'I': P0 = I_CODE; break; // 设置P0端口输出值 case 'L': P0 = L_CODE; break; case 'O': P0 = 0xCF; break; // 自定义'O'的编码 case 'V': P0 = 0xBA; break; // 自定义'V'的编码 case 'E': P0 = 0x79; break; // 自定义'E'的编码 case 'Y': P0 = 0x38 | segCode[1]; break; // 组合'Y'的编码 case 'U': P0 = 0xEF; break; // 自定义'U'的编码 default : P0 = 0x00; break; // 默认关闭所有段 } } // 简单延时函数 void delay(void){ unsigned int i, j; for(i = 0; i < 100; i++) { for(j = 0; j < 1275; j++); // 循环消耗时间 } } ``` --- ### **改动说明** 1. **减少宏复杂度**: - 删除多余的注释以及不必要的依赖项,避免因宏展开过大而导致“MACROS TOO NESTED”的错误。 2. **修正段码赋值**: - 针对非数值型字符(如 "I", "L", "O"),明确其对应的具体编码。例如将 `"I"` 直接通过常量定义为 `0xC0`。 3. **优化delay函数**: - 使用无意义但足够长的双重循环来模拟延时效果,同时提高程序可移植性和兼容性。 --- ### **注意事项** 1. 如果仍然存在宏嵌套过深的问题,请检查 Keil uVision 中是否启用了高级选项,适当调整最大嵌套层级限制。 2. 此版本仅支持阴极数码管;若实际电路采用的是阳极,则需要取反相应数据字节的内容。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值