找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2313|回复: 15
收起左侧

stc单片机程序的段码表哪里有问题?

[复制链接]
ID:72649 发表于 2020-9-16 13:46 | 显示全部楼层 |阅读模式
const code LED_TAB[] =
        {
        LED_A + LED_B +LED_C + LED_D +LED_E + LED_F,   //0
        LED_A+LED_B,                           //1
        LED_A+LED_C+LED_D+LED_F+LED_G+LED_DP,  //2
        LED_A+LED_B+LED_C+LED_F+LED_G,         //3
        LED_A+LED_B+LED_E+LED_G,               //4
        LED_B+LED_C+LED_E+LED_F+LED_G,         //5
        LED_B+LED_C+LED_D+LED_E+LED_F+LED_G,   //6
        LED_A+LED_B+LED_F,   //7
        LED_A+LED_B+LED_C+LED_D+LED_E+LED_F+LED_G,   //8
        LED_A+LED_B+LED_C+LED_E+LED_F+LED_G,         //9
        LED_DP,
        };
        #undef LED_A
        #undef LED_B
        #undef LED_C
        #undef LED_D
        #undef LED_E
        #undef LED_F
        #undef LED_G
        #undef LED_DP

回复

使用道具 举报

ID:72649 发表于 2020-9-16 16:38 | 显示全部楼层
没有人回答吗?
回复

使用道具 举报

ID:147710 发表于 2020-9-16 19:38 | 显示全部楼层
看你这个是数码管的段码表,这么个写法不知有何目的,半截子代码实在难以判断问题所在
给你个数码管段码生成器
888.jpg

数码管段码显示.zip (18.58 KB, 下载次数: 12)
回复

使用道具 举报

ID:819912 发表于 2020-9-16 20:18 | 显示全部楼层
额,没见过这么加的。LED_A/B/C/D/E/F/G/DP是对应输出的数据吧,那应该是“|”的关系,而且还得对应到bit
回复

使用道具 举报

ID:819912 发表于 2020-9-16 20:21 | 显示全部楼层
没见过你这么加的
你的LED_A/B/C/D/E/F/G/DP是对应的端口输出,应该对应到bit,用 “|” 的关系,不是加的关系,或者移位再加
回复

使用道具 举报

ID:213173 发表于 2020-9-17 06:37 | 显示全部楼层
hjx5548 发表于 2020-9-16 16:38
没有人回答吗?

C语言中#undef的语法定义是:#undef 标识符,用来将前面定义的宏标识符取消定义。
而且除了“0”和“.”其它段码都写错了。

//顺序共阴极数码管段码表,段码a-h顺序接PX0-PX7
unsigned char code table[]={//共阴数码管段码"0~f-."
                0x3f,0x06,0x5b,0x4f,
                0x66,0x6d,0x7d,0x07,
                0x7f,0x6f,0x77,0x7c,
                0x39,0x5e,0x79,0x71,0x40,0x80};

//反序共阴极数码管段码表,段码a-h顺序接PX7-PX0
unsigned char code Table[]={//共阴数码管段码"0~f-."
                0xFC,0x60,0xDA,0xF2,
                0x66,0xB6,0xBE,0xE0,
                0xFE,0xF6,0xEE,0x3E,
                0x9C,0x7A,0x9E,0x8E,0x02,0x01};

//顺序共阳极数码管段码表,段码a-h顺序接PX0-PX7
unsigned char code table[]={//共阳数码管段码"0~f-."
                0xc0,0xf9,0xa4,0xb0,
                0x99,0x92,0x82,0xf8,
                0x80,0x90,0x88,0x83,
                0xc6,0xa1,0x86,0x8e,0xbf,0x7f};

//反序共阳极数码管段码表,段码a-h顺序接PX7-PX0
unsigned char code Table[]={//共阴数码管段码"0~f-."
                0x03,0x9f,0x25,0x0d,
                0x99,0x49,0x41,0x1f,
                0x01,0x09,0x11,0xc1,
                0x63,0x85,0x61,0x71,0xfd,0xfe};

回复

使用道具 举报

ID:72649 发表于 2020-9-17 09:34 | 显示全部楼层
应该这样表达:驱动数码管段总线的引脚不在同一个端口下。
回复

使用道具 举报

ID:582903 发表于 2020-9-17 10:47 | 显示全部楼层
相加是多少直接赋值就可以了
回复

使用道具 举报

ID:147710 发表于 2020-9-17 10:59 | 显示全部楼层
hjx5548 发表于 2020-9-17 09:34
应该这样表达:驱动数码管段总线的引脚不在同一个端口下。

段驱动不在同一端口下我是这么干的:
dm.jpg

回复

使用道具 举报

ID:213173 发表于 2020-9-17 12:01 | 显示全部楼层
hjx5548 发表于 2020-9-17 09:34
应该这样表达:驱动数码管段总线的引脚不在同一个端口下。

这是一个实用中的异组端口驱动函数,P2.4,P2.2,P3.5~3.0从高到低组成一个字节,标准段码数组直接带入参数x

void PX(uchar x)
{
        P3&=0xc0;                //低6位清0,P36、37不变
        P3|=(x&0x3f);        //P3低6位赋值
        P2&=0xeb;                //P24、22清0,其它位不变
        P2|=((x>>3&0x10)|(x>>4&0x04));//P24、22赋值
}
回复

使用道具 举报

ID:553941 发表于 2020-9-17 13:52 | 显示全部楼层
思路是可以实现的,但是不是加法这么简单,单片机中以一个十六进制数表示段码,以全灭来说,是0x00,当需要第一个亮的时候要或上0x01,这样变成0x01,但是让点亮的灯熄灭的话需要与上0x00,还要加判断当前状态。你的表述是有问题的,如果是同一组IO,这样做完全没意义,所以猜测你应该是不同组的IO组成数码管的八位数据
回复

使用道具 举报

ID:235954 发表于 2020-9-17 15:54 | 显示全部楼层
你这个加号比较优秀,应该用 |
回复

使用道具 举报

ID:123289 发表于 2020-9-18 16:27 | 显示全部楼层
这样做很好,很容易读懂。
但只适用于正逻辑,即1=亮。
要注意各段的定义只能在下列数据中选择:128,64,32,16,8,4,2,1。
如果是负逻辑,需要取反码,自己考虑吧。
另外:
“2”的编码没有小数点,去掉LED_DP。
回复

使用道具 举报

ID:72649 发表于 2020-9-19 19:55 来自手机 | 显示全部楼层
XTXB 发表于 2020-9-17 10:59
段驱动不在同一端口下我是这么干的:

如果要显示1234数,应该怎么写?
回复

使用道具 举报

ID:72649 发表于 2020-9-19 19:56 来自手机 | 显示全部楼层
wulin 发表于 2020-9-17 06:37
C语言中#undef的语法定义是:#undef 标识符,用来将前面定义的宏标识符取消定义。
而且除了“0”和“.” ...

段码写错不是主要问题,关键是四路?
回复

使用道具 举报

ID:72649 发表于 2020-9-19 21:06 | 显示全部楼层
sbit WEI1        = P3^5;   //ǧλ
sbit WEI2        = P3^6;   //°ùλ
sbit WEI3        = P3^7;   //ê®Î»
sbit WEI4        = P4^1;   //¸öλ

sbit  LED_A  =  P4^2;
sbit  LED_B  =  P4^4;
sbit  LED_C  =  P2^1;
sbit  LED_D  =  P2^3;
sbit  LED_E  =  P1^3;
sbit  LED_F  =  P4^3;
sbit  LED_G  =  P2^0;
sbit  LED_DP =  P2^2;

        LED_A + LED_B +LED_C + LED_D +LED_E + LED_F,   //0    //μ1×°
        LED_E+LED_F,                           //1
        LED_D+LED_E+LED_G+LED_A+LED_B,  //2
        LED_D+LED_E+LED_F+LED_A+LED_G,         //3
        LED_E+LED_C+LED_F+LED_G,               //4
        LED_D+LED_C+LED_G+LED_F+LED_A,         //5
        LED_D+LED_C+LED_G+LED_A+LED_B+LED_F,   //6
        LED_D+LED_E+LED_F,   //7
        LED_A+LED_B+LED_C+LED_D+LED_E+LED_F+LED_G,   //8
        LED_A+LED_E+LED_C+LED_D+LED_F+LED_G,         //9
以上四位数码管显示6789,程序怎么写?
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表