让4位8段共阴数码管程序,转变成共阳极程序,C语言程序如下,还是转化成C语言

void display(void)
{
char code table[] = { //共阴段码
0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07, //0~7
0x7f, 0x6f, 0x77, 0x7c, 0x39, 0x5e, 0x79, 0x71}; //8~F
P0 = 0; P2 = 0xf7; P0 = table[ch]; delay(2);//通道号码
P0 = 0; P2 = 0xfb; P0 = table[num / 100] + 128; delay(2);//百位加上小数点
P0 = 0; P2 = 0xfd; P0 = table[num % 100 / 10]; delay(2);//十位
P0 = 0; P2 = 0xfe; P0 = table[num % 10]; delay(2);//个位
P0 = 0; //关闭显示器
}

如果共阴的已验证过,
比较稳妥的方法是,赋值前的位码和段码值都加上 ~ ,按位取反。

P0 = 0; P2 =~0xf7; P0 = ~table[ch]; delay(2);//通道号码
P0 = 0; P2 =~0xfb; P0 =~table[num / 100] + 128; delay(2);//百位加上小数点
P0 = 0; P2 =~0xfd; P0 = ~table[num % 100 / 10]; delay(2);//十位
P0 = 0; P2 = ~0xfe; P0 = ~table[num % 10]; delay(2);//个位
注意:如果你的P2另外4个引脚不能赋值0(例如用于输入),那上述代码就还要处理。追问

另外4个引脚什么也不用,另外小数点的问题是不是也需要改一下呢

追答

你说的对,我改的那个代码小数点没处理好,还有P0=0应改为P0=255。应该这样:
P0 = 255; P2 =~0xf7; P0 = ~table[ch]; delay(2);//通道号码
P0 = 255; P2 =~0xfb; P0 =~(table[num / 100] + 128); delay(2);//百位加上小数点
P0 = 255; P2 =~0xfd; P0 = ~table[num % 100 / 10]; delay(2);//十位
P0 = 255; P2 = ~0xfe; P0 = ~table[num % 10]; delay(2);//个位

追问

好的,朋友,等明天我用protues仿真试一下,看看行不行,先谢谢了

追答

行者自行

温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-10-25
共阳数码管0~F依次是:0xc0 0xf9 0xa4 0xb0 0x99 0x92 0x82 0xf8 0x80 0x90 oxe0 0x7a 0x3c 0x6c 0x83 0x63
第2个回答  2013-10-25
只要将table[]数组内的编码换成共阳极的即可。追问

换了,不行

相似回答