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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

單片機電機轉速表設計+仿真+C程序

  [復制鏈接]
跳轉到指定樓層
樓主
366-電機轉速表設計仿真原理圖+C程序

單片機源程序如下:
  1. //實例100:電機轉速表設計
  2. #include<reg51.h>    //包含單片機寄存器的頭文件
  3. #include<intrins.h>  //包含_nop_()函數定義的頭文件
  4. sbit RS=P2^0;    //寄存器選擇位,將RS位定義為P2.0引腳
  5. sbit RW=P2^1;    //讀寫選擇位,將RW位定義為P2.1引腳
  6. sbit E=P2^2;     //使能信號位,將E位定義為P2.2引腳
  7. sbit BF=P0^7;    //忙碌標志位,,將BF位定義為P0.7引腳
  8. unsigned char code digit[ ]={"0123456789"}; //定義字符數組顯示數字
  9. unsigned int v;   //儲存電機轉速
  10. unsigned char count;  //儲存定時器T0中斷次數
  11. bit flag;      //計滿1秒鐘標志位
  12. /*****************************************************
  13. 函數功能:延時1ms
  14. (3j+2)*i=(3×33+2)×10=1010(微秒),可以認為是1毫秒
  15. ***************************************************/
  16. void delay1ms()
  17. {
  18.    unsigned char i,j;       
  19.          for(i=0;i<10;i++)
  20.           for(j=0;j<33;j++)
  21.            ;                 
  22. }
  23. /*****************************************************
  24. 函數功能:延時若干毫秒
  25. 入口參數:n
  26. ***************************************************/
  27. void delay(unsigned char n)
  28. {
  29.    unsigned char i;
  30.         for(i=0;i<n;i++)
  31.            delay1ms();
  32. }

  33. /*****************************************************
  34. 函數功能:判斷液晶模塊的忙碌狀態
  35. 返回值:result。result=1,忙碌;result=0,不忙
  36. ***************************************************/
  37. unsigned char BusyTest(void)
  38.   {
  39.     bit result;
  40.         RS=0;       //根據規定,RS為低電平,RW為高電平時,可以讀狀態
  41.     RW=1;
  42.     E=1;        //E=1,才允許讀寫
  43.     _nop_();   //空操作
  44.     _nop_();
  45.     _nop_();
  46.     _nop_();   //空操作四個機器周期,給硬件反應時間       
  47.     result=BF;  //將忙碌標志電平賦給result
  48.    E=0;         //將E恢復低電平
  49.    return result;
  50.   }
  51. /*****************************************************
  52. 函數功能:將模式設置指令或顯示地址寫入液晶模塊
  53. 入口參數:dictate
  54. ***************************************************/
  55. void WriteInstruction (unsigned char dictate)
  56. {   
  57.     while(BusyTest()==1); //如果忙就等待
  58.          RS=0;                  //根據規定,RS和R/W同時為低電平時,可以寫入指令
  59.          RW=0;   
  60.          E=0;                   //E置低電平(根據表8-6,寫指令時,E為高脈沖,
  61.                           // 就是讓E從0到1發生正跳變,所以應先置"0"
  62.          _nop_();
  63.          _nop_();             //空操作兩個機器周期,給硬件反應時間
  64.          P0=dictate;            //將數據送入P0口,即寫入指令或地址
  65.          _nop_();
  66.          _nop_();
  67.          _nop_();
  68.          _nop_();               //空操作四個機器周期,給硬件反應時間
  69.          E=1;                   //E置高電平
  70.          _nop_();
  71.          _nop_();
  72.          _nop_();
  73.          _nop_();               //空操作四個機器周期,給硬件反應時間
  74.           E=0;                  //當E由高電平跳變成低電平時,液晶模塊開始執行命令
  75. }
  76. /*****************************************************
  77. 函數功能:指定字符顯示的實際地址
  78. 入口參數:x
  79. ***************************************************/
  80. void WriteAddress(unsigned char x)
  81. {
  82.      WriteInstruction(x|0x80); //顯示位置的確定方法規定為"80H+地址碼x"
  83. }
  84. /*****************************************************
  85. 函數功能:將數據(字符的標準ASCII碼)寫入液晶模塊
  86. 入口參數:y(為字符常量)
  87. ***************************************************/
  88. void WriteData(unsigned char y)
  89. {
  90.     while(BusyTest()==1);  
  91.           RS=1;           //RS為高電平,RW為低電平時,可以寫入數據
  92.           RW=0;
  93.           E=0;            //E置低電平(根據表8-6,寫指令時,E為高脈沖,
  94.                        // 就是讓E從0到1發生正跳變,所以應先置"0"
  95.           P0=y;           //將數據送入P0口,即將數據寫入液晶模塊
  96.           _nop_();
  97.           _nop_();
  98.           _nop_();
  99.      _nop_();       //空操作四個機器周期,給硬件反應時間
  100.           E=1;          //E置高電平
  101.           _nop_();
  102.           _nop_();
  103.           _nop_();
  104.          _nop_();        //空操作四個機器周期,給硬件反應時間
  105.          E=0;            //當E由高電平跳變成低電平時,液晶模塊開始執行命令
  106. }
  107. /*****************************************************
  108. 函數功能:對LCD的顯示模式進行初始化設置
  109. ***************************************************/
  110. void LcdInitiate(void)
  111. {
  112.    delay(15);             //延時15ms,首次寫指令時應給LCD一段較長的反應時間
  113.    WriteInstruction(0x38);  //顯示模式設置:16×2顯示,5×7點陣,8位數據接口
  114.         delay(5);               //延時5ms ,給硬件一點反應時間
  115.    WriteInstruction(0x38);
  116.         delay(5);
  117.         WriteInstruction(0x38); //連續三次,確保初始化成功
  118.         delay(5);
  119.         WriteInstruction(0x0c);  //顯示模式設置:顯示開,無光標,光標不閃爍
  120.         delay(5);
  121.         WriteInstruction(0x06);  //顯示模式設置:光標右移,字符不移
  122.         delay(5);
  123.         WriteInstruction(0x01);  //清屏幕指令,將以前的顯示內容清除
  124.         delay(5);

  125. }
  126. /******************************************************************************
  127. 函數功能:顯示速度提示符                       
  128. ******************************************************************************/
  129. void display_sym(void)
  130. {
  131.    WriteAddress(0x00);  //寫顯示地址,將在第1行第1列開始顯示
  132.         WriteData('v');      //將字符常量v寫入LCD
  133.         WriteData('=');      //將字符常量=寫入LCD

  134. }
  135. /******************************************************************************
  136. 函數功能:顯示速度數值                        
  137. ******************************************************************************/
  138. void display_val(unsigned int x)
  139. {
  140. unsigned char i,j,k,l;     //j,k,l分別儲存溫度的百位、十位和個位
  141.         i=x/1000;         //取千位
  142.         j=(x%1000)/100;   //取百位
  143.    k=(x%100)/10;     //取十位
  144.    l=x%10;           //取個位
  145.         WriteAddress(0x02);     //寫顯示地址,將在第1行第3列開始顯示
  146.         WriteData(digit[i]);    //將千位數字的字符常量寫入LCD
  147.         WriteData(digit[j]);    //將百位數字的字符常量寫入LCD
  148.         WriteData(digit[k]);    //將十位數字的字符常量寫入LCD
  149.         WriteData(digit[l]);    //將個位數字的字符常量寫入LCD
  150.          
  151. }
  152. /*******************************************************
  153. 函數功能:顯示速度單位“r/min”
  154. ********************************************************/
  155. void display_unit(void)
  156. {
  157.    WriteAddress(0x06);    //寫顯示地址,將在第2行第7列開始顯示
  158.         WriteData('r');    //將字符常量r寫入LCD
  159.         WriteData('/');    //將字符常量/寫入LCD
  160.         WriteData('m');    //將字符常量m寫入LCD
  161.         WriteData('i');    //將字符常量i寫入LCD
  162.         WriteData('n');    //將字符常量n寫入LCD
  163. }
  164. /*******************************************************
  165. 函數功能:主函數
  166. ********************************************************/
  167. void main(void)
  168. {
  169.    LcdInitiate();            //調用LCD初始化函數       
  170.    TMOD=0x51;                //定時器T1工作于計數模式1,定時器T0工作于計時模式1;
  171.         TH0=(65536-46083)/256;    //定時器T0的高8位設置初值,每50ms產生一次中斷
  172.         TL0=(65536-46083)%256;    //定時器T0的低8位設置初值,每50ms產生一次中斷
  173.         EA=1;                     //開總中斷
  174.         ET0=1;                    //定時器T0中斷允許
  175.         TR0=1;                    //啟動定時器T0
  176.         count=0;                  //將T0中斷次數初始化為0
  177.         display_sym();            //顯示速度提示符
  178.   display_val(0000);         //顯示器工作正常標志
  179.   display_unit();            //顯示速度單位
  180.          while(1)                 //無限循環
  181.           {
  182.              TR1=1;            //定時器T1啟動
  183.                   TH1=0;            //定時器T1高8位賦初值0
  184.                   TL1=0;            //定時器T1低8位賦初值0
  185.                   flag=0;           //時間還未滿1分鐘
  186. ……………………

  187. …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼

所有資料51hei提供下載:
366-電機轉速表設計 仿真 C程序.zip (61.32 KB, 下載次數: 189)


評分

參與人數 1黑幣 +6 收起 理由
Jeff_BlindCat + 6 備注明確,電路連接簡單明了,授精。

查看全部評分

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

使用道具 舉報

來自 2#
ID:495287 發表于 2020-7-7 00:27 | 只看該作者
電路明確上手通,
代碼工整好性情,
備注清晰不迷路,
瘋狂調試共執行。
回復

使用道具 舉報

板凳
ID:9474 發表于 2017-7-23 07:05 來自手機 | 只看該作者
好貼,非常好。
回復

使用道具 舉報

地板
ID:157975 發表于 2017-8-8 16:06 | 只看該作者
U2是個神馬鬼?
回復

使用道具 舉報

5#
ID:226129 發表于 2017-8-9 14:55 | 只看該作者
感覺挺好的。
回復

使用道具 舉報

6#
ID:44165 發表于 2018-3-5 15:34 | 只看該作者

好貼,非常好。
回復

使用道具 舉報

7#
ID:330988 發表于 2018-5-16 14:04 | 只看該作者
電路圖有嗎  給看一下唄
回復

使用道具 舉報

8#
ID:465022 發表于 2019-1-9 02:31 | 只看該作者

電路圖有嗎  給看一下唄
回復

使用道具 舉報

9#
ID:524699 發表于 2019-4-29 19:49 | 只看該作者
同求電路圖,有人能發一下嗎
回復

使用道具 舉報

10#
ID:739012 發表于 2020-7-6 22:22 | 只看該作者
樓主左邊的單片機是用做給脈沖的嗎?請問有沒有程序原件!
回復

使用道具 舉報

11#
ID:456595 發表于 2021-11-16 16:32 | 只看該作者
非常實用,下載了,謝謝樓主分享~
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 精品网| 精品av | 欧美一区二区三区,视频 | 天天曰夜夜 | www.黄色网| 中文字幕综合 | 日韩视频国产 | 国产精品久久久久久久久久妇女 | 午夜免费视频 | 国产精品 亚洲一区 | 欧美综合在线观看 | 久久亚洲国产精品 | 欧美一区二区三区 | 欧美一区成人 | 99爱视频 | 日韩一区二区三区视频在线播放 | 国产精品一区二区三区四区 | 日韩www | 成人欧美一区二区三区视频xxx | 精品国产18久久久久久二百 | 国产激情一区二区三区 | 一区二区三区四区在线 | 日韩高清一区二区 | 日韩中文字幕视频在线观看 | 免费能直接在线观看黄的视频 | 天天操天天摸天天爽 | 91精品在线播放 | 亚洲瑟瑟| 97久久精品午夜一区二区 | 中文字幕乱码一区二区三区 | 国产精品mv在线观看 | 欧美日韩亚洲国产 | 精品国产青草久久久久福利 | 成人av鲁丝片一区二区小说 | 成人免费一区二区三区视频网站 | 国产成人精品一区二区 | 爱爱免费视频网站 | 免费视频一区二区 | 在线播放国产一区二区三区 | 久久伦理电影 | 中文字幕国产 |