OpenEdv-开源电子网

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

数码管驱动问题

[复制链接]

90

主题

534

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1059
金钱
1059
注册时间
2017-4-12
在线时间
280 小时
发表于 2019-5-10 11:05:58 | 显示全部楼层 |阅读模式
50金钱


基于STM32的数码管,现在已经实现点亮,可以控制每一小段,一共8个灯,每个灯14bit,可以控制每个bit,但是现在想通过一个char String[8] = " ~~";这样的方式去改变数码管,比如我在" ~~"里面写 Hello 数码管就会显示出来,包括空格,空格表示1个灯,我在写Hello的时候,可以通过空格偏移数码管的位置。达到目的,谢谢大家不吝赐教,给出方案即可。

穷不可怕,可怕的是穷的是我~~~
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

90

主题

534

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1059
金钱
1059
注册时间
2017-4-12
在线时间
280 小时
 楼主| 发表于 2019-5-10 14:14:46 | 显示全部楼层
回复

使用道具 举报

0

主题

286

帖子

0

精华

高级会员

Rank: 4

积分
950
金钱
950
注册时间
2018-4-21
在线时间
264 小时
发表于 2019-5-10 17:50:00 来自手机 | 显示全部楼层
帮顶!都可以控制每个小段了,要显示字符还是很容易吧。
回复

使用道具 举报

90

主题

534

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1059
金钱
1059
注册时间
2017-4-12
在线时间
280 小时
 楼主| 发表于 2019-5-10 20:22:33 | 显示全部楼层
LRW 发表于 2019-5-10 17:50
帮顶!都可以控制每个小段了,要显示字符还是很容易吧。

是的,可以显示任何的字符,本来打算用switch case去做,妈呀,能写1000行代码。。
穷不可怕,可怕的是穷的是我~~~
回复

使用道具 举报

90

主题

534

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1059
金钱
1059
注册时间
2017-4-12
在线时间
280 小时
 楼主| 发表于 2019-5-10 20:23:28 | 显示全部楼层
LRW 发表于 2019-5-10 17:50
帮顶!都可以控制每个小段了,要显示字符还是很容易吧。

现在可以实现功能的,我只是想用指针加数组,难点就在于 你写的字符怎么对应所谓的值
穷不可怕,可怕的是穷的是我~~~
回复

使用道具 举报

17

主题

587

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4467
金钱
4467
注册时间
2013-6-27
在线时间
565 小时
发表于 2019-5-10 21:48:22 | 显示全部楼层
本帖最后由 DongInker 于 2019-5-10 21:53 编辑

下面是我很久之前写的 使用51单片机实现格式化驱动数码管
数码管关键是处理小数点,毕竟在数码管小数点得特殊处理掉。

#define LED_SEG_NUM 4 //数码管位数
u8 _XDATA LedSegBuf[LED_SEG_NUM];

typedef struct {
        char Ascii;
        u8   SegVal;
}tLedSeg;

_ROM tLedSeg LedSegTab[] = {
{' ',0XFF},
{'x',0X00},        

{'0',0X88},
{'1',0XBB},
{'2',0XC1},
{'3',0X91},
{'4',0XB2},
{'5',0X94},
{'6',0X84},
{'7',0XB9},
{'8',0X80},
{'9',0X90},
{'-',0XF7},
{'C',0XCC},
{'p',0XE0},

{'V',0X8A},
{'I',0XEE},
{'A',0XA0},
{'d',0X83},
{'c',0XC7},

{'Z',0XC1},
{'e',0XC4},
{'r',0XE6},
{'o',0X87},

{'F',0XE4},// FULL
{'U',0X8A},
{'L',0XCE},

{0,0}};

/************************************************************************/
/*      Local Functions                                                 */
/************************************************************************/
static void sBufToDis(void)
{   

}

static u8 sScanLedSegTab(u8 dat)
{
        u8 i;
        for(i=0;LedSegTab.Ascii;i++)
                {
                if(dat == LedSegTab.Ascii)
                        return LedSegTab.SegVal;
                }
        return 0;
}

/************************************************************************/
/*      Application Interface                                           */
/************************************************************************/
u8 _XDATA LedSegPrf[LED_SEG_NUM+2];// LedSegNum + . + \0
GLOBAL void LedSegDis(u8 Up, char *format,...)
{
        u8 i,n = 0;

        va_list arg_ptr;
        va_start (arg_ptr, format);           /* format string */
        vsprintf (LedSegPrf, format, arg_ptr);   //使用时要注意内存溢出问题
        va_end (arg_ptr);

        for(i=0;i<LED_SEG_NUM+1;i++)
                {
                if(LedSegPrf == '.')
                        LedSegBuf[n-1] = LedSegBuf[n-1]&0X7F;//将小数点添加到前面一位数码管缓存中
                else
                        LedSegBuf[n++] = sScanLedSegTab(LedSegPrf);
                if(n >= LED_SEG_NUM)
                        break;
                }
        
        if(Up)
                sBufToDis();
}

GLOBAL void LedSegInit(void)
{
        LedSegDis(1,"xxxx");
        Delay1mS(20);
        LedSegDis(1,"    ");
        Delay1mS(20);
        LedSegDis(1,"V%s",GetVersionNum());
        Delay1mS(30);
}

让我们的思维驾驭在电的速度之上!
回复

使用道具 举报

90

主题

534

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1059
金钱
1059
注册时间
2017-4-12
在线时间
280 小时
 楼主| 发表于 2019-5-11 10:14:22 | 显示全部楼层
DongInker 发表于 2019-5-10 21:48
下面是我很久之前写的 使用51单片机实现格式化驱动数码管
数码管关键是处理小数点,毕竟在数码管小数点得 ...

谢谢回复
穷不可怕,可怕的是穷的是我~~~
回复

使用道具 举报

2

主题

6

帖子

0

精华

新手入门

积分
14
金钱
14
注册时间
2019-5-1
在线时间
1 小时
发表于 2019-5-12 09:47:20 | 显示全部楼层
你去查找数组的所有参数,遇到问题不要全部参考别人的思路
回复

使用道具 举报

90

主题

534

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1059
金钱
1059
注册时间
2017-4-12
在线时间
280 小时
 楼主| 发表于 2019-5-13 10:19:45 | 显示全部楼层
YANJISHUAI 发表于 2019-5-12 09:47
你去查找数组的所有参数,遇到问题不要全部参考别人的思路

? 我不懂你的意思。数组的参数是什么
穷不可怕,可怕的是穷的是我~~~
回复

使用道具 举报

90

主题

534

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1059
金钱
1059
注册时间
2017-4-12
在线时间
280 小时
 楼主| 发表于 2019-5-13 10:20:23 | 显示全部楼层
YANJISHUAI 发表于 2019-5-12 09:47
你去查找数组的所有参数,遇到问题不要全部参考别人的思路

我只是想要个思想。
穷不可怕,可怕的是穷的是我~~~
回复

使用道具 举报

0

主题

36

帖子

0

精华

高级会员

Rank: 4

积分
688
金钱
688
注册时间
2018-9-6
在线时间
249 小时
发表于 2019-5-13 10:46:14 | 显示全部楼层
把要显示的基础元素放入数组里面,通过查表显示出来就可以了
回复

使用道具 举报

90

主题

534

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1059
金钱
1059
注册时间
2017-4-12
在线时间
280 小时
 楼主| 发表于 2019-5-13 10:58:51 | 显示全部楼层
yun1003 发表于 2019-5-13 10:46
把要显示的基础元素放入数组里面,通过查表显示出来就可以了

是的,我也是这样做的,但是我的问题不是这个啊
穷不可怕,可怕的是穷的是我~~~
回复

使用道具 举报

90

主题

534

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1059
金钱
1059
注册时间
2017-4-12
在线时间
280 小时
 楼主| 发表于 2019-5-13 11:00:39 | 显示全部楼层
yun1003 发表于 2019-5-13 10:46
把要显示的基础元素放入数组里面,通过查表显示出来就可以了

你要给数码管写的值,怎么对应数码管的值。比如你要给数码管写个'A',那你怎么完成?现在是用函数写出来的,你要写很多的值,那你要很多函数。
穷不可怕,可怕的是穷的是我~~~
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-15 14:57

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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