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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

GY25的單片機源代碼

[復制鏈接]
跳轉到指定樓層
樓主
ID:366164 發表于 2018-7-6 10:57 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
GY25源代碼,簡單實用,具體見附件

單片機源程序如下:
  1. //  GY25-51-1602
  2. //  使用單片機:STC89C52
  3. //  顯示:lcd1602
  4. //  晶振:  11.0592 M(一定是11.0592m的)
  5. //  注意:請參考說明書焊上GY25焊點,或者串口修改GY25波特率9600掉電保存
  6. //  接線
  7. //  GY25    51MCU
  8. //   VCC-------5V
  9. //   GND-------GND
  10. //   TX--------RX(P3.0  PIN10)
  11. //   RX--------TX(P3.1  PIN11)
  12. //   LCD1602引腳請根據下面定義修改
  13. //  功能:GY25跟89c52 串口通信,lcd1602顯示
  14. #include<REG52.H>       
  15. #include<math.h>       //Keil library  
  16. #include<stdio.h>      //Keil library       
  17. #include<INTRINS.H>
  18. #define uchar unsigned char
  19. #define uint  unsigned int       

  20. //   LCD1602引腳請根據下面定義修改
  21. #define DataPort P2           //LCD1602 數據端口       
  22. sbit    LCM_RS=P0^7;   //LCD1602 控制端口               
  23. sbit    LCM_RW=P0^6;   //LCD1602 控制端口       
  24. sbit    LCM_EN=P0^5;   //LCD1602 控制端口
  25.        
  26. //********定義函數*****************************
  27. void    delay(unsigned int k);
  28. void    InitLcd();
  29. void    WriteDataLCM(uchar dataW);
  30. void    WriteCommandLCM(uchar CMD,uchar Attribc);
  31. void    DisplayOneChar(uchar X,uchar Y,uchar DData);
  32. void    SeriPushSend(uchar send_data);
  33. //********定義變量*****************************
  34. uchar   BUF[10];          //數據緩存區
  35. uchar   cnt=0;           //接收數據的累計值
  36. uchar   sign=0;
  37. int YPR[3];
  38. //********定義函數*****************************
  39. void    delay(unsigned int k);
  40. void    SeriPushSend(uchar send_data);
  41. void           display(void);
  42. //*********************************************
  43. //串口中斷
  44. void serial_serve(void) interrupt 4       
  45. {
  46.     if(RI==1){         //中斷標志
  47.     RI=0;
  48.         BUF[cnt]=SBUF;       
  49.         if(cnt==0&&BUF[0]!=0xAA) return;      // 檢查幀頭     
  50.         cnt++;        //接收計數
  51.     if(cnt==8)                //
  52.     {   
  53.        cnt=0;                 //
  54.        sign=1;
  55.     }
  56.   }
  57.        
  58. }
  59. //*********************************************
  60. //串口初始化
  61. //9600 bps @ 11.059 MHz
  62. void init_uart()
  63. {
  64.         TMOD=0x21;                               
  65.         TH1=0xfd;                               
  66.         TL1=0xfd;                               
  67.         SCON=0x50;
  68.         PS=1;      //串口中斷設為高優先級別
  69.         TR0=1;           //啟動定時器                       
  70.         TR1=1;
  71.         ET0=1;     //打開定時器0中斷                       
  72.         ES=1;       
  73. }

  74. //**********延時函數***************
  75. void delay(unsigned int k)       
  76. {                                               
  77.         unsigned int i,j;                               
  78.         for(i=0;i<k;i++)
  79.         {                       
  80.         for(j=0;j<121;j++)                       
  81.         {;}
  82.         }                                               
  83. }                                                           
  84. //*********串口數據發送******************
  85. void  SeriPushSend(uchar send_data)
  86. {
  87.     SBUF=send_data;  
  88.         while(!TI);TI=0;          
  89. }

  90. //*********LCD1602初始化**********************
  91. void InitLcd()                               
  92. {                       
  93.         WriteCommandLCM(0x38,1);       
  94.         WriteCommandLCM(0x08,1);       
  95.         WriteCommandLCM(0x01,1);
  96.         WriteCommandLCM(0x06,1);       
  97.         WriteCommandLCM(0x0c,1);
  98. }
  99. //**********檢測忙信號************************
  100. void WaitForEnable(void)       
  101. {                                       
  102.         DataPort=0xff;               
  103.         LCM_RS=0;LCM_RW=1;_nop_();
  104.         LCM_EN=1;_nop_();_nop_();
  105.         while(DataPort&0x80);       
  106.         LCM_EN=0;                               
  107. }                                       
  108. //**********寫命令至LCD***********************
  109. void WriteCommandLCM(uchar CMD,uchar Attribc)
  110. {                                       
  111.         if(Attribc)WaitForEnable();       
  112.         LCM_RS=0;LCM_RW=0;_nop_();
  113.         DataPort=CMD;_nop_();       
  114.         LCM_EN=1;_nop_();_nop_();LCM_EN=0;
  115. }                                       
  116. //**********寫數據至LCD************************
  117. void WriteDataLCM(uchar dataW)
  118. {                                       
  119.         WaitForEnable();               
  120.         LCM_RS=1;LCM_RW=0;_nop_();
  121.         DataPort=dataW;_nop_();       
  122.         LCM_EN=1;_nop_();_nop_();LCM_EN=0;
  123. }                                       
  124. //*********寫一個字符數據到指定的目標***********
  125. void DisplayOneChar(uchar X,uchar Y,uchar DData)
  126. {                                               
  127.         Y&=1;                                               
  128.         X&=15;                                               
  129.         if(Y)X|=0x40;                                       
  130.         X|=0x80;                       
  131.         WriteCommandLCM(X,0);               
  132.         WriteDataLCM(DData);               
  133. }
  134.                                                            
  135. //******************************************************
  136. //*************************************
  137. void dis_play(uchar A,uchar B,int num)       
  138. {
  139.         if(num<0)
  140.         {
  141.                 num=-num;
  142.                 DisplayOneChar(A,B,('-'));
  143.         }
  144.         else
  145.             DisplayOneChar(A,B,('+'));

  146.     DisplayOneChar(++A,B,(0x30|(num/10000)));       
  147.         DisplayOneChar(++A,B,(0x30|(num%10000/1000)));
  148.         DisplayOneChar(++A,B,(0x30|(num%1000/100)));
  149.         DisplayOneChar(++A,B,(0x2e));
  150.         DisplayOneChar(++A,B,(0x30|(num%100/10)));
  151. //        DisplayOneChar(++A,B,(0x30|(num%10)));   //小數點后2位
  152. }

  153. //*******************數據接收并顯示**********************
  154. void display(void)
  155. {
  156.   int YPR[3];
  157.   if(sign){
  158.        sign=0;                
  159.             if(BUF[0]==0XAA&&BUF[7]==0X55){                         //幀頭判斷   
  160.                                  
  161.           YPR[0]=(BUF[5]<<8|BUF[6]);  
  162.           YPR[1]=(BUF[3]<<8|BUF[4]);
  163.           YPR[2]=(BUF[1]<<8|BUF[2]);
  164.                        
  165.                      dis_play(2,1,YPR[0]);
  166.                      dis_play(10,1,YPR[1]);               
  167.                      dis_play(2,0,YPR[2]);                                   
  168.         }
  169.    }  
  170. }
  171. //*******************數據接收并顯示**********************

  172. //***************************************
  173. //主程序
  174. void main()
  175. {
  176.    EA=0;  
  177.    delay(200);                                                      //延時               
  178.    InitLcd();                                                 //初始化LCD
  179.    init_uart();                                               //初始化串口
  180.    EA=1;                                                      //開總中斷
  181.    cnt=0;   
  182.    DisplayOneChar(0,0,('Y'));
  183.    DisplayOneChar(1,0,(':'));
  184.    DisplayOneChar(0,1,('P'));
  185.    DisplayOneChar(1,1,(':'));
  186.    DisplayOneChar(8,1,('R'));
  187.    DisplayOneChar(9,1,(':'));

  188.    SeriPushSend(0XA5);
  189.    SeriPushSend(0X52); //發送歐拉角(默認50HZ)1幀讀取命令。                                
  190.   
  191.   while(1){                                                   //循環  
  192.                                       
  193.    display();                                   
  194.    }                                                          //end while
  195. }
復制代碼

所有資料51hei提供下載:
GY25.zip (38.14 KB, 下載次數: 33)


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

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 亚洲成人99 | 久久久久久久久久久久久九 | 成人激情视频免费在线观看 | 亚洲人人 | 国产免费自拍 | 国产精品91网站 | 免费视频二区 | 久久国产精品一区二区 | 99这里只有精品视频 | 日本视频在线播放 | 久久国产精品无码网站 | 中文字幕av一区二区三区 | 久草在线 | 欧洲av在线| 99精品视频网 | 婷婷毛片 | 午夜av电影院 | 久久亚洲一区二区三区四区 | 国产精品日韩一区二区 | 成人不卡 | 欧美 日韩 国产 在线 | 久久亚洲国产精品日日av夜夜 | 亚洲1区 | 99久久久国产精品免费消防器 | 欧美日韩国产一区二区三区 | 中文字幕成人在线 | 色免费在线视频 | 一区在线观看视频 | 五月婷婷激情网 | 在线国产中文字幕 | 免费a国产 | 久久国产精品首页 | 91欧美精品 | 一区二区三区高清 | 中文字幕人成乱码在线观看 | 欧美日韩成人在线 | 精品久久九九 | 蜜桃av人人夜夜澡人人爽 | 国产精品1区| 日韩在线免费视频 | 国产精品中文字幕在线观看 |