OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 3385|回复: 8

求解答,这种数码管用法

[复制链接]

17

主题

48

帖子

0

精华

初级会员

Rank: 2

积分
168
金钱
168
注册时间
2017-8-5
在线时间
36 小时
发表于 2018-3-13 16:21:14 | 显示全部楼层 |阅读模式
5金钱
这种数码管的用法看不懂,但请大神指点:

代码如下:

//数码管段选定义      0     1    2    3    4    5         6         7          8           9       
uchar code smg_du[]={0x05,0xdd,0x46,0x54,0x9c,0x34,0x24,0x5d,0x04,0x14,
                                           0x0c,0xa4,0x27,0xc4,0x26,0x2e,0xff};         //断码
//数码管位选定义
uchar code smg_we[]={0x7f,0xbf,0xdf,0xef};

uchar dis_smg[8]  = {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8};       



/***********************数码显示函数*****************************/
void display()
{
        uchar i;
        P1 = 0xff;                         //消隐                                           
        P2 = smg_we[i];                          //位选
        P1 = dis_smg[i];                 //段选          
        i ++;
        if(i >= 4)                        //4位数码管显示
                i = 0;         
}




显示:
dis_smg[3]=smg_du[dengji];            //显示烟物报警等级
dis_smg[2]= 0xfe;                    // -               
dis_smg[1]=smg_du[temperature/10%10];        //十位
dis_smg[0]=smg_du[temperature%10];       



主要是不清楚这个dis_smg[8] 的作用,求解答

这本该是51板块的,,,但那没什么人,,,   

前两个我知道是段选和位选码,这个 dis_smg的用法就不清楚了

前两个我知道是段选和位选码,这个 dis_smg的用法就不清楚了

最佳答案

查看完整内容[请看2#楼]

你可以把它看成就是段选,最开始初始化的值根本没用到,你看他下面的那四个赋值,就是把段选的值赋给他了,简化说一下:我有三个数组,第一个叫数字,对应smg_du,这里边存的就是0-9的编码方式,第二个叫位选,对应smg_wei,作用就不用说了,第三个叫显示,对应dis_smg,这个作用才是段选,但是他的值需要从数字这个数组里取,别被代码里面的名字误导了
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

13

主题

156

帖子

0

精华

高级会员

Rank: 4

积分
883
金钱
883
注册时间
2017-8-7
在线时间
200 小时
发表于 2018-3-13 16:21:15 | 显示全部楼层
你可以把它看成就是段选,最开始初始化的值根本没用到,你看他下面的那四个赋值,就是把段选的值赋给他了,简化说一下:我有三个数组,第一个叫数字,对应smg_du,这里边存的就是0-9的编码方式,第二个叫位选,对应smg_wei,作用就不用说了,第三个叫显示,对应dis_smg,这个作用才是段选,但是他的值需要从数字这个数组里取,别被代码里面的名字误导了
回复

使用道具 举报

1

主题

882

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3071
金钱
3071
注册时间
2018-2-7
在线时间
285 小时
发表于 2018-3-13 16:52:49 | 显示全部楼层
有原理图的话比较好看,只有代码不好看出来。
回复

使用道具 举报

1

主题

374

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1326
金钱
1326
注册时间
2014-7-23
在线时间
421 小时
发表于 2018-3-13 17:22:05 | 显示全部楼层
dis_smg[8] 相当于送显的temp值而已。
回复

使用道具 举报

17

主题

48

帖子

0

精华

初级会员

Rank: 2

积分
168
金钱
168
注册时间
2017-8-5
在线时间
36 小时
 楼主| 发表于 2018-3-13 17:27:31 | 显示全部楼层
HXYDJ 发表于 2018-3-13 16:52
有原理图的话比较好看,只有代码不好看出来。

图在这,看不见跟我说 这个dis_smg数组里面的数据不知道有没有意义,在用的时候都直接取 smg_du 段码里面的值了。。。
可是我在一直过来的时候发现,给他改成 uchar dis_smg[4];  之后数码管是逐个一次点亮的,而且数字也不对

0.png
回复

使用道具 举报

0

主题

192

帖子

0

精华

高级会员

Rank: 4

积分
582
金钱
582
注册时间
2017-6-2
在线时间
192 小时
发表于 2018-3-13 17:33:33 | 显示全部楼层
数码管上有七段线段型led和一个小数点,刚好8个控制信号,对应的就是表格里面的每个字节的8个位。0,1对应的就是那个对应led的亮灭,具体要看原理图的接法,一般是0亮1灭,然后表格中的第几个数一般对应的就是显示成这个数字是哪几个需要亮,哪几个需要灭。就是这么简单。
回复

使用道具 举报

17

主题

48

帖子

0

精华

初级会员

Rank: 2

积分
168
金钱
168
注册时间
2017-8-5
在线时间
36 小时
 楼主| 发表于 2018-3-13 17:40:30 | 显示全部楼层
jkd405 发表于 2018-3-13 17:33
数码管上有七段线段型led和一个小数点,刚好8个控制信号,对应的就是表格里面的每个字节的8个位。0,1对应 ...

这个我懂,,你看下我程序里面的 那个 dis_smg数组,,,除了段选 位选 之外的另一个数组
回复

使用道具 举报

17

主题

587

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4467
金钱
4467
注册时间
2013-6-27
在线时间
565 小时
发表于 2018-3-13 19:11:05 | 显示全部楼层
dis_smg是数码管的显存,4个数码管定义dis_smg[4]就可以了。
让我们的思维驾驭在电的速度之上!
回复

使用道具 举报

17

主题

48

帖子

0

精华

初级会员

Rank: 2

积分
168
金钱
168
注册时间
2017-8-5
在线时间
36 小时
 楼主| 发表于 2018-3-13 20:59:58 | 显示全部楼层
旺仔奶豆 发表于 2018-3-13 18:32
你可以把它看成就是段选,最开始初始化的值根本没用到,你看他下面的那四个赋值,就是把段选的值赋给他了, ...

谢谢,明白了。
现在的问题是数码管在闪烁··不知道怎么改  

void display()
{
        uchar i;
        P1 = 0xff;                         //消隐                                           
        P2 = smg_we;                          //位选
        P1 = dis_smg;                 //段选          
        i ++;       
        if(i >= 4)                        //4位数码管显示
                i = 0;         
}

有劳帮我看下
回复

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-9 00:57

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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