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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

MMA7361角度傳感器STC源程序 LCD1602顯示

[復制鏈接]
跳轉到指定樓層
樓主
ID:777263 發表于 2020-7-7 15:08 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
51內核 STC 單片機角度傳感器源程序,有需要的朋友拿走

單片機源程序如下:
  1. /************* MMA7361 *************
  2. ************** 三軸電壓采集 三軸電壓采集點 分別為P0.0 P0.1 P0.2 如遇到問題請先仔細看資料  *************
  3. //////////////////////// /***********************************************************************
  4. /*             LCD1602
  5. LCD1602顯示  rs P3^5  rw P3^6  ep P3^7  P0口 為數據輸出口

  6. ***********************************************************************///////////////////////
  7. //************** STC12 ADC電壓采集測試程序 *************/


  8. #include "stc8.h"
  9. #include "intrins.h"

  10. #define uchar unsigned char  
  11. #define uint unsigned int

  12. uchar Vo,Vx,Vy; //A/D轉換后換算的電壓值
  13. int v=0,g;
  14. int i,e,h;




  15. sbit rw=P3^6;    //1602 IO口定義  這里用的數據口是P2口
  16. sbit rs=P3^5;
  17. sbit ep=P3^7;

  18. uchar code asc[] = "0123456789";  

  19. unsigned char code d[] = {"MMA7361  X: .  V"};

  20. unsigned char code b[]=  {"Y: .  V  Z: .  V"};




  21. /**************************** 延時函數 ***********************************/
  22. void delay(unsigned int a)
  23. {
  24. while(a--);
  25. }










  26. /*----------------------------
  27. Get ADC result
  28. ----------------------------*/
  29. uchar GetADCResult(uchar ch)
  30. {   
  31.   
  32.     ADC_CONTR = ADC_POWER | ADC_START | ch  ;//0x00|0x00|ch|0x08:選擇A/D輸入通道,開始A/D轉換
  33.                                                          // 這么用語句的主要原因就是不能位尋址
  34.                                                          //   通道選擇在后3位所以直接用一個整數表示ch
  35.                                                          //例如ch=6 那么對應的后三位就是110           
  36.     _nop_();         //Must wait before inquiry ,
  37.     _nop_(); //設置ADC_CONTR寄存器后需加4個CPU時鐘周期的延時,才能保證值被寫入ADC_CONTR寄存器
  38.     _nop_();
  39.     _nop_();
  40.     _nop_();
  41.     _nop_();
  42.     _nop_();
  43.     _nop_();
  44.     while (!(ADC_CONTR & ADC_FLAG));//Wait complete flag
  45.    ADC_CONTR &= ~ADC_FLAG;         //Close ADC 將標志位清零等待下次硬件置1
  46.    //也可以寫成 ADC_CONTR= ADC_CONTR & ( ~ADC_FLAG)

  47.    Vo=ADC_RES*4.7*100/256;                 //Return ADC result(為顯示整數,這里將電壓值擴大了十倍)
  48.    return Vo;
  49.   // return ADC_RES;
  50. }

  51. /*************************************************************************************/

  52. /*************************************************************************************/

  53. /*****************************     1602    *******************************************/
  54. bit lcd_busy()               //查忙 這部很重要 否則有的顯示容易出現亂碼                                             
  55. {                                                                          
  56.     bit result;                                                            
  57.     rs = 0;                                                            
  58.     rw = 1;                                                            
  59.     ep = 1;                                                            
  60.     delay(50);                                                            
  61.      result = (bit)(P0&0x80);                                             
  62.     ep = 0;                                                            
  63.     return result;             //返回值                                            
  64. }  







  65. void lcd_com(unsigned char com)//  地址
  66. {
  67. while(lcd_busy());
  68. rs=0;
  69. ep=0;
  70. rw=0;
  71. P0=com;
  72. delay(50);
  73. ep=1;
  74. delay(50);
  75. ep=0;
  76. }


  77. void lcd_date(unsigned char date)//采集輸出數據
  78. {
  79. while(lcd_busy());
  80. rs=1;   //1是些數據 0是寫指令
  81. rw=0;    // 1是讀  0是寫
  82. ep=0;    //E端為使能端,當E端由高電平跳變成低電平時,液晶模塊執行命令      
  83. P0=date;
  84. delay(5);
  85. ep=1;
  86. delay(5);
  87. ep=0;
  88. }



  89. void lcd_pos(unsigned char pos)                                                   
  90. {                                                                          
  91.    lcd_com(pos|0x80);      //數據指針=80+地址變量                     
  92. }     








  93. void init()//1602初始化
  94. {
  95.                                                                
  96. lcd_com(0x38);
  97. delay(50);                                                              
  98. lcd_com(0x38);
  99. delay(50);

  100. lcd_com(0x38);
  101. delay(50);
  102. lcd_com(0x0c);
  103. delay(50);
  104. lcd_com(0x06);
  105. delay(50);
  106. lcd_com(0x01);




  107. }



  108. /************************************************************************/






  109. void main(void)
  110. {  
  111. //三個采集通道  P10 P11 P12配置為高阻狀態
  112. P1M0=0X00;
  113. P1M1=0X03;


  114. TMOD=0x01;             //選擇定時器T0 在工作方式1上 即16位定時器
  115. TH0=(65536-50000)/256;  //11.592M晶振的一個機器周期接近1us 這里5W就是0.05s
  116. TL0=(65536-50000)%256;
  117. EA=1;                   //開啟總中斷
  118. ET0=1;                  //開啟定時器T0
  119. TR0=1;                 // 啟動定時器 使其開始計算




  120.    init();                //1602初始化


  121. lcd_pos(0x00);            //顯示字母
  122. i=0;
  123. while(d[i]!='\0')         
  124. {
  125. lcd_date(d[i]);
  126. i++;
  127. }


  128. lcd_pos(0x40);
  129. i=0;
  130. while(b[i]!='\0')
  131. {
  132. lcd_date(b[i]);
  133. i++;
  134. }




  135. while(1)
  136. {


  137. if(v==1)
  138. {

  139. lcd_pos(0x0B);
  140. lcd_date(asc[Vo/100]);
  141. lcd_pos(0x0D);
  142. lcd_date(asc[Vo%100/10]);
  143. lcd_date(asc[Vo%100%10]);
  144. delay(1000);
  145. }




  146. if(v==2)
  147. {

  148. lcd_pos(0x42);
  149. lcd_date(asc[Vo/100]);
  150. lcd_pos(0x44);
  151. lcd_date(asc[Vo%100/10]);
  152. lcd_date(asc[Vo%100%10]);
  153. delay(1000);
  154. }

  155. if(v==3)
  156. {

  157. lcd_pos(0x4b);
  158. lcd_date(asc[Vo/100]);
  159. lcd_pos(0x4d);
  160. lcd_date(asc[Vo%100/10]);
  161. lcd_date(asc[Vo%100%10]);
  162. delay(1000);
  163. }

  164. }


  165. }







  166. void ADCt0() interrupt 1 using 0
  167. {
  168. TH0 = (65536-50000)/256;
  169. TL0 = (65536-50000)%256;
  170. e++;
  171. if(e==6)
  172. ……………………

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

所有程序51hei提供下載:
MMA7361角度傳感器.rar (49.7 KB, 下載次數: 38)


評分

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

查看全部評分

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

使用道具 舉報

沙發
ID:897819 發表于 2021-3-28 23:32 來自觸屏版 | 只看該作者
有沒有proteus的原理圖啊?
回復

使用道具 舉報

板凳
ID:385637 發表于 2021-3-29 11:26 | 只看該作者
以前沒接觸過角度傳感器,好資料
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 在线小视频 | 国产精品久久久久av | 超碰地址 | 国产精品免费看 | 亚洲精品久久久久久宅男 | 成人免费在线播放视频 | 91pron在线 | 久久蜜桃精品 | 日日摸日日碰夜夜爽亚洲精品蜜乳 | 青青草av在线播放 | 国产高清一区二区 | 亚洲国产aⅴ精品 | 99r在线 | 91精品在线观看入口 | 成人免费黄色片 | www.国产| 国产一级特黄视频 | 久草网视频| 日韩欧美一级 | 亚洲成人福利在线观看 | 精品三级在线观看 | 色免费视频 | 日韩精品在线看 | 国产精品女人久久久 | 国产黄色一级电影 | www.亚洲精品 | 一级毛片色一级 | 日韩激情在线 | 亚洲综合热| 午夜日韩| 精品久久久久久亚洲精品 | 国产玖玖 | 久久久精品久 | 成年网站在线观看 | 国产乱一区二区三区视频 | 久久专区 | 精品美女 | 国产精品福利一区二区三区 | 四虎影视免费观看 | jvid精品资源在线观看 | caoporn地址 |