专家
公告
财富商城
电子网
旗下网站
首页
问题库
专栏
标签库
话题
专家
NEW
门户
发布
提问题
发文章
STM32
数码管驱动问题
2019-07-20 01:58
发布
×
打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮
站内问答
/
STM32/STM8
5384
12
1013
基于STM32的数码管,现在已经实现点亮,可以控制每一小段,一共8个灯,每个灯14bit,可以控制每个bit,但是现在想通过一个char String[8] = " ~~";这样的方式去改变数码管,
比如我在" ~~"里面写 Hello 数码管就会显示出来,包括空格,空格表示1个灯,我在写Hello的时候,可以通过空格偏移数码管的位置。达到目的,谢谢大家不吝赐教,给出方案即可。
友情提示:
此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
12条回答
烈日灼心
1楼-- · 2019-07-20 05:48
请帮忙顶一下
加载中...
LRW
2楼-- · 2019-07-20 06:28
帮顶!都可以控制每个小段了,要显示字符还是很容易吧。
加载中...
烈日灼心
3楼-- · 2019-07-20 10:41
精彩回答 2 元偷偷看……
加载中...
烈日灼心
4楼-- · 2019-07-20 14:06
精彩回答 2 元偷偷看……
加载中...
DongInker
5楼-- · 2019-07-20 19:26
本帖最后由 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 + . +
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);
}
加载中...
烈日灼心
6楼-- · 2019-07-20 23:00
精彩回答 2 元偷偷看……
加载中...
1
2
下一页
一周热门
更多
>
相关问题
STM32F4上I2C(在PROTEUS中模拟)调试不通的问题
6 个回答
芯片供应紧张,准备换个MCU,MM32L系列替换STM32L系列的怎么样?
7 个回答
STM32同时使用两个串口进行数据收发时数据丢包的问题
5 个回答
STM32F103串口通信死机问题
4 个回答
STM32WLE5CC连接SX1268在LoRa模式下能与 SX1278互通吗?
2 个回答
STM32开发板免费用活动
7 个回答
stm32 处理 DHT11占用太多时间,大家程序是怎么设计的
8 个回答
分享一个STM32单片机做的离线编程器代码
9 个回答
相关文章
ST公司第一款无线低功耗单片机模块有效提高物联网设计生产效率
0个评论
如何实现对单片机寄存器的访问
0个评论
通过USB用STM32片内自带Bootloader下载程序及注意事项
0个评论
欲练此功必先自宫之STM32汇编启动,放慢是为了更好的前行
0个评论
×
关闭
采纳回答
向帮助了您的网友说句感谢的话吧!
非常感谢!
确 认
×
关闭
编辑标签
最多设置5个标签!
STM32
保存
关闭
×
关闭
举报内容
检举类型
检举内容
检举用户
检举原因
广告推广
恶意灌水
回答内容与提问无关
抄袭答案
其他
检举说明(必填)
提交
关闭
×
关闭
您已邀请
15
人回答
查看邀请
擅长该话题的人
回答过该话题的人
我关注的人
下面是我很久之前写的 使用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 + . +
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);
}
一周热门 更多>