硬汉嵌入式论坛

 找回密码
 立即注册
查看: 1789|回复: 1
收起左侧

关于595数码管的问题

[复制链接]

3

主题

7

回帖

16

积分

新手上路

积分
16
发表于 2019-3-22 14:49:39 | 显示全部楼层 |阅读模式
最近在玩从安富莱买的595数码管,有个小疑问。最外层的for循环的为啥是32?最多显示32个位?还有就是最后那个FOR循环,怎么情况下进入这个循环的时候uclen会小于LED_COUNT??

  1. /*
  2. *********************************************************************************************************
  3. *        函 数 名: LED595_StrToBuf
  4. *        功能说明: 将字符串转换为LED码存入显存
  5. *        形    参:无
  6. *        返 回 值: 无
  7. *********************************************************************************************************
  8. */
  9. void LED595_StrToBuf(uint8_t _ucAddr, char *_ucaBuf)
  10. {
  11.     uint8_t ucLen;
  12.     uint8_t i;
  13.     uint8_t offset;
  14.     uint8_t index;                 /* 码表数组的索引 */

  15.     offset = _ucAddr * LED_COUNT;/* 计算偏移地址 */
  16.     ucLen = 0;
  17.     /* 未作数据有效性判断 */
  18.     for (i = 0; i < 32; i++)
  19.     {
  20.         /* 首位小数点 */
  21.         if ((i == 0) && (_ucaBuf[i] == '.'))//使用LED595_DispStr函数时,如果第一位是点,则显示左下角的点
  22.         {
  23.             s_ucLedBuf[offset + ucLen] = DOT_FLAG;
  24.             ucLen++;
  25.         }
  26.         else
  27.         {
  28.             /* 检查数据有效性 */
  29.             if ((_ucaBuf[i] >=  ' ') && (_ucaBuf[i] <  'z'))//数据在ASCII码范围内
  30.             {                            //将ASCII码数组的字符的实际位置值赋值               
  31.                 index = _ucaBuf[i] - ' ';
  32.             }
  33.             else//如果显示的数据有空格则显示空格(不在ASIIC)
  34.             {
  35.                 index = 0;        /* 显示空格 */
  36.             }

  37.             if (_ucaBuf[i+1] == '.')//如果当前位下一位是·,则会用当前位的点来代替,不会单独使用一位LED来显示
  38.             {
  39.                 s_ucLedBuf[offset + ucLen] = (g_CharCode[index] & DOT_FLAG);
  40.                 ucLen++;
  41.                 i++;
  42.                 if (ucLen >= LED_COUNT)
  43.                 {
  44.                     break;
  45.                 }
  46.             }
  47.             else
  48.             {   
  49.               /*
  50.                 对缓冲数组进行赋值,从左到右进行存储,
  51.                 例如-123.先将'-'存在s_ucLedBuf[0],
  52.                              '1'存在s_ucLedBuf[1]
  53.                              '2'存在s_ucLedBuf[2]
  54.                              '3'存在s_ucLedBuf[3]        
  55.               */
  56.                 s_ucLedBuf[offset + ucLen] =  g_CharCode[index];
  57.                 ucLen++;
  58.                 if (ucLen >= LED_COUNT)
  59.                 {
  60.                     break;
  61.                 }
  62.             }
  63.         }
  64.     }

  65.     for (i = ucLen; i < LED_COUNT; i++)
  66.     {
  67.         s_ucLedBuf[offset + ucLen] = CHAR_SPACE;
  68.         ucLen++;
  69.     }
  70. }
复制代码



回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106959
QQ
发表于 2019-3-22 18:36:47 | 显示全部楼层
可以联系我们旺旺咨询下,他们专门负责这个模块的问题。
回复

使用道具 举报

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

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-5-11 17:35 , Processed in 0.175191 second(s), 25 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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