欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3457|回復: 1
打印 上一主題 下一主題
收起左側

單片機編碼電機測速程序-PROTEUS仿真+KEIL5工程

[復制鏈接]
跳轉到指定樓層
樓主


單片機源程序如下:
  1. #include "reg52.h"//此文件中定義了單片機的一些特殊功能寄存器
  2. #include <intrins.h>


  3. /***********數據類型聲明***********/
  4. typedef unsigned int u16;//對數據類型進行聲明定義
  5. typedef unsigned char u8;


  6. /***********IO口相關定義***********/
  7. sbit RS = P2^7;
  8. sbit RW = P2^6;
  9. sbit E = P2^5;
  10. sbit CH_B = P3^3;


  11. sbit PWM = P2^0;


  12. /**********變量定義*************/
  13. u8 flag = 1; //正反轉標志位
  14. u8 count = 0; //定時器溢出次數計數  
  15. unsigned char  count1 = 0; //定時器溢出次數計數    0~255
  16. u16 Pulse_A = 0; //脈沖數計數
  17. float Speed_A = 0;//轉數 r/min


  18. void Timer0Init();//定時器0初始化
  19. void Timer1Init();//定時器1初始化
  20. void Int0Init();  //外部中斷0初始化
  21. void lcd_int();                                   //LCD初始化函數
  22. void lcd_w_cmd(unsigned char com);        //寫命令字函數
  23. void lcd_w_dat(unsigned char dat);        //寫數據函數
  24. unsigned char lcd_r_start();               //讀狀態函數
  25. void Delayus(unsigned int t); //延時函數
  26.            
  27. /*******************主函數*****************************************************/
  28. void main()
  29. {         
  30.           u8 i = '0';
  31.           u16 pulse_a = 0;
  32.           u8  arr[5]={0};
  33.     lcd_int();        //LCD初始化
  34.                 Timer0Init(); //定時器0初始化
  35.                 Timer1Init();//定時器1初始化
  36.     Int0Init(); //外部中斷0初始化
  37.         
  38.                 while(1)
  39.                 {   
  40.                                          lcd_w_cmd(0x80 + 0x00); //設置LCD顯示位置,第1行
  41.                                          if( flag == 0) //正反轉判斷
  42.                                          {                                                                                 
  43.                                                                  lcd_w_dat('Z');        //正轉        
  44.                                          }
  45.                                          else
  46.                                          {
  47.                                                                  lcd_w_dat('F');        //反轉
  48.                                          }


  49.                         
  50.                                          if( count >= 20) //20*50ms = 1s 計算轉速
  51.                                          {
  52.                                                    count = 0; //清0
  53.                pulse_a = Pulse_A;  
  54.                                                    Pulse_A = 0; //清0
  55.                Speed_A = pulse_a * 60.0 / 24 ;         //計算轉數 r/min        
  56.                         
  57.                                                    arr[0] = (u8)Speed_A/100 + '0'; //百位
  58.                                                          arr[1] = (u8)Speed_A/10%10 + '0';//十位
  59.                                                          arr[2] = (u8)Speed_A%10 + '0'; //個位
  60.                                                          arr[3] = '.'; //小數點
  61.                                                          arr[4] = (u8)(Speed_A*10)%10 + '0'; //十分位
  62.                                                 
  63.                                                    lcd_w_cmd(0x80+0x40);  //第二行顯示位置
  64.                                                          
  65.                                                    for(i=0;i<5;i++)
  66.                                                    {
  67.                                                                   lcd_w_dat(arr[i]); //打印轉數[/i][i]
  68.                                                          }
  69.            }
  70.                                          
  71.                                          
  72.                                          if( count1 >= 100 )   //周期100*1ms = 100ms
  73.                                          {
  74.                                                  count1 = 0        ;                                         
  75.                                          }
  76.                                          
  77.                                          if( count1 <= 80 )   //占空比  
  78.                                          {
  79.                                                         PWM = 1;                           //高電平 40ms
  80.                                          }
  81.                                          else
  82.                                          {
  83.                                                   PWM = 0 ;                           //低電平 100-50 = 50ms
  84.                                          }


  85.                 }
  86. }




  87. /*********外部中斷0初始化**********************************/
  88. void Int0Init()  //設置INT0
  89. {
  90.     IT0=1;//跳變沿出發方式(下降沿)
  91.     EX0=1;//INT0的中斷允許     
  92.     EA=1;//打開總中斷        
  93. }


  94. /*外部中斷0的中斷函數*/
  95. void Int0()   interrupt 0               
  96. {
  97.    Pulse_A++; //脈沖數++
  98.          if(CH_B == 1)
  99.          {
  100.                   flag = 0;//正轉
  101.          }
  102.          else
  103.    {
  104.                   flag = 1;//反轉
  105.          }
  106. }
復制代碼

全部資料51hei下載地址:
編碼電機測速.rar (70.66 KB, 下載次數: 117)

評分

參與人數 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

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

使用道具 舉報

沙發
ID:547658 發表于 2020-10-2 19:22 | 只看該作者
LCD顯示字母‘z’表示電機正轉
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表