你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

动态数码管驱动

[复制链接]
tanic 发布时间:2018-10-27 13:43
没有经过实际验证的代码,全靠空想
  1. /****************************************************************




  2. *****************************************************************/
  3. void tubeDate(uint8_t a);
  4. void selectBit(int a);
  5. void setTube(uint8_t *bitData,uint32_t toggle,uint32_t point);
  6. void timerDriver();


  7. #define BIT_NUM        8//8位数码管
  8. #define TIMER_CYCLE                5//ms调用一次 timerDriver  放在定时器中   该参数应该根据实际显示亮度调整
  9. #define         TUBE_TOGGLE_CYCLE                300//ms  闪烁半周期
  10. #define  TUBE_OFF_VALUE        0//数码管全暗对应的段选值
  11. #define  TUBE_ON_VALUE          0xff//数码管全亮对应的段选值
  12. #define  PONIT_BIT                                0X80//只亮数码管小数点段选值


  13. uint8_t bit_data[BIT_NUM];
  14. uint32_t bit_toggle=0;//bit置1该位闪烁

  15. //放在定时器中 调用周期要与TIMER_CYCLE值一致
  16. void timerDriver()
  17. {
  18.         static char i=0;
  19.         static int cnt=0;       
  20.         selectBit(i);
  21.         if(cnt*TIMER_CYCLE<TUBE_TOGGLE_CYCLE && bit_toggle&(1<<i))
  22.         {
  23.                 tubeDate(TUBE_OFF_VALUE);
  24.         }
  25.         else
  26.         {
  27.                 tubeDate(bit_data[i]);
  28.         }
  29.         i = i<BIT_NUM ? i+1 : 0
  30.         cnt = cnt<2*TUBE_TOGGLE_CYCLE/TIMER_CYCLE ? cnt+1 : 0;
  31. }

  32. /*
  33. 设置数码管显示
  34. *bitData 段选值
  35. toggle 闪烁位   置1闪烁
  36. point  小数点位  置1点亮小数点
  37. */
  38. void setTube(uint8_t *bitData,uint32_t toggle,uint32_t point)
  39. {
  40.         for(i=0;i<BIT_NUM;i++)
  41.         {
  42.                 bit_data[i] = bitData[[i];
  43.                 if(point&(0x01<<p)) bit_data[i] |= PONIT_BIT;
  44.         }
  45.         bit_toggle = toggle;
  46. }



  47. //位选  应该尽量减少该函数的执行时间
  48. void selectBit(int a)
  49. {
  50.         switch(a)
  51.         {
  52.                 case 0:
  53.                         //只选中第0位的代码
  54.                 break;
  55.                 case 1:
  56.                         //只选中第1位的代码
  57.                 break;
  58.                 case 2:
  59.                         //只选中第2位的代码
  60.                 break;
  61.                 case 3:
  62.                         //只选中第3位的代码
  63.                 break;
  64.                 case 4:
  65.                         //只选中第3位的代码
  66.                 break;
  67.                 case 5:
  68.                         //只选中第3位的代码
  69.                 break;
  70.                 case 6:
  71.                         //只选中第3位的代码
  72.                 break;
  73.                 case 7:
  74.                         //只选中第3位的代码
  75.                 break;
  76.         }
  77. }
  78. //段选 应该尽量减少该函数的执行时间
  79. void tubeDate(uint8_t a)
  80. {
  81.         //根据a值驱动段选IO
  82. }

  83. /*-------------应用------------------------------------*/
  84. //字符对应的段选值  根据实际
  85. uint8_t tableValue[]={
  86.         /*0~9*/0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,
  87.         /*A*/0x88,
  88.         /*E*/0x86,
  89.         /*H*/0x89,
  90.         /*|-*/0x8f,
  91.         /*三*/0xb6,
  92.         /*||*/0xc9,
  93.         /*|_|*/0xc1,
  94.         /*r*/ 0xaf,
  95.         /*b*/0x83,
  96.         /*k*/0x88,
  97.         /*F*/0x8e,
  98.         /*-*/0xbf,
  99.    /*L*/  0xc7
  100. };


  101. void main()
  102. {
  103.         uint8_t b[]={1,2,3,4,5,6,7,8,9,0};
  104.         uint8_t a,i;
  105.         while(1)
  106.         {
  107.                 setTube(b,4,8);
  108.                 delayms(2000);
  109.                 a=b[0];
  110.                 for(i=0,i<9;i++)
  111.                 {
  112.                         b[i]=b[i+1];
  113.                 }
  114.                 b[i]=a;
  115.         }
  116. }
复制代码



收藏 评论2 发布时间:2018-10-27 13:43

举报

2个回答
a707083746 回答时间:2018-10-27 16:06:23
想象力丰富
STM1024 回答时间:2018-10-27 16:28:58
不错,不过实际应用意义不大,直接搞一个MAX7219之类的专用LED显示驱动器更爽

所属标签

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版