OpenEdv-开源电子网

 找回密码
 立即注册

扫一扫,访问微社区

正点原子全套STM32开发资料,上千讲STM32视频教程,RT1052教程免费下载啦...
查看: 434|回复: 8

求解答,这种数码管用法

[复制链接]

  离线 

11

主题

27

帖子

0

精华

新手上路

积分
25
金钱
25
注册时间
2017-8-5
在线时间
10 小时
发表于 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,这个作用才是段选,但是他的值需要从数字这个数组里取,别被代码里面的名字误导了
回复

使用道具 举报

  离线 

11

主题

146

帖子

0

精华

高级会员

Rank: 4

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

使用道具 举报

  离线 

0

主题

430

帖子

0

精华

金牌会员

Rank: 6Rank: 6

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

使用道具 举报

  离线 

1

主题

331

帖子

0

精华

高级会员

Rank: 4

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

使用道具 举报

  离线 

11

主题

27

帖子

0

精华

新手上路

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

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

0.png
回复

使用道具 举报

  离线 

0

主题

191

帖子

0

精华

高级会员

Rank: 4

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

使用道具 举报

  离线 

11

主题

27

帖子

0

精华

新手上路

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

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

使用道具 举报

  离线 

14

主题

423

帖子

0

精华

金牌会员

Rank: 6Rank: 6

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

使用道具 举报

  离线 

11

主题

27

帖子

0

精华

新手上路

积分
25
金钱
25
注册时间
2017-8-5
在线时间
10 小时
 楼主| 发表于 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;         
}

有劳帮我看下
回复

使用道具 举报

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

本版积分规则




关闭

必看,必学:"原子哥”力荐上一条 /1 下一条

正点原子公众号

QQ|联系我们|手机版|官方淘宝店|微信公众平台|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2018-9-19 07:14

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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