数码之家

 找回密码
 立即注册

QQ登录

只需一步,快速开始

微信登录

微信扫一扫,快速登录

搜索
查看: 1809|回复: 13

[C51] 有关单片机异口驱动LED数码管的求助

[复制链接]
发表于 2020-2-28 12:37:18 | 显示全部楼层 |阅读模式

爱科技、爱创意、爱折腾、爱极致,我们都是技术控

您需要 登录 才可以下载或查看,没有账号?立即注册 微信登录

x
数码管与单片机,由于布线原因,单片机驱动io比较乱,由于本人比较菜,程序太烂:

  1. //=====================================================================
  2. //=========================舵机测试仪==================================
  3. //=================MCU: HC89S003F4  2020-2-26==========================
  4. //========================编程:荆棘鸟=================================
  5. //=====================================================================

  6. #define ALLOCATE_EXTERN
  7. #include "HC89S003F4.h"
  8. #define Uint unsigned int
  9. #define Uchar unsigned char
  10.        

  11. //======================LED数码管GPIO设置==============================
  12. sbit SMG_COM1 = P1^0;               //       ==========
  13. sbit SMG_COM2 = P2^1;               //     ||          ||
  14. sbit SMG_COM3 = P0^6;               //     ||          ||
  15. sbit SMG_COM4 = P0^4;               //     ||          ||
  16. sbit SMG_A = P2^7;                  //     ||          ||
  17. sbit SMG_B = P0^7;                  //       ==========        
  18. sbit SMG_C = P0^2;                  //     ||          ||
  19. sbit SMG_D = P0^0;                  //     ||          ||
  20. sbit SMG_E = P1^1;                  //     ||          ||
  21. sbit SMG_F = P2^2;                  //     ||          ||
  22. sbit SMG_G = P0^3;                  //       ==========
  23. sbit SMG_DP = P0^1;                 //       LED 数码管

  24. /************************************系统初始化****************************************/
  25. void SystemInit()
  26. {
  27.         WDTCCR = 0x00;                                                    //关闭看门狗
  28.                                             //本例程为方便测试关闭看门狗,实际使用中,建议客户打开看门狗,详见WDT复位例程
  29.         CLKSWR = 0x51;                                                    //选择内部高频RC为系统时钟,内部高频RC 2分频,Fosc=16MHz
  30.         CLKDIV = 0x01;                                                    //Fosc 1分频得到Fcpu,Fcpu=16MHz
  31. }

  32. /*********************************设置IO口模式*****************************************/
  33. void GpioInit()
  34. {
  35.         /***************************************************************************************
  36.                        * @实现效果        设置各个IO口的工作状态
  37.   ***************************************************************************************/       
  38.   /***********************************设置IO口模式***************************************/
  39.             //P0M1 = P0M1&0xF0|0x00;                                //P02设置为输入(非施密特)
  40.             //P0M0 = P0M0&0x0F|0x10;                                //P01设置为带下拉输入(非施密特)
  41.             //P0M0 = P0M0&0xF0|0x02;                                //P00设置为带上拉输入(非施密特)
  42.             //P1M0 = P1M0&0x0F|0x30;                                //P11设置为带模拟输入
  43.             //P2M0 = P2M0&0xF0|0x04;                                //P20设置为输入(施密特)
  44.             //P0M2 = P0M2&0x0F|0x50;                                //P05设置为带下拉输入(施密特)
  45.             //P0M2 = P0M2&0xF0|0x06;                                //P04设置为带上拉输入(施密特)
  46.             //P0M3 = P0M3&0x0F|0x80;                                //P07设置为推挽输出
  47.             //P0M3 = P0M3&0xF0|0x09;                                //P06设置为开漏输出
  48.             //P2M1 = P2M1&0xF0|0x0A;                                //P22设置为带上拉开漏输出
  49.            P2M3 = P2M3&0x0F|0x80;  //SMG_A P27 推挽输出  
  50.            P0M3 = P0M3&0x0F|0x80;  //SMG_B P07 推挽输出
  51.            P0M1 = P0M1&0xF0|0x08;  //SMG_C P02 推挽输出
  52.            P0M0 = P0M0&0xF0|0x08;  //SMG_D P00 推挽输出
  53.            P1M0 = P1M0&0x0F|0x80;  //SMG_E P11 推挽输出
  54.            P2M1 = P2M1&0xF0|0x08;  //SMG_F P22 推挽输出
  55.            P0M1 = P0M1&0X0F|0x80;  //SMG_G P03 推挽输出
  56.            P0M0 = P0M0&0x0F|0x80;  //SMG_DP P01 推挽输出
  57.            P1M0 = P1M0&0XF0|0x09;  //SMG_COM1 P10 推挽输出
  58.            P2M0 = P2M0&0x0F|0x90;  //SMG_COM2 P21 推挽输出
  59.            P0M3 = P0M3&0XF0|0x09;  //SMG_COM3 P06 推挽输出
  60.            P0M2 = P0M2&0xF0|0x09;  //SMG_COM4 P04 推挽输出
  61.                  //数码管COM端口初始化为高电平 不点亮
  62.                  SMG_COM1 = 1;
  63.                  SMG_COM2 = 1;
  64.                  SMG_COM3 = 1;
  65.                  SMG_COM4 = 1;
  66. }
  67. /*****************************************************************************************/
  68. // * @说明          延时函数
  69. // * [url=home.php?mod=space&uid=2842033]@参数[/url]          fui_i : 延时时间
  70. // * @返回值 无
  71. // * @注         Fcpu = 16MHz,fui_i = 1时,延时时间约为2us
  72. /****************************************************************************************/
  73. void Delay_2us(unsigned int fui_i)
  74. {
  75.         while(fui_i--);       
  76. }

  77. void Delay_ms(unsigned int i)
  78. {
  79.         unsigned int x,y;
  80.         for(x=i;x>0;x--)
  81.                 for(y=610;y>0;y--);
  82. }




  83. void SMG_Array(unsigned char i)
  84. {
  85.                 switch(i)
  86.                 {
  87.                         case 0:
  88.                                   SMG_A = 1;
  89.                             Delay_2us(100);
  90.                             SMG_A = 0;
  91.                                         Delay_2us(100);
  92.                             SMG_B = 1;
  93.                             Delay_2us(100);
  94.                             SMG_B = 0;
  95.                                         Delay_2us(100);
  96.                             SMG_C = 1;
  97.                             Delay_2us(100);
  98.                             SMG_C = 0;
  99.                                         Delay_2us(100);
  100.                             SMG_D = 1;
  101.                             Delay_2us(100);
  102.                             SMG_D = 0;
  103.                                         Delay_2us(100);
  104.                             SMG_E = 1;
  105.                             Delay_2us(100);
  106.                             SMG_E = 0;
  107.                                         Delay_2us(100);
  108.                             SMG_F = 1;
  109.                             Delay_2us(100);
  110.                             SMG_F= 0;
  111.                                         Delay_2us(100);
  112.                             break;
  113.                         case 1:
  114.                                                  
  115.                             SMG_B = 1;
  116.                             Delay_2us(100);
  117.                             SMG_B = 0;
  118.                                         Delay_2us(100);
  119.                             SMG_C = 1;
  120.                             Delay_2us(100);
  121.                             SMG_C = 0;
  122.                                         Delay_2us(100);
  123.                                         break;
  124.                         case 2:
  125.                                   SMG_A = 1;
  126.                             Delay_2us(100);
  127.                             SMG_A = 0;
  128.                                         Delay_2us(100);
  129.                             SMG_B = 1;
  130.                             Delay_2us(100);
  131.                             SMG_B = 0;
  132.                                         Delay_2us(100);
  133.                             SMG_D = 1;
  134.                             Delay_2us(100);
  135.                             SMG_D = 0;
  136.                                         Delay_2us(100);
  137.                             SMG_E = 1;
  138.                             Delay_2us(100);
  139.                             SMG_E = 0;
  140.                                         Delay_2us(100);
  141.                             SMG_G = 1;
  142.                             Delay_2us(100);
  143.                             SMG_G= 0;
  144.                                         Delay_2us(100);
  145.                                         break;
  146.                         case 3:
  147.                                   SMG_A = 1;
  148.                             Delay_2us(100);
  149.                             SMG_A = 0;
  150.                                         Delay_2us(100);
  151.                             SMG_B = 1;
  152.                             Delay_2us(100);
  153.                             SMG_B = 0;
  154.                                         Delay_2us(100);
  155.                             SMG_C = 1;
  156.                             Delay_2us(100);
  157.                             SMG_C = 0;
  158.                                         Delay_2us(100);
  159.                             SMG_D = 1;
  160.                             Delay_2us(100);
  161.                             SMG_D = 0;
  162.                                         Delay_2us(100);
  163.                             SMG_G = 1;
  164.                             Delay_2us(100);
  165.                             SMG_G= 0;
  166.                                         Delay_2us(100);
  167.                                         break;
  168.                         case 4:
  169.                                         Delay_2us(100);
  170.                             SMG_B = 1;
  171.                             Delay_2us(100);
  172.                             SMG_B = 0;
  173.                                         Delay_2us(100);
  174.                             SMG_C = 1;
  175.                             Delay_2us(100);
  176.                             SMG_C = 0;
  177.                                         Delay_2us(100);
  178.                             SMG_G = 1;
  179.                             Delay_2us(100);
  180.                             SMG_G = 0;
  181.                                         Delay_2us(100);
  182.                             SMG_F = 1;
  183.                             Delay_2us(100);
  184.                             SMG_F= 0;
  185.                                         Delay_2us(100);
  186.                             break;
  187.                         case 5:
  188.                                   SMG_A = 1;
  189.                             Delay_2us(100);
  190.                             SMG_A = 0;
  191.                                         Delay_2us(100);
  192.                             SMG_C = 1;
  193.                             Delay_2us(100);
  194.                             SMG_C = 0;
  195.                                         Delay_2us(100);
  196.                             SMG_D = 1;
  197.                             Delay_2us(100);
  198.                             SMG_D = 0;
  199.                                         Delay_2us(100);
  200.                             SMG_G = 1;
  201.                             Delay_2us(100);
  202.                             SMG_G = 0;
  203.                                         Delay_2us(100);
  204.                             SMG_F = 1;
  205.                             Delay_2us(100);
  206.                             SMG_F= 0;
  207.                                         Delay_2us(100);
  208.                                         break;
  209.                         case 6:
  210.                                   SMG_A = 1;
  211.                             Delay_2us(100);
  212.                             SMG_A = 0;
  213.                                         Delay_2us(100);
  214.                             SMG_C = 1;
  215.                             Delay_2us(100);
  216.                             SMG_C = 0;
  217.                                         Delay_2us(100);
  218.                             SMG_D = 1;
  219.                             Delay_2us(100);
  220.                             SMG_D = 0;
  221.                                         Delay_2us(100);
  222.                             SMG_E = 1;
  223.                             Delay_2us(100);
  224.                             SMG_E = 0;
  225.                                         Delay_2us(100);
  226.                             SMG_F = 1;
  227.                             Delay_2us(100);
  228.                             SMG_F= 0;
  229.                                         Delay_2us(100);
  230.                             SMG_G = 1;
  231.                             Delay_2us(100);
  232.                             SMG_G= 0;
  233.                                         Delay_2us(100);
  234.                                         break;
  235.                         case 7:
  236.                                   SMG_A = 1;
  237.                             Delay_2us(100);
  238.                             SMG_A = 0;
  239.                                         Delay_2us(100);
  240.                             SMG_B = 1;
  241.                             Delay_2us(100);
  242.                             SMG_B = 0;
  243.                                         Delay_2us(100);
  244.                             SMG_C = 1;
  245.                             Delay_2us(100);
  246.                             SMG_C = 0;
  247.                                         Delay_2us(100);
  248.                                         break;
  249.                         case 8:
  250.                                   SMG_A = 1;
  251.                             Delay_2us(100);
  252.                             SMG_A = 0;
  253.                                         Delay_2us(100);
  254.                             SMG_B = 1;
  255.                             Delay_2us(100);
  256.                             SMG_B = 0;
  257.                                         Delay_2us(100);
  258.                             SMG_C = 1;
  259.                             Delay_2us(100);
  260.                             SMG_C = 0;
  261.                                         Delay_2us(100);
  262.                             SMG_D = 1;
  263.                             Delay_2us(100);
  264.                             SMG_D = 0;
  265.                                         Delay_2us(100);
  266.                             SMG_E = 1;
  267.                             Delay_2us(100);
  268.                             SMG_E = 0;
  269.                                         Delay_2us(100);
  270.                             SMG_F = 1;
  271.                             Delay_2us(100);
  272.                             SMG_F= 0;
  273.                                         Delay_2us(100);
  274.                                         SMG_G = 1;
  275.                             Delay_2us(100);
  276.                             SMG_G= 0;
  277.                                         Delay_2us(100);
  278.                             break;
  279.                         case 9:
  280.                                   SMG_A = 1;
  281.                             Delay_2us(100);
  282.                             SMG_A = 0;
  283.                                         Delay_2us(100);
  284.                             SMG_B = 1;
  285.                             Delay_2us(100);
  286.                             SMG_B = 0;
  287.                                         Delay_2us(100);
  288.                             SMG_C = 1;
  289.                             Delay_2us(100);
  290.                             SMG_C = 0;
  291.                                         Delay_2us(100);
  292.                             SMG_D = 1;
  293.                             Delay_2us(100);
  294.                             SMG_D = 0;
  295.                                         Delay_2us(100);
  296.                             SMG_G = 1;
  297.                             Delay_2us(100);
  298.                             SMG_G = 0;
  299.                                         Delay_2us(100);
  300.                             SMG_F = 1;
  301.                             Delay_2us(100);
  302.                             SMG_F= 0;
  303.                                         Delay_2us(100);
  304.                                         break;
  305.                         case 10:
  306.                                   SMG_A = 1;
  307.                             Delay_2us(100);
  308.                             SMG_A = 0;
  309.                                         Delay_2us(100);
  310.                             SMG_B = 1;
  311.                             Delay_2us(100);
  312.                             SMG_B = 0;
  313.                                         Delay_2us(100);
  314.                             SMG_C = 1;
  315.                             Delay_2us(100);
  316.                             SMG_C = 0;
  317.                                         Delay_2us(100);
  318.                             SMG_D = 1;
  319.                             Delay_2us(100);
  320.                             SMG_D = 0;
  321.                                         Delay_2us(100);
  322.                             SMG_E = 1;
  323.                             Delay_2us(100);
  324.                             SMG_E = 0;
  325.                                         Delay_2us(100);
  326.                             SMG_F = 1;
  327.                             Delay_2us(100);
  328.                             SMG_F= 0;
  329.                                         Delay_2us(100);
  330.                                         break;
  331.                 }
  332. }

  333. void SMG_Display(unsigned int i)
  334. {
  335.                  unsigned char Qian, Bai, Shi, Ge;
  336.                  Qian = i/1000;
  337.            Bai = i%1000/100;
  338.            Shi = i%100/10;
  339.            Ge = i%10;
  340.            SMG_COM1 = 0;
  341.                  SMG_COM2 = 1;
  342.            SMG_COM3 = 1;
  343.            SMG_COM4 = 1;
  344.                  switch(Qian)
  345.                  {
  346.                          case 0:
  347.                                         SMG_Array(Qian);
  348.                       break;
  349.                          case 1:
  350.                                         SMG_Array(Qian);
  351.                       break;
  352.                          case 2:
  353.                                         SMG_Array(Qian);
  354.                       break;
  355.                          case 3:
  356.                                         SMG_Array(Qian);
  357.                       break;
  358.                          case 4:
  359.                                         SMG_Array(Qian);
  360.                       break;
  361.                          case 5:
  362.                                         SMG_Array(Qian);
  363.                       break;
  364.                          case 6:
  365.                                         SMG_Array(Qian);
  366.                       break;
  367.                          case 7:
  368.                                         SMG_Array(Qian);
  369.                       break;
  370.                          case 8:
  371.                                         SMG_Array(Qian);
  372.                       break;
  373.                          case 9:
  374.                                         SMG_Array(Qian);
  375.                       break;
  376.                  }
  377.                 SMG_COM1 = 1;
  378.                 SMG_COM2 = 0;
  379.                 SMG_COM3 = 1;
  380.                 SMG_COM4 = 1;
  381.                 switch(Bai)
  382.                  {
  383.                          case 0:
  384.                                         SMG_Array(Bai);
  385.                       break;
  386.                          case 1:
  387.                                         SMG_Array(Bai);
  388.                       break;
  389.                          case 2:
  390.                                         SMG_Array(Bai);
  391.                       break;
  392.                          case 3:
  393.                                         SMG_Array(Bai);
  394.                       break;
  395.                          case 4:
  396.                                         SMG_Array(Bai);
  397.                       break;
  398.                          case 5:
  399.                                         SMG_Array(Bai);
  400.                       break;
  401.                          case 6:
  402.                                         SMG_Array(Bai);
  403.                       break;
  404.                          case 7:
  405.                                         SMG_Array(Bai);
  406.                       break;
  407.                          case 8:
  408.                                         SMG_Array(Bai);
  409.                       break;
  410.                          case 9:
  411.                                         SMG_Array(Bai);
  412.                       break;
  413.                  }
  414.                  SMG_COM1 = 1;
  415.                  SMG_COM2 = 1;
  416.                  SMG_COM3 = 0;
  417.                  SMG_COM4 = 1;
  418.                  switch(Shi)
  419.                  {
  420.                          case 0:
  421.                                         SMG_Array(Shi);
  422.                       break;
  423.                          case 1:
  424.                                         SMG_Array(Shi);
  425.                       break;
  426.                          case 2:
  427.                                         SMG_Array(Shi);
  428.                       break;
  429.                          case 3:
  430.                                         SMG_Array(Shi);
  431.                       break;
  432.                          case 4:
  433.                                         SMG_Array(Shi);
  434.                       break;
  435.                          case 5:
  436.                                         SMG_Array(Shi);
  437.                       break;
  438.                          case 6:
  439.                                         SMG_Array(Shi);
  440.                       break;
  441.                          case 7:
  442.                                         SMG_Array(Shi);
  443.                       break;
  444.                          case 8:
  445.                                         SMG_Array(Shi);
  446.                       break;
  447.                          case 9:
  448.                                         SMG_Array(Shi);
  449.                       break;
  450.                  }
  451.                  SMG_COM1 = 1;
  452.                  SMG_COM2 = 1;
  453.                  SMG_COM3 = 1;
  454.                  SMG_COM4 = 0;
  455.                  switch(Ge)
  456.                  {
  457.                          case 0:
  458.                                         SMG_Array(Ge);
  459.                       break;
  460.                          case 1:
  461.                                         SMG_Array(Ge);
  462.                       break;
  463.                          case 2:
  464.                                         SMG_Array(Ge);
  465.                       break;
  466.                          case 3:
  467.                                         SMG_Array(Ge);
  468.                       break;
  469.                          case 4:
  470.                                         SMG_Array(Ge);
  471.                       break;
  472.                          case 5:
  473.                                         SMG_Array(Ge);
  474.                       break;
  475.                          case 6:
  476.                                         SMG_Array(Ge);
  477.                       break;
  478.                          case 7:
  479.                                         SMG_Array(Ge);
  480.                       break;
  481.                          case 8:
  482.                                         SMG_Array(Ge);
  483.                       break;
  484.                          case 9:
  485.                                         SMG_Array(Ge);
  486.                       break;
  487.                  }
  488. }

  489. /*********************************主程序*************************************************/
  490. void main()
  491. {
  492.     SystemInit();       
  493.           GpioInit();
  494.           while(1)
  495.           {
  496.                  SMG_Display(1234);
  497.           };
  498. }
复制代码
代码500行,三分之二都是数码管显示代码,写的太过于繁琐,太狗屎,大佬们看看,有没有好的写法,有例程更好,谢谢大佬们
发表于 2020-2-28 13:02:54 | 显示全部楼层
本帖最后由 sz1988 于 2020-2-28 13:05 编辑

switch处理改用函数指针,或者用数组来查表输出吧!另外要习惯写注释啊
回复 支持 反对

使用道具 举报

发表于 2020-2-28 13:09:37 | 显示全部楼层
把0~9数字分别做个字模表,然后直接调用。
回复 支持 反对

使用道具 举报

发表于 2020-2-28 13:12:01 | 显示全部楼层
本帖最后由 hujj 于 2020-2-28 14:05 编辑

建议段选控制集中用一个IO口,配合定义数组,可以简化许多代码。
回复 支持 反对

使用道具 举报

发表于 2020-2-28 15:21:42 | 显示全部楼层
在老论坛的我爱单片机分区,搜索“数码管”,可以找到不少例程。
回复 支持 反对

使用道具 举报

发表于 2020-2-28 20:10:40 来自手机浏览器 | 显示全部楼层
老区论坛有,我也借用了一下效果比较好,数码管的驱动代码也没有那么多…
回复 支持 反对

使用道具 举报

发表于 2020-2-28 22:56:49 来自手机浏览器 | 显示全部楼层
哎,怎么能这样呢,一个char有八位,每个位&一个端口,就是数码管的八段啊,
回复 支持 反对

使用道具 举报

发表于 2020-2-29 11:42:21 | 显示全部楼层
本帖最后由 la45088d1 于 2020-2-29 11:53 编辑
  1. sbit SMG_COM2 = P2^1;               //     ||          ||
  2. sbit SMG_COM3 = P0^6;               //     ||          ||
  3. sbit SMG_COM4 = P0^4;               //     ||          ||
  4. sbit SMG_A = P2^7;                  //     ||          ||
  5. sbit SMG_B = P0^7;                  //       ==========        
  6. sbit SMG_C = P0^2;                  //     ||          ||
  7. sbit SMG_D = P0^0;                  //     ||          ||
  8. sbit SMG_E = P1^1;                  //     ||          ||
  9. sbit SMG_F = P2^2;                  //     ||          ||
  10. sbit SMG_G = P0^3;                  //       ==========
  11. sbit SMG_DP = P0^1;                 //       LED ???


  12. void Delay2us(unsigned int TimeSlotCtX2us)
  13. {
  14.         while(TimeSlotCtX2us--);        
  15. }

  16. void SegDataRemap(Uint8 DpValue)
  17. {
  18.         SMG_A = DpValue;
  19.         SMG_B = DpValue >> 1;
  20.         SMG_C = DpValue >> 2;
  21.         SMG_D = DpValue >> 3;
  22.         SMG_E = DpValue >> 4;
  23.         SMG_F = DpValue >> 5;
  24.         SMG_G = DpValue >> 6;
  25.         SMG_DP = DpValue >> 7;
  26. }

  27. void ComSelect(Unit8 ComCount)
  28. {
  29.         switch(ComCount)
  30.         {
  31.                 case 1:
  32.                 {
  33.                         SMG_COM1 = 0;
  34.                 }
  35.                 case 2:
  36.                 {
  37.                         SMG_COM2 = 0;
  38.                 }
  39.                 case 2:
  40.                 {
  41.                         SMG_COM2 = 0;
  42.                 }
  43.                 case 3:
  44.                 {
  45.                         SMG_COM3 = 0;
  46.                 }
  47.                 case 4:
  48.                 {
  49.                         SMG_COM4 = 0;
  50.                 }
  51.                 default:
  52.                 {
  53.                         SMG_COM1 = 1;
  54.                         SMG_COM2 = 1;
  55.                         SMG_COM3 = 1;
  56.                         SMG_COM4 = 1;
  57.                 }
  58.         }
  59. }

  60. void ShowVariableOnDigitalTube(Uint16 Input)
  61. {
  62.         Uint8 Digit;
  63.         code Uint8 Front[10] = {};
  64.        
  65.         SegDataRemap(Front[Digit / 1000]);
  66.         ComSelect(4);
  67.         Delay2us(100);
  68.        
  69.         SegDataRemap(Front[(Digit % 1000) / 100]);
  70.         ComSelect(3);
  71.         Delay2us(100);
  72.        
  73.         SegDataRemap(Front[(Digit % 100) / 10]);
  74.         ComSelect(2);
  75.         Delay2us(100);
  76.                
  77.         SegDataRemap(Front[Digit % 10]);
  78.         ComSelect(1);
  79.         Delay2us(100);
  80.        
  81.         ComSelect(0);
  82. }

  83. void main()
  84. {
  85.   SystemInit();        
  86.   GpioInit();
  87.   while(1)
  88.   {
  89.     ShowVariableOnDigitalTube(1234);
  90.   }
  91. }
复制代码
回复 支持 反对

使用道具 举报

发表于 2020-2-29 11:53:42 | 显示全部楼层

哪有那么麻烦?

其中Font数组里面按照0-9的顺序填写字模,可以自己完成就不写了。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册 微信登录

x
回复 支持 反对

使用道具 举报

发表于 2020-2-29 12:03:55 | 显示全部楼层
效率有点低,bdata了解下
回复 支持 反对

使用道具 举报

发表于 2020-2-29 12:05:30 | 显示全部楼层
好用的话不打赏也要点个赞
回复 支持 反对

使用道具 举报

发表于 2020-2-29 18:43:50 | 显示全部楼层
        D0=wc&0x01;
        D1=wc&0x02;
        D2=wc&0x04;
        D3=wc&0x08;
        D4=wc&0x10;                               
        D5=wc&0x20;
        D6=wc&0x40;
        D7=wc&0x80;

D1/D2,就是数据IO,wc就是整个传送的数据
回复 支持 反对

使用道具 举报

发表于 2020-2-29 22:08:13 | 显示全部楼层

unsigned char Wai;//放在顶部




void SMG_Array(unsigned char i)
{
                switch(i)
                {
                        case 0:{SMG_A=SMG_B=SMG_C=SMG_D=SMG_E=SMG_F=1;SMG_G=SMG_DP=0};  break;
                        case 1:{SMG_B=SMG_C=1;SMG_A=SMG_D=SMG_E=SMG_F=SMG_G=SMG_DP=0};  break;
                        case 2:{SMG_A=SMG_B=SMG_D=SMG_E=SMG_G=1;SMG_C=SMG_F=SMG_DP=0};  break;
                        case 3:{SMG_A=SMG_B=SMG_C=SMG_D=SMG_G=1;SMG_E=SMG_F=SMG_DP=0};  break;
                        case 4:{SMG_B=SMG_C=SMG_F=SMG_G=1;SMG_A=SMG_D=SMG_E=SMG_DP=0};  break;
                        case 5:{SMG_A=SMG_C=SMG_D=SMG_F=SMD_G=1;SMG_B=SMG_E=SMG_DP=0};  break;
                        case 6:{SMG_A=SMG_C=SMG_D=SMG_E=SMG_F=SMG_G=1;SMG_B=SMG_DP=0};  break;
                        case 7:{SMG_A=SMG_B=SMG_C=1;SMG_D=SMG_E=SMG_F=SMG_G=SMG_DP=0};  break;
                        case 8:{SMG_A=SMG_B=SMG_C=SMG_D=SMG_E=SMG_F=SMG_G=1;SMG_DP=0};  break;
                        case 9:{SMG_A=SMG_B=SMG_C=SMG_D=SMG_F=SMG_G=1;SMG_E=SMG_DP=0};  break;
                          }
              }

void SMG_Display(unsigned int i)
{
                 unsigned char Qian, Bai, Shi, Ge;

                 Wai++;
                 if(Wai>4)Wai=0;
                 Qian = i/1000;
                 Bai = i%1000/100;
                 Shi = i%100/10;
                 Ge = i%10;

                 switch(Wai)
                 {
                    case 0:{SMG_COM1=0;SMG_COM2=SMG_COM3=SMG_COM4=1;SMG_Array(Qian)};  break;
                    case 1:{SMG_COM2=0;SMG_COM1=SMG_COM3=SMG_COM4=1;SMG_Array(Bia)};  break;
                    case 2:{SMG_COM3=0;SMG_COM1=SMG_COM2=SMG_COM4=1;SMG_Array(Shi)};  break;
                    case 3:{SMG_COM4=0;SMG_COM1=SMG_COM2=SMG_COM3=1;SMG_Array(Ge)};  break;
                   }
                   Delay_ms(20);
                   SMG_COM1=SMG_COM2=SMG_COM3=SMG_COM4=1;


}
回复 支持 反对

使用道具 举报

发表于 2020-3-3 21:20:20 来自手机浏览器 | 显示全部楼层
1、字形数据做成表,显示某值直接查表。
2、更重要的,扫描程序放到定时器中断里。
如果第二点做不到,程序永远只能是实验性的,而没实用性。
回复 支持 反对

使用道具 举报

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

本版积分规则

APP|手机版|小黑屋|关于我们|联系我们|法律条款|技术知识分享平台

闽公网安备35020502000485号

闽ICP备2021002735号-2

GMT+8, 2025-7-21 04:48 , Processed in 0.234001 second(s), 10 queries , Redis On.

Powered by Discuz!

© 2006-2025 MyDigit.Net

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