找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 11718|回復(fù): 3
打印 上一主題 下一主題
收起左側(cè)

簡(jiǎn)易舵機(jī)測(cè)試儀

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
在原來(lái)電壓顯示器的基礎(chǔ)上稍加修改就成舵機(jī)測(cè)試儀。對(duì)最小時(shí)間片和周期有了更深的了解。







  1. //用于測(cè)試電壓的     用的單片機(jī)是 STC15F408AS
  2. #include <reg51.h>
  3. #include<intrins.h>
  4. void Display(unsigned int num);//用于數(shù)碼管顯示具體數(shù)字  顯示0到9直接用相應(yīng)的數(shù)字做參數(shù),顯示1到9 加個(gè)點(diǎn) 用1到9乘以10做參數(shù) 0加一個(gè)點(diǎn)用11做參數(shù)
  5. void Display_num(unsigned int num,unsigned char weizhi); // 用于確認(rèn)那個(gè)數(shù)碼管顯示數(shù)字。  第一參數(shù)num是要顯示的數(shù)字, 第二個(gè)參數(shù)weizhi是要在哪個(gè)數(shù)碼管顯示(最左邊為1,最右邊為4)
  6. void Delay10us();                //@12.000MHz
  7. void delay_n_10us(unsigned int n);
  8. unsigned int a; //保存模數(shù)轉(zhuǎn)換后的數(shù)據(jù)

  9. sfr P2M0=0x96;     //聲明 P2引腳模式寄存器
  10. sfr P3M0=0xb2;     //聲明 P3引腳模式寄存器
  11. sfr P5=0xc8;
  12. sfr P1ASF=0x9D;    //聲明 P1口模擬功能寄存器  p1.7開(kāi)啟模擬功能
  13. sfr ADC_RES=0xBD;  //聲明 ADC轉(zhuǎn)換結(jié)果寄存器
  14. sfr ADC_CONTR=0xBC;//聲明 ADC控制寄存器
  15. sbit OUT=P5^5;//定義一個(gè)輸出引腳
  16. unsigned int L; //用于存儲(chǔ)讀出的PWM
  17. unsigned char count;//用于存儲(chǔ)次數(shù)
  18. unsigned char displaytime;
  19. unsigned int data1,data2,data3; //用于存儲(chǔ)PWM的個(gè)位和十位和百位

  20.                                        
  21. sbit DA=P2^4;                        //數(shù)碼管每個(gè)引腳
  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;                        //四個(gè)數(shù)碼管的引腳定義          用于控制哪個(gè)數(shù)碼管亮
  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,填入數(shù)值0001 1011
  36.    P3M0=0xE4;                //需要高電平大電流的引腳 3.7、3.6、3.5、3.2,填入數(shù)值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;  //暫時(shí)關(guān)閉數(shù)碼管 防止閃爍

  48.                 //開(kāi)始  模--數(shù)轉(zhuǎn)換
  49.         P1ASF=0x80;
  50.             ADC_CONTR=0X88+7;
  51.                    delay_n_10us(5);
  52.             a=ADC_RES;
  53.             L=a;//先將讀數(shù)給PWM                 
  54.              //輸出PWM
  55.               if(L>200)         //如果時(shí)間大于2ms,從1ms重新開(kāi)始
  56.              {
  57.                 L=200;
  58.              }
  59.              else if(L<100)         //如果時(shí)間小于2ms,從1ms重新開(kāi)始
  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);        //顯示個(gè)位
  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直接用相應(yīng)的數(shù)字做參數(shù),顯示1到9 加個(gè)點(diǎn) 用1到9乘以10做參數(shù) 0加一個(gè)點(diǎn)用11做參數(shù)
  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加個(gè)點(diǎn)
  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        加個(gè)點(diǎn)
  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        加個(gè)點(diǎn)          
  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        加個(gè)點(diǎn)          
  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        加個(gè)點(diǎn)          
  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        加個(gè)點(diǎn)          
  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        加個(gè)點(diǎn)          
  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        加個(gè)點(diǎn)          
  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        加個(gè)點(diǎn)          
  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        加個(gè)點(diǎn)          
  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) //延時(shí)n個(gè)10us的函數(shù)
  243. {      
  244.      while(n)         
  245.           {  
  246.               Delay10us();   
  247.                   n=n-1;//每循環(huán)一次n減小1  
  248.            }
  249. }
復(fù)制代碼



評(píng)分

參與人數(shù) 1黑幣 +100 收起 理由
admin + 100 共享資料的黑幣獎(jiǎng)勵(lì)!

查看全部評(píng)分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏4 分享淘帖 頂 踩

相關(guān)帖子

回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:603812 發(fā)表于 2021-12-13 10:01 | 只看該作者
高手謝謝分享,老貼子頂起別讓它沉了
回復(fù)

使用道具 舉報(bào)

板凳
ID:895060 發(fā)表于 2022-12-7 21:29 | 只看該作者
我來(lái)了來(lái)了 發(fā)表于 2021-12-13 10:01
高手謝謝分享,老貼子頂起別讓它沉了

不錯(cuò)不錯(cuò),學(xué)習(xí)了
回復(fù)

使用道具 舉報(bào)

地板
ID:1056411 發(fā)表于 2022-12-8 10:31 | 只看該作者
用什么軟件編程的,我是新手
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表