久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

單片機仿真編碼器電機測速程序

[復制鏈接]
跳轉到指定樓層
樓主
利用Proteus8.6,元器件庫編碼器電機結合51單片機,進行速度測量由此可以延伸利用仿真實現PID電機轉速控制(請自行設計)
仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)


單片機源程序如下:
  1. /***********頭文件聲明************/
  2. #include "reg52.h"//此文件中定義了單片機的一些特殊功能寄存器
  3. /***********數據類型聲明***********/
  4. typedef unsigned int u16;//對數據類型進行聲明定義
  5. typedef unsigned char u8;
  6. /***********IO口相關定義***********/
  7. sbit LSA=P2^0;
  8. sbit LSB=P2^1;
  9. sbit MOTOR=P2^2;
  10. /**********變量定義*************/
  11. u16 Pulse;
  12. u16 Speed;
  13. u16 pwm;
  14. /*******************************************************************************
  15. * 函 數 名         : delay
  16. * 函數功能                     : 延時函數,i=1時,大約延時10us
  17. *******************************************************************************/
  18. void delay(u16 i)
  19. {
  20.         while(i--);        
  21. }
  22. /*******************************************************************************
  23. * 函數名       :DigDisplay()
  24. * 函數功能                 :數碼管顯示函數
  25. *******************************************************************************/
  26. void DigDisplay()
  27. {
  28.   u8 disp[2];
  29.   u8 code smgduan[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
  30.         u8 i;
  31.         for(i=0;i<2;i++)
  32.         {
  33.                 switch(i)         //位選,選擇點亮的數碼管,
  34.                 {
  35.                         case(0):
  36.                                 LSA=0;LSB=1; break;//顯示第0位
  37.                         case(1):
  38.                                 LSA=1;LSB=0; break;//顯示第1位
  39.                 }
  40.                 P0=disp[i];//發送數據
  41.                 delay(10); //間隔一段時間掃描        
  42.                 P0=0x00;//消隱
  43.         }
  44.         disp[0]=smgduan[Speed/10];        
  45.         disp[1]=smgduan[Speed%10];        
  46. }
  47. /*******************************************************************************
  48. * 函 數 名         : Int0Init()
  49. * 函數功能                     : 設置外部中斷0
  50. *******************************************************************************/
  51. void Int0Init()
  52. {
  53.         //設置INT0
  54.         IT0=1;//跳變沿出發方式(下降沿)
  55.         EX0=1;//打開INT0的中斷允許。        
  56.         EA=1;//打開總中斷        
  57. }
  58. /*******************************************************************************
  59. * 函 數 名         : Timer0Init
  60. * 函數功能                     : 定時器0初始化
  61. *******************************************************************************/
  62. void Timer0Init()
  63. {
  64.         TMOD|=0X01;//選擇為定時器0模式,工作方式1,僅用TR0打開啟動。
  65.         TH0 = 0xFC;//給定時器賦初值,定時1ms  
  66.   TL0 = 0x18;
  67.         ET0=1;//打開定時器0中斷允許
  68.         EA=1;//打開總中斷
  69.         TR0=1;//打開定時器               
  70. }
  71. /*******************************************************************************
  72. * 函 數 名       : main
  73. * 函數功能                   : 主函數
  74. *******************************************************************************/
  75. void main()
  76. {        
  77.         Int0Init();
  78.         Timer0Init();
  79.         pwm=50;
  80.         while(1);
  81. }
  82. /*外部中斷0的中斷函數*/
  83. void Int0()        interrupt 0               
  84. {
  85.   Pulse++;//脈沖++
  86. }
  87. /*定時器0的中斷函數*/
  88. void Timer0() interrupt 1
  89. {
  90.         static u8 Period,dis,PWM_Period;
  91.         TH0 = 0xFC;//定時1ms  
  92.         TL0 = 0x18;
  93.         Period++;        
  94.         PWM_Period++;        
  95.         dis++;
  96.         /*******轉速計算********/
  97.         if(Period == 100)//1*100ms
  98.         {
  99.                 //計算速度S=(Pulse/360)*10*60 r/min
  100.                 Speed=(Pulse)*1.6;
  101.                 Pulse=0;
  102.                 Period=0;
  103.         }
  104.         /*******PWM 輸出********/
  105.         if(PWM_Period <  pwm) MOTOR=1;
  106.         if(PWM_Period >= pwm) MOTOR=0;
  107.         if(PWM_Period == 100)        PWM_Period=0;
  108.         /*******數碼管顯示********/
  109.         if(dis == 4)
  110.         {
  111.                 DigDisplay();//數碼管顯示函數        
  112.                 dis=0;               
  113.         }
  114. }
復制代碼

所有資料51hei提供下載:
基于51單片機的轉速測量.zip (139.97 KB, 下載次數: 122)




評分

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

查看全部評分

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

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 成年人免费看的视频 | 男女在线免费观看 | 我要看黄色录像一级片 | 一区二区免费看 | 国产日韩精品一区 | 自拍偷拍亚洲欧美 | 精品视频在线观看 | 在线一区视频 | 欧美亚洲国产日韩 | 99久久婷婷国产综合精品电影 | 国产精品不卡 | 黄色成人在线 | 91在线看片 | 亚洲三区在线观看 | 亚洲欧美在线观看 | 亚洲精品一二三区 | 亚洲国产一区二区三区在线观看 | 中文字幕成人av | 日韩精品免费在线观看 | 日本免费黄色一级片 | 岛国av一区二区三区 | 成人自拍视频网站 | 成人啊啊啊 | 国产精品人人做人人爽 | 国产精品99久久久久久久久久久久 | 羞羞视频网站在线观看 | 在线第一页 | 亚洲 欧美 日韩 在线 | 亚洲3级 | 亚洲国产精品一区二区第一页 | 精品国产乱码久久久久久牛牛 | 日韩精品视频在线免费观看 | 久久久久国产 | 免费观看一级毛片 | 日韩不卡一区二区三区 | 欧美黑人国产人伦爽爽爽 | 91精品一区二区三区久久久久久 | 成人午夜在线 | 欧美精品 在线观看 | 国产精品免费av | 免费国产精品久久久久久 |