找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 10552|回复: 3
收起左侧

简易舵机测试仪

[复制链接]
ID:163392 发表于 2017-2-16 23:45 | 显示全部楼层 |阅读模式
在原来电压显示器的基础上稍加修改就成舵机测试仪。对最小时间片和周期有了更深的了解。

IMG_20170216_232825.jpg IMG_20170216_232906.jpg IMG_20170216_232937.jpg IMG_20170216_232950.jpg





  1. //用于测试电压的     用的单片机是 STC15F408AS
  2. #include <reg51.h>
  3. #include<intrins.h>
  4. void Display(unsigned int num);//用于数码管显示具体数字  显示0到9直接用相应的数字做参数,显示1到9 加个点 用1到9乘以10做参数 0加一个点用11做参数
  5. void Display_num(unsigned int num,unsigned char weizhi); // 用于确认那个数码管显示数字。  第一参数num是要显示的数字, 第二个参数weizhi是要在哪个数码管显示(最左边为1,最右边为4)
  6. void Delay10us();                //@12.000MHz
  7. void delay_n_10us(unsigned int n);
  8. unsigned int a; //保存模数转换后的数据

  9. sfr P2M0=0x96;     //声明 P2引脚模式寄存器
  10. sfr P3M0=0xb2;     //声明 P3引脚模式寄存器
  11. sfr P5=0xc8;
  12. sfr P1ASF=0x9D;    //声明 P1口模拟功能寄存器  p1.7开启模拟功能
  13. sfr ADC_RES=0xBD;  //声明 ADC转换结果寄存器
  14. sfr ADC_CONTR=0xBC;//声明 ADC控制寄存器
  15. sbit OUT=P5^5;//定义一个输出引脚
  16. unsigned int L; //用于存储读出的PWM
  17. unsigned char count;//用于存储次数
  18. unsigned char displaytime;
  19. unsigned int data1,data2,data3; //用于存储PWM的个位和十位和百位

  20.                                        
  21. sbit DA=P2^4;                        //数码管每个引脚
  22. sbit DB=P3^2;
  23. sbit DC=P3^6;
  24. sbit DD=P2^0;
  25. sbit DE=P2^1;
  26. sbit DF=P2^3;
  27. sbit DG=P3^5;
  28. sbit DP=P3^7;

  29. sbit B1=P2^5;                        //四个数码管的引脚定义          用于控制哪个数码管亮
  30. sbit B2=P2^2;
  31. sbit B3=P3^3;
  32. sbit B4=P3^4;

  33. void main()
  34. {
  35.    P2M0=0x1B;                //需要高电平大电流的引脚 2.4、2.3、2.1、2.0,填入数值0001 1011
  36.    P3M0=0xE4;                //需要高电平大电流的引脚 3.7、3.6、3.5、3.2,填入数值1110 0100
  37.    //B1=B2=B3=B4=0;

  38.    
  39.        
  40.   while(1)
  41.   {
  42.     delay_n_10us(400);
  43.         count++;
  44.         if(count>4)
  45.         {
  46.             count=0;
  47.                 B1=B2=B3=B4=0;  //暂时关闭数码管 防止闪烁

  48.                 //开始  模--数转换
  49.         P1ASF=0x80;
  50.             ADC_CONTR=0X88+7;
  51.                    delay_n_10us(5);
  52.             a=ADC_RES;
  53.             L=a;//先将读数给PWM                 
  54.              //输出PWM
  55.               if(L>200)         //如果时间大于2ms,从1ms重新开始
  56.              {
  57.                 L=200;
  58.              }
  59.              else if(L<100)         //如果时间小于2ms,从1ms重新开始
  60.                   {
  61.                         L=100;
  62.                       }               
  63.              OUT=1;
  64.              delay_n_10us(L);//输出高电平   
  65.              OUT=0;
  66.                  data3=L/100;
  67.                  data2=L%100/10;
  68.                  data1=L%10;
  69.                  
  70.                
  71.                      
  72.         }
  73.          
  74.        
  75.         displaytime++;
  76.         if(displaytime>2)
  77.           displaytime=0;
  78.         if(displaytime==0)     
  79.           Display_num(data1,4);        //显示个位
  80.         if(displaytime==1)
  81.           Display_num(data2,3);        //显示十位
  82.         if(displaytime==2)
  83.           Display_num(data3*10,2); //显示百位
  84.                        
  85.           
  86.           
  87.        
  88.          
  89.   }
  90.   
  91. }
  92. void Display(unsigned int num) //显示0到9直接用相应的数字做参数,显示1到9 加个点 用1到9乘以10做参数 0加一个点用11做参数
  93. {
  94.    switch(num)
  95.         {
  96.                  case 0:
  97.                      {
  98.                          DA=0;  DB=0;   DC=0;          DD=0;   DE=0; DF=0; DG=1;      DP=1;         //显示0       
  99.                          break;          
  100.                          }
  101.              case 1:
  102.                      {
  103.                          DA=1;  DB=0;   DC=0;          DD=1;  DE=1; DF=1;   DG=1;      DP=1;         //显示1
  104.                          break;                  
  105.                          }
  106.                  case 2:
  107.                      {
  108.                          DA=0;  DB=0;   DC=1;          DD=0;   DE=0;  DF=1;          DG=0;     DP=1;         //显示2                  
  109.                          break;
  110.                          }
  111.                  case 3:
  112.                      {
  113.                          DA=0;  DB=0;    DC=0;          DD=0;    DE=1; DF=1;         DG=0;     DP=1;         //显示3                  
  114.                          break;
  115.                          }
  116.                  case 4:
  117.                      {
  118.                          DA=1;  DB=0;  DC=0;          DD=1;    DE=1;  DF=0;           DG=0;     DP=1;         //显示4                  
  119.                          break;
  120.                          }
  121.                  case 5:
  122.                      {
  123.                          DA=0;  DB=1;     DC=0;          DD=0;   DE=1;   DF=0;           DG=0;   DP=1;         //显示5                  
  124.                          break;
  125.                          }
  126.                  case 6:
  127.                      {
  128.                          DA=0;  DB=1;     DC=0;          DD=0;  DE=0;  DF=0;          DG=0;    DP=1;         //显示6                  
  129.                          break;
  130.                          }
  131.                  case 7:
  132.                      {
  133.                          DA=0;  DB=0;   DC=0;          DD=1;   DE=1;  DF=1;          DG=1;     DP=1;         //显示7                  
  134.                          break;
  135.                          }
  136.                  case 8:
  137.                      {
  138.                          DA=0;  DB=0;    DC=0;          DD=0;  DE=0;  DF=0;          DG=0;     DP=1;         //显示8                  
  139.                          break;
  140.                          }
  141.                  case 9:
  142.                      {
  143.                          DA=0;  DB=0;  DC=0;          DD=0;   DE=1; DF=0;           DG=0;      DP=1;         //显示9                  
  144.                          break;
  145.                          }
  146.                  
  147.              case 10:
  148.                      {
  149.                          DA=1;  DB=0;   DC=0;          DD=1;  DE=1; DF=1;   DG=1;      DP=0;         //显示1加个点
  150.                          break;                  
  151.                          }
  152.                 case 11:
  153.                      {
  154.                          DA=0;  DB=0;   DC=0;          DD=0;   DE=0; DF=0; DG=1;      DP=0;         //显示0        加个点
  155.                          break;          
  156.                          }
  157.                  case 20:
  158.                      {
  159.                          DA=0;  DB=0;   DC=1;          DD=0;   DE=0;  DF=1;          DG=0;     DP=0;         //显示2        加个点          
  160.                          break;
  161.                          }
  162.                  case 30:
  163.                      {
  164.                          DA=0;  DB=0;    DC=0;          DD=0;    DE=1; DF=1;         DG=0;     DP=0;         //显示3        加个点          
  165.                          break;
  166.                          }
  167.                  case 40:
  168.                      {
  169.                          DA=1;  DB=0;  DC=0;          DD=1;    DE=1;  DF=0;           DG=0;     DP=0;         //显示4        加个点          
  170.                          break;
  171.                          }
  172.                  case 50:
  173.                      {
  174.                          DA=0;  DB=1;     DC=0;          DD=0;   DE=1;   DF=0;           DG=0;   DP=0;         //显示5        加个点          
  175.                          break;
  176.                          }
  177.                  case 60:
  178.                      {
  179.                          DA=0;  DB=1;     DC=0;          DD=0;  DE=0;  DF=0;          DG=0;    DP=0;         //显示6        加个点          
  180.                          break;
  181.                          }
  182.                  case 70:
  183.                      {
  184.                          DA=0;  DB=0;   DC=0;          DD=1;   DE=1;  DF=1;          DG=1;     DP=0;         //显示7        加个点          
  185.                          break;
  186.                          }
  187.                  case 80:
  188.                      {
  189.                          DA=0;  DB=0;    DC=0;          DD=0;  DE=0;  DF=0;          DG=0;     DP=0;         //显示8        加个点          
  190.                          break;
  191.                          }
  192.                  case 90:
  193.                      {
  194.                          DA=0;  DB=0;  DC=0;          DD=0;   DE=1; DF=0;           DG=0;      DP=0;         //显示9        加个点          
  195.                          break;
  196.                          }
  197.                  default :
  198.                      {
  199.                           DA=1;  DB=1;   DC=1;          DD=1;   DE=1;  DF=1;          DG=1;     DP=1;         //全灭          
  200.                          break;
  201.                          }
  202.         }
  203. }

  204. void Display_num(unsigned int num,unsigned char weizhi)
  205. {
  206.    switch(weizhi)
  207.    {
  208.       case 1:
  209.                {
  210.                         B1=1; B4=0;B2=0;B3=0;
  211.                                   Display(num);
  212.                                 break;
  213.                         }
  214.            case 2:
  215.                {
  216.                         B2=1; B1=0;B3=0;B4=0;
  217.                                   Display(num);
  218.                                 break;
  219.                         }
  220.             case 3:
  221.                {
  222.                         B3=1; B1=0;B2=0;B4=0;
  223.                                   Display(num);
  224.                                 break;
  225.                         }
  226.                  case 4:
  227.                {
  228.                         B4=1; B1=0;B2=0;B3=0;
  229.                                   Display(num);
  230.                                 break;
  231.                         }


  232.     }  
  233. }  





  234. void Delay10us()                //@12.000MHz
  235. {
  236.         unsigned char i;

  237.         _nop_();
  238.         _nop_();
  239.         i = 24;
  240.         while (--i);
  241. }

  242. void delay_n_10us(unsigned int n) //延时n个10us的函数
  243. {      
  244.      while(n)         
  245.           {  
  246.               Delay10us();   
  247.                   n=n-1;//每循环一次n减小1  
  248.            }
  249. }
复制代码



评分

参与人数 1黑币 +100 收起 理由
admin + 100 共享资料的黑币奖励!

查看全部评分

回复

使用道具 举报

ID:603812 发表于 2021-12-13 10:01 | 显示全部楼层
高手谢谢分享,老贴子顶起别让它沉了
回复

使用道具 举报

ID:895060 发表于 2022-12-7 21:29 | 显示全部楼层
我来了来了 发表于 2021-12-13 10:01
高手谢谢分享,老贴子顶起别让它沉了

不错不错,学习了
回复

使用道具 举报

ID:1056411 发表于 2022-12-8 10:31 | 显示全部楼层
用什么软件编程的,我是新手
回复

使用道具 举报

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

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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