[通用8051核FLASH系列] HC89S003F4单片机制作舵机测试仪diy(自娱自乐)

[复制链接]
2341|16
 楼主| law3411209 发表于 2020-2-29 15:41 | 显示全部楼层 |阅读模式
本帖最后由 芯圣电子官方QQ 于 2023-7-25 14:24 编辑

      前几个月买了十个s90舵机,没有舵机测试仪,没有在淘宝买,打算自己制作一个,本着成功就好,不成拉倒的态度,就制作着看看,电路图没有参考,乱画的,也不知道有没有问题,
      电路图与pcb使用立创EDA在线版绘制,疫情期间,在公司没事干,上班摸鱼,画电路图与pcb。 562525e5a0de83ef06.png 897385e5a0e0806411.png 833895e5a14cea3091.png
  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. unsigned int gui_AdcValue = 0;                          //用于存放ADC的值



  25. /*****************************************************************************************/
  26. // * @说明          延时函数
  27. // * @参数          fui_i : 延时时间
  28. // * @返回值 无
  29. // * @注         Fcpu = 16MHz,fui_i = 1时,延时时间约为2us
  30. /****************************************************************************************/

  31. void Delay_2us(unsigned int fui_i)
  32. {
  33.         while(fui_i--);        
  34. }

  35. void Delay_ms(unsigned int i)
  36. {
  37.         unsigned int x,y;
  38.         for(x=i;x>0;x--)
  39.                 for(y=610;y>0;y--);
  40. }




  41. /************************************系统初始化****************************************/
  42. void SystemInit()
  43. {
  44.         WDTCCR = 0x00;                                                    //关闭看门狗
  45.                                             //本例程为方便测试关闭看门狗,实际使用中,建议客户打开看门狗,详见WDT复位例程
  46.         CLKSWR = 0x51;                                                    //选择内部高频RC为系统时钟,内部高频RC 2分频,Fosc=16MHz
  47.         CLKDIV = 0x01;                                                    //Fosc 1分频得到Fcpu,Fcpu=16MHz
  48. /************************************ADC初始化*****************************************/
  49.         P0M2 = P0M2&0x0F|0x03;                //P05设置为模拟输入
  50.         ADCC0 = 0x80;                                                  //打开ADC转换电源
  51.         Delay_2us(10);                                                 //延时20us,确保ADC系统稳定
  52.         ADCC1 = 0x05;                                                  //选择外部通道1
  53.         ADCC2 = 0x4D;                                                  //转换结果12位数据,数据右对齐,ADC时钟16分频
  54.         
  55. }

  56. /*********************************设置IO口模式*****************************************/
  57. void GpioInit()
  58. {
  59.         /***************************************************************************************
  60.                        * @实现效果        设置各个IO口的工作状态
  61.   ***************************************************************************************/        
  62.   /***********************************设置IO口模式***************************************/
  63.             //P0M1 = P0M1&0xF0|0x00;                                //P02设置为输入(非施密特)
  64.             //P0M0 = P0M0&0x0F|0x10;                                //P01设置为带下拉输入(非施密特)
  65.             //P0M0 = P0M0&0xF0|0x02;                                //P00设置为带上拉输入(非施密特)
  66.             //P1M0 = P1M0&0x0F|0x30;                                //P11设置为带模拟输入
  67.             //P2M0 = P2M0&0xF0|0x04;                                //P20设置为输入(施密特)
  68.             //P0M2 = P0M2&0x0F|0x50;                                //P05设置为带下拉输入(施密特)
  69.             //P0M2 = P0M2&0xF0|0x06;                                //P04设置为带上拉输入(施密特)
  70.             //P0M3 = P0M3&0x0F|0x80;                                //P07设置为推挽输出
  71.             //P0M3 = P0M3&0xF0|0x09;                                //P06设置为开漏输出
  72.             //P2M1 = P2M1&0xF0|0x0A;                                //P22设置为带上拉开漏输出
  73.            P2M3 = P2M3&0x0F|0x80;  //SMG_A P27 推挽输出  
  74.            P0M3 = P0M3&0x0F|0x80;  //SMG_B P07 推挽输出
  75.            P0M1 = P0M1&0xF0|0x08;  //SMG_C P02 推挽输出
  76.            P0M0 = P0M0&0xF0|0x08;  //SMG_D P00 推挽输出
  77.            P1M0 = P1M0&0x0F|0x80;  //SMG_E P11 推挽输出
  78.            P2M1 = P2M1&0xF0|0x08;  //SMG_F P22 推挽输出
  79.            P0M1 = P0M1&0X0F|0x80;  //SMG_G P03 推挽输出
  80.            P0M0 = P0M0&0x0F|0x80;  //SMG_DP P01 推挽输出
  81.            P1M0 = P1M0&0XF0|0x09;  //SMG_COM1 P10 推挽输出
  82.            P2M0 = P2M0&0x0F|0x90;  //SMG_COM2 P21 推挽输出
  83.            P0M3 = P0M3&0XF0|0x09;  //SMG_COM3 P06 推挽输出
  84.            P0M2 = P0M2&0xF0|0x09;  //SMG_COM4 P04 推挽输出
  85.                  //数码管COM端口初始化为高电平 不点亮
  86.                  SMG_COM1 = 1;
  87.                  SMG_COM2 = 1;
  88.                  SMG_COM3 = 1;
  89.                  SMG_COM4 = 1;
  90. }




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

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

  497. /*********************************主程序*************************************************/
  498. void main()
  499. {
  500.     SystemInit();        
  501.           GpioInit();
  502.           while(1)
  503.           {
  504.                         ADCC0 |= 0x40;                                        //启动ADC转换
  505.                         while(!(ADCC0&0x20));                //等待ADC转换结束
  506.                         ADCC0 &=~ 0x20;                                        //清除标志位
  507.                         gui_AdcValue = ADCR;                 //获取ADC的值
  508.                   SMG_Display(gui_AdcValue=(gui_AdcValue+819)/1.6375);
  509.           };
  510. }
pcb上面的的引脚由于布线方便导致与电路图不一样,程序也写的跟狗屎一样,大家都这样说,没有办法,就这点水平了。
yygdzjs 发表于 2020-2-29 18:55 | 显示全部楼层
不错,谢谢分享!
 楼主| law3411209 发表于 2020-3-2 15:27 | 显示全部楼层
   粗心大意了,PWM_OUT引脚没有引出,也没有布线,pcb上面的PWM_OUT插针无信号输出。由于led数码管已经占用单片机大部分引脚,只能把数码管的SMG_DP小数点去掉,在pcb上面用刀片划开,飞线到插针与单片机引脚相连,PWM_OUTa输出印射P0^1引脚。
  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;   

  24. unsigned int gui_AdcValue = 0;                          //用于存放ADC的值



  25. /*****************************************************************************************/
  26. // * @说明          延时函数
  27. // * @参数          fui_i : 延时时间
  28. // * @返回值 无
  29. // * @注         Fcpu = 16MHz,fui_i = 1时,延时时间约为2us
  30. /****************************************************************************************/

  31. void Delay_2us(unsigned int fui_i)
  32. {
  33.         while(fui_i--);       
  34. }

  35. void Delay_ms(unsigned int i)
  36. {
  37.         unsigned int x,y;
  38.         for(x=i;x>0;x--)
  39.                 for(y=610;y>0;y--);
  40. }




  41. /************************************系统初始化****************************************/
  42. void SystemInit()
  43. {
  44.         WDTCCR = 0x00;                                                    //关闭看门狗
  45.                                             //本例程为方便测试关闭看门狗,实际使用中,建议客户打开看门狗,详见WDT复位例程
  46.         CLKSWR = 0x51;                                                    //选择内部高频RC为系统时钟,内部高频RC 2分频,Fosc=16MHz
  47.         CLKDIV = 0x01;                                                    //Fosc 1分频得到Fcpu,Fcpu=16MHz
  48. /************************************ADC初始化*****************************************/
  49.         P0M2 = P0M2&0x0F|0x03;                //P05设置为模拟输入
  50.         ADCC0 = 0x80;                                                  //打开ADC转换电源
  51.         Delay_2us(10);                                                 //延时20us,确保ADC系统稳定
  52.         ADCC1 = 0x05;                                                  //选择外部通道1
  53.         ADCC2 = 0x4D;                                                  //转换结果12位数据,数据右对齐,ADC时钟16分频
  54.        
  55.         PWM0_MAP = 0x01;                                        //PWM0通道映射P01口
  56.   PWM0C = 0x01;                                            //PWM0高有效,PWM01高有效,时钟8分频

  57.         //独立模式下,PWM0和PWM01共用一个周期寄存器
  58.         //PWM0的占空比调节使用                        PWM0组的占空比寄存器
  59.         //PWM01的占空比调节使用                        PWM0组的死区寄存器

  60.         //周期计算         = 0x9C4O / (Fosc / PWM分频系数)                (Fosc见系统时钟配置的部分)
  61.         //                            = 0x9C40 / (16000000 / 8)                       
  62.         //                             = 40000   /2000000
  63.         //                            = 200000   50Hz

  64.         PWM0PH = 0x9C;                                                //周期高4位设置为0x9C
  65.         PWM0PL = 0x40;                                                //周期低8位设置为0x40
  66.              PWM0EN = 0x0F;                                                //使能PWM0,工作于独立模式
  67.        
  68. }

  69. /*********************************设置IO口模式*****************************************/
  70. void GpioInit()
  71. {
  72.         /***************************************************************************************
  73.                        * @实现效果        设置各个IO口的工作状态
  74.   ***************************************************************************************/       
  75.   /***********************************设置IO口模式***************************************/
  76.             //P0M1 = P0M1&0xF0|0x00;                                //P02设置为输入(非施密特)
  77.             //P0M0 = P0M0&0x0F|0x10;                                //P01设置为带下拉输入(非施密特)
  78.             //P0M0 = P0M0&0xF0|0x02;                                //P00设置为带上拉输入(非施密特)
  79.             //P1M0 = P1M0&0x0F|0x30;                                //P11设置为带模拟输入
  80.             //P2M0 = P2M0&0xF0|0x04;                                //P20设置为输入(施密特)
  81.             //P0M2 = P0M2&0x0F|0x50;                                //P05设置为带下拉输入(施密特)
  82.             //P0M2 = P0M2&0xF0|0x06;                                //P04设置为带上拉输入(施密特)
  83.             //P0M3 = P0M3&0x0F|0x80;                                //P07设置为推挽输出
  84.             //P0M3 = P0M3&0xF0|0x09;                                //P06设置为开漏输出
  85.             //P2M1 = P2M1&0xF0|0x0A;                                //P22设置为带上拉开漏输出
  86.            P2M3 = P2M3&0x0F|0x80;  //SMG_A P27 推挽输出  
  87.            P0M3 = P0M3&0x0F|0x80;  //SMG_B P07 推挽输出
  88.            P0M1 = P0M1&0xF0|0x08;  //SMG_C P02 推挽输出
  89.            P0M0 = P0M0&0xF0|0x08;  //SMG_D P00 推挽输出
  90.            P1M0 = P1M0&0x0F|0x80;  //SMG_E P11 推挽输出
  91.            P2M1 = P2M1&0xF0|0x08;  //SMG_F P22 推挽输出
  92.            P0M1 = P0M1&0X0F|0x80;  //SMG_G P03 推挽输出
  93.           // P0M0 = P0M0&0x0F|0x80;  //SMG_DP P01 推挽输出
  94.            P1M0 = P1M0&0XF0|0x09;  //SMG_COM1 P10 推挽输出
  95.            P2M0 = P2M0&0x0F|0x90;  //SMG_COM2 P21 推挽输出
  96.            P0M3 = P0M3&0XF0|0x09;  //SMG_COM3 P06 推挽输出
  97.            P0M2 = P0M2&0xF0|0x09;  //SMG_COM4 P04 推挽输出
  98.                  P0M0 = P0M0&0x0F|0x80;  // PWM_OUT     推挽输出
  99.                  
  100.                  //数码管COM端口初始化为高电平 不点亮
  101.                  SMG_COM1 = 1;
  102.                  SMG_COM2 = 1;
  103.                  SMG_COM3 = 1;
  104.                  SMG_COM4 = 1;
  105. }




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

  356. void SMG_Display(unsigned int i)
  357. {
  358.                  unsigned char Qian, Bai, Shi, Ge;
  359.                  Qian = i/1000;
  360.            Bai = i%1000/100;
  361.            Shi = i%100/10;
  362.            Ge = i%10;
  363.            SMG_COM1 = 0;
  364.                  SMG_COM2 = 1;
  365.            SMG_COM3 = 1;
  366.            SMG_COM4 = 1;
  367.                  switch(Qian)
  368.                  {
  369.                          case 0:
  370.                                         SMG_Array(Qian);
  371.                       break;
  372.                          case 1:
  373.                                         SMG_Array(Qian);
  374.                       break;
  375.                          case 2:
  376.                                         SMG_Array(Qian);
  377.                       break;
  378.                          case 3:
  379.                                         SMG_Array(Qian);
  380.                       break;
  381.                          case 4:
  382.                                         SMG_Array(Qian);
  383.                       break;
  384.                          case 5:
  385.                                         SMG_Array(Qian);
  386.                       break;
  387.                          case 6:
  388.                                         SMG_Array(Qian);
  389.                       break;
  390.                          case 7:
  391.                                         SMG_Array(Qian);
  392.                       break;
  393.                          case 8:
  394.                                         SMG_Array(Qian);
  395.                       break;
  396.                          case 9:
  397.                                         SMG_Array(Qian);
  398.                       break;
  399.                  }
  400.                 SMG_COM1 = 1;
  401.                 SMG_COM2 = 0;
  402.                 SMG_COM3 = 1;
  403.                 SMG_COM4 = 1;
  404.                 switch(Bai)
  405.                  {
  406.                          case 0:
  407.                                         SMG_Array(Bai);
  408.                       break;
  409.                          case 1:
  410.                                         SMG_Array(Bai);
  411.                       break;
  412.                          case 2:
  413.                                         SMG_Array(Bai);
  414.                       break;
  415.                          case 3:
  416.                                         SMG_Array(Bai);
  417.                       break;
  418.                          case 4:
  419.                                         SMG_Array(Bai);
  420.                       break;
  421.                          case 5:
  422.                                         SMG_Array(Bai);
  423.                       break;
  424.                          case 6:
  425.                                         SMG_Array(Bai);
  426.                       break;
  427.                          case 7:
  428.                                         SMG_Array(Bai);
  429.                       break;
  430.                          case 8:
  431.                                         SMG_Array(Bai);
  432.                       break;
  433.                          case 9:
  434.                                         SMG_Array(Bai);
  435.                       break;
  436.                  }
  437.                  SMG_COM1 = 1;
  438.                  SMG_COM2 = 1;
  439.                  SMG_COM3 = 0;
  440.                  SMG_COM4 = 1;
  441.                  switch(Shi)
  442.                  {
  443.                          case 0:
  444.                                         SMG_Array(Shi);
  445.                       break;
  446.                          case 1:
  447.                                         SMG_Array(Shi);
  448.                       break;
  449.                          case 2:
  450.                                         SMG_Array(Shi);
  451.                       break;
  452.                          case 3:
  453.                                         SMG_Array(Shi);
  454.                       break;
  455.                          case 4:
  456.                                         SMG_Array(Shi);
  457.                       break;
  458.                          case 5:
  459.                                         SMG_Array(Shi);
  460.                       break;
  461.                          case 6:
  462.                                         SMG_Array(Shi);
  463.                       break;
  464.                          case 7:
  465.                                         SMG_Array(Shi);
  466.                       break;
  467.                          case 8:
  468.                                         SMG_Array(Shi);
  469.                       break;
  470.                          case 9:
  471.                                         SMG_Array(Shi);
  472.                       break;
  473.                  }
  474.                  SMG_COM1 = 1;
  475.                  SMG_COM2 = 1;
  476.                  SMG_COM3 = 1;
  477.                  SMG_COM4 = 0;
  478.                  switch(Ge)
  479.                  {
  480.                          case 0:
  481.                                         SMG_Array(Ge);
  482.                       break;
  483.                          case 1:
  484.                                         SMG_Array(Ge);
  485.                       break;
  486.                          case 2:
  487.                                         SMG_Array(Ge);
  488.                       break;
  489.                          case 3:
  490.                                         SMG_Array(Ge);
  491.                       break;
  492.                          case 4:
  493.                                         SMG_Array(Ge);
  494.                       break;
  495.                          case 5:
  496.                                         SMG_Array(Ge);
  497.                       break;
  498.                          case 6:
  499.                                         SMG_Array(Ge);
  500.                       break;
  501.                          case 7:
  502.                                         SMG_Array(Ge);
  503.                       break;
  504.                          case 8:
  505.                                         SMG_Array(Ge);
  506.                       break;
  507.                          case 9:
  508.                                         SMG_Array(Ge);
  509.                       break;
  510.                  }
  511. }

  512. /*********************************主程序*************************************************/
  513. void main()
  514. {
  515.     SystemInit();       
  516.           GpioInit();
  517.           while(1)
  518.           {
  519.                         ADCC0 |= 0x40;                                        //启动ADC转换
  520.                         while(!(ADCC0&0x20));                //等待ADC转换结束
  521.                         ADCC0 &=~ 0x20;                                        //清除标志位
  522.                         gui_AdcValue = ADCR;                 //获取ADC的值
  523.                   SMG_Display(gui_AdcValue=(gui_AdcValue+819)/1.6375);
  524.                         //占空比计算= 0x0FA0 / (Fosc / PWM分频系数)                (Fosc见系统时钟配置的部分)
  525.             //                                        = 0x0155 / (16000000 / 8)                       
  526.             //                                         = 4000          / 2000000
  527.             //                                        = 2000us                   占空比为 2000/200000 = 1%

  528.             PWM0DH = gui_AdcValue>>8;                                                //PWM0高4位占空比0x0F
  529.             PWM0DL = gui_AdcValue;                                                //PWM0低8位占空比0xA0
  530.             
  531.           };
  532. }
程序依旧还是狗屎一样烂,大部分代码引用于官方例程。
kkzz 发表于 2020-3-3 22:18 | 显示全部楼层
没有演示视频吗         
hudi008 发表于 2020-3-3 22:18 | 显示全部楼层
看着还不错的资料。      
lzmm 发表于 2020-3-3 22:18 | 显示全部楼层
舵机测试仪?      
minzisc 发表于 2020-3-3 22:19 | 显示全部楼层
是用来显示角度的吗   
selongli 发表于 2020-3-3 22:19 | 显示全部楼层
电路图与pcb有吗      
fentianyou 发表于 2020-3-3 22:19 | 显示全部楼层
看着还是不错呢。            
xiaoyaodz 发表于 2020-3-3 22:19 | 显示全部楼层
给楼主点赞了。        
febgxu 发表于 2020-3-3 22:19 | 显示全部楼层
               
sdlls 发表于 2020-3-3 22:20 | 显示全部楼层
舵机测试仪有什么用呢   
pixhw 发表于 2020-3-3 22:20 | 显示全部楼层
以前使用stm32在控制过电机  
 楼主| law3411209 发表于 2020-3-5 08:53 来自手机 | 显示全部楼层
本帖最后由 law3411209 于 2020-3-7 09:10 编辑

程序有改动,这是演示视频https://www.bilibili.com/video/av93579356/
jiaisr123 发表于 2020-3-6 17:36 | 显示全部楼层
赞一个
 楼主| law3411209 发表于 2020-3-7 10:07 | 显示全部楼层
  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;   

  24. unsigned int gui_AdcValue = 0;                          //用于存放ADC的值
  25. unsigned int gui_AdcValue1 = 0;       //用于存放数显的值
  26. unsigned int gui_AdcValue2 = 0;       //用于存放占空比的值

  27. /*****************************************************************************************/
  28. // * @说明          延时函数
  29. // * @参数          fui_i : 延时时间
  30. // * @返回值 无
  31. // * @注         Fcpu = 16MHz,fui_i = 1时,延时时间约为2us
  32. /****************************************************************************************/

  33. void Delay_2us(unsigned int fui_i)
  34. {
  35.         while(fui_i--);       
  36. }

  37. void Delay_ms(unsigned int i)
  38. {
  39.         unsigned int x,y;
  40.         for(x=i;x>0;x--)
  41.                 for(y=610;y>0;y--);
  42. }




  43. /************************************系统初始化****************************************/
  44. void SystemInit()
  45. {
  46.         WDTCCR = 0x00;                                                    //关闭看门狗
  47.                                             //本例程为方便测试关闭看门狗,实际使用中,建议客户打开看门狗,详见WDT复位例程
  48.         CLKSWR = 0x51;                                                    //选择内部高频RC为系统时钟,内部高频RC 2分频,Fosc=16MHz
  49.         CLKDIV = 0x01;                                                    //Fosc 1分频得到Fcpu,Fcpu=16MHz
  50. /************************************ADC初始化*****************************************/
  51.         P0M2 = P0M2&0x0F|0x03;                //P05设置为模拟输入
  52.         ADCC0 = 0x80;                                                  //打开ADC转换电源
  53.         Delay_2us(10);                                                 //延时20us,确保ADC系统稳定
  54.         ADCC1 = 0x05;                                                  //选择外部通道1
  55.         ADCC2 = 0x4D;                                                  //转换结果12位数据,数据右对齐,ADC时钟16分频
  56.        
  57.         PWM0_MAP = 0x01;                                        //PWM0通道映射P01口
  58.   PWM0C = 0x03;                                            //PWM0高有效,PWM01高有效,时钟8分频

  59.         //独立模式下,PWM0和PWM01共用一个周期寄存器
  60.         //PWM0的占空比调节使用                        PWM0组的占空比寄存器
  61.         //PWM01的占空比调节使用                        PWM0组的死区寄存器

  62.         //周期计算         = 0x9C4O / (Fosc / PWM分频系数)                (Fosc见系统时钟配置的部分)
  63.         //                            = 0x9C40 / (16000000 / 8)                       
  64.         //                             = 40000   /2000000
  65.         //                            = 200000   50Hz

  66.         PWM0PH = 0x9C;                                                //周期高4位设置为0x9C
  67.         PWM0PL = 0x40;                                                //周期低8位设置为0x40
  68.   PWM0EN = 0x0F;                                                //使能PWM0,工作于独立模式
  69.        
  70. }

  71. /*********************************设置IO口模式*****************************************/
  72. void GpioInit()
  73. {
  74.         /***************************************************************************************
  75.                        * @实现效果        设置各个IO口的工作状态
  76.   ***************************************************************************************/       
  77.   /***********************************设置IO口模式***************************************/
  78.             //P0M1 = P0M1&0xF0|0x00;                                //P02设置为输入(非施密特)
  79.             //P0M0 = P0M0&0x0F|0x10;                                //P01设置为带下拉输入(非施密特)
  80.             //P0M0 = P0M0&0xF0|0x02;                                //P00设置为带上拉输入(非施密特)
  81.             //P1M0 = P1M0&0x0F|0x30;                                //P11设置为带模拟输入
  82.             //P2M0 = P2M0&0xF0|0x04;                                //P20设置为输入(施密特)
  83.             //P0M2 = P0M2&0x0F|0x50;                                //P05设置为带下拉输入(施密特)
  84.             //P0M2 = P0M2&0xF0|0x06;                                //P04设置为带上拉输入(施密特)
  85.             //P0M3 = P0M3&0x0F|0x80;                                //P07设置为推挽输出
  86.             //P0M3 = P0M3&0xF0|0x09;                                //P06设置为开漏输出
  87.             //P2M1 = P2M1&0xF0|0x0A;                                //P22设置为带上拉开漏输出
  88.            P2M3 = P2M3&0x0F|0x80;  //SMG_A P27 推挽输出  
  89.            P0M3 = P0M3&0x0F|0x80;  //SMG_B P07 推挽输出
  90.            P0M1 = P0M1&0xF0|0x08;  //SMG_C P02 推挽输出
  91.            P0M0 = P0M0&0xF0|0x08;  //SMG_D P00 推挽输出
  92.            P1M0 = P1M0&0x0F|0x80;  //SMG_E P11 推挽输出
  93.            P2M1 = P2M1&0xF0|0x08;  //SMG_F P22 推挽输出
  94.            P0M1 = P0M1&0X0F|0x80;  //SMG_G P03 推挽输出
  95.           // P0M0 = P0M0&0x0F|0x80;  //SMG_DP P01 推挽输出
  96.            P1M0 = P1M0&0XF0|0x09;  //SMG_COM1 P10 推挽输出
  97.            P2M0 = P2M0&0x0F|0x90;  //SMG_COM2 P21 推挽输出
  98.            P0M3 = P0M3&0XF0|0x09;  //SMG_COM3 P06 推挽输出
  99.            P0M2 = P0M2&0xF0|0x09;  //SMG_COM4 P04 推挽输出
  100.                  P0M0 = P0M0&0x0F|0x80;  // PWM_OUT     推挽输出
  101.                  
  102.                  //数码管COM端口初始化为高电平 不点亮
  103.                  SMG_COM1 = 1;
  104.                  SMG_COM2 = 1;
  105.                  SMG_COM3 = 1;
  106.                  SMG_COM4 = 1;
  107. }




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

  358. void SMG_Display(unsigned int i)
  359. {
  360.                  unsigned char Qian, Bai, Shi, Ge;
  361.                  Qian = i/1000;
  362.            Bai = i%1000/100;
  363.            Shi = i%100/10;
  364.            Ge = i%10;
  365.            SMG_COM1 = 0;
  366.                  SMG_COM2 = 1;
  367.            SMG_COM3 = 1;
  368.            SMG_COM4 = 1;
  369.                  switch(Qian)
  370.                  {
  371.                          case 0:
  372.                                         SMG_Array(Qian);
  373.                       break;
  374.                          case 1:
  375.                                         SMG_Array(Qian);
  376.                       break;
  377.                          case 2:
  378.                                         SMG_Array(Qian);
  379.                       break;
  380.                          case 3:
  381.                                         SMG_Array(Qian);
  382.                       break;
  383.                          case 4:
  384.                                         SMG_Array(Qian);
  385.                       break;
  386.                          case 5:
  387.                                         SMG_Array(Qian);
  388.                       break;
  389.                          case 6:
  390.                                         SMG_Array(Qian);
  391.                       break;
  392.                          case 7:
  393.                                         SMG_Array(Qian);
  394.                       break;
  395.                          case 8:
  396.                                         SMG_Array(Qian);
  397.                       break;
  398.                          case 9:
  399.                                         SMG_Array(Qian);
  400.                       break;
  401.                  }
  402.                 SMG_COM1 = 1;
  403.                 SMG_COM2 = 0;
  404.                 SMG_COM3 = 1;
  405.                 SMG_COM4 = 1;
  406.                 switch(Bai)
  407.                  {
  408.                          case 0:
  409.                                         SMG_Array(Bai);
  410.                       break;
  411.                          case 1:
  412.                                         SMG_Array(Bai);
  413.                       break;
  414.                          case 2:
  415.                                         SMG_Array(Bai);
  416.                       break;
  417.                          case 3:
  418.                                         SMG_Array(Bai);
  419.                       break;
  420.                          case 4:
  421.                                         SMG_Array(Bai);
  422.                       break;
  423.                          case 5:
  424.                                         SMG_Array(Bai);
  425.                       break;
  426.                          case 6:
  427.                                         SMG_Array(Bai);
  428.                       break;
  429.                          case 7:
  430.                                         SMG_Array(Bai);
  431.                       break;
  432.                          case 8:
  433.                                         SMG_Array(Bai);
  434.                       break;
  435.                          case 9:
  436.                                         SMG_Array(Bai);
  437.                       break;
  438.                  }
  439.                  SMG_COM1 = 1;
  440.                  SMG_COM2 = 1;
  441.                  SMG_COM3 = 0;
  442.                  SMG_COM4 = 1;
  443.                  switch(Shi)
  444.                  {
  445.                          case 0:
  446.                                         SMG_Array(Shi);
  447.                       break;
  448.                          case 1:
  449.                                         SMG_Array(Shi);
  450.                       break;
  451.                          case 2:
  452.                                         SMG_Array(Shi);
  453.                       break;
  454.                          case 3:
  455.                                         SMG_Array(Shi);
  456.                       break;
  457.                          case 4:
  458.                                         SMG_Array(Shi);
  459.                       break;
  460.                          case 5:
  461.                                         SMG_Array(Shi);
  462.                       break;
  463.                          case 6:
  464.                                         SMG_Array(Shi);
  465.                       break;
  466.                          case 7:
  467.                                         SMG_Array(Shi);
  468.                       break;
  469.                          case 8:
  470.                                         SMG_Array(Shi);
  471.                       break;
  472.                          case 9:
  473.                                         SMG_Array(Shi);
  474.                       break;
  475.                  }
  476.                  SMG_COM1 = 1;
  477.                  SMG_COM2 = 1;
  478.                  SMG_COM3 = 1;
  479.                  SMG_COM4 = 0;
  480.                  switch(Ge)
  481.                  {
  482.                          case 0:
  483.                                         SMG_Array(Ge);
  484.                       break;
  485.                          case 1:
  486.                                         SMG_Array(Ge);
  487.                       break;
  488.                          case 2:
  489.                                         SMG_Array(Ge);
  490.                       break;
  491.                          case 3:
  492.                                         SMG_Array(Ge);
  493.                       break;
  494.                          case 4:
  495.                                         SMG_Array(Ge);
  496.                       break;
  497.                          case 5:
  498.                                         SMG_Array(Ge);
  499.                       break;
  500.                          case 6:
  501.                                         SMG_Array(Ge);
  502.                       break;
  503.                          case 7:
  504.                                         SMG_Array(Ge);
  505.                       break;
  506.                          case 8:
  507.                                         SMG_Array(Ge);
  508.                       break;
  509.                          case 9:
  510.                                         SMG_Array(Ge);
  511.                       break;
  512.                  }
  513. }

  514. /*********************************主程序*************************************************/
  515. void main()
  516. {
  517.     SystemInit();       
  518.           GpioInit();
  519.           while(1)
  520.           {
  521.                         ADCC0 |= 0x40;                                        //启动ADC转换
  522.                         while(!(ADCC0&0x20));                //等待ADC转换结束
  523.                         ADCC0 &=~ 0x20;                                        //清除标志位
  524.                         gui_AdcValue = ADCR;                 //获取ADC的值
  525.                        
  526.                         if(gui_AdcValue1>820)
  527.                         {
  528.                                                         //ADC值最大4096 显示值最大2500 4096/2500=1.6384
  529.                                                         //数码管显示值在500——2500之间
  530.                          SMG_Display(gui_AdcValue1=gui_AdcValue/1.6384);  
  531.                                
  532.                                   //占空比计算= 0x0FA0 / (Fosc / PWM分频系数)                (Fosc见系统时钟配置的部分)
  533.                       //                                        = 0x0155 / (16000000 / 128)                       
  534.                       //                                         = 312          / 125000
  535.                       //                                        = 2500us                   占空比为 2000/200000 = 1%
  536.                                
  537.                                                 //2500us 占空比计算值=312 4096/312=13.128
  538.                                                 //   如:我需要2000us
  539.                                                 //                         通过↑公式计算 占空比计算值=250  实际ADC值=250乘以13.128=3282
  540.                                
  541.                                                 gui_AdcValue2=gui_AdcValue/13.128;
  542.                                     PWM0DH = gui_AdcValue2>>8;                                                //PWM0高4位占空比0x0F
  543.                   PWM0DL = gui_AdcValue2;                                                //PWM0低8位占空比0xA0
  544.       }
  545.                         else    //ADC值小于820, 820/1.6384=500 数码管直接锁定显示500
  546.                         {
  547.                                                 SMG_Display(gui_AdcValue1=820);
  548.                         }
  549.             
  550.             
  551.           };
  552. }


  553.        
2020-03-7 :程序修改
wangshujun 发表于 2020-3-24 12:18 | 显示全部楼层
pcb布线便利带来的软件麻烦不是一般大呀
您需要登录后才可以回帖 登录 | 注册

本版积分规则

17

主题

56

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部