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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2767|回復(fù): 0
收起左側(cè)

GY25的單片機(jī)源代碼

[復(fù)制鏈接]
ID:366164 發(fā)表于 2018-7-6 10:57 | 顯示全部樓層 |閱讀模式
GY25源代碼,簡單實(shí)用,具體見附件

單片機(jī)源程序如下:
  1. //  GY25-51-1602
  2. //  使用單片機(jī):STC89C52
  3. //  顯示:lcd1602
  4. //  晶振:  11.0592 M(一定是11.0592m的)
  5. //  注意:請參考說明書焊上GY25焊點(diǎn),或者串口修改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引腳請根據(jù)下面定義修改
  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引腳請根據(jù)下面定義修改
  21. #define DataPort P2           //LCD1602 數(shù)據(jù)端口       
  22. sbit    LCM_RS=P0^7;   //LCD1602 控制端口               
  23. sbit    LCM_RW=P0^6;   //LCD1602 控制端口       
  24. sbit    LCM_EN=P0^5;   //LCD1602 控制端口
  25.        
  26. //********定義函數(shù)*****************************
  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];          //數(shù)據(jù)緩存區(qū)
  35. uchar   cnt=0;           //接收數(shù)據(jù)的累計(jì)值
  36. uchar   sign=0;
  37. int YPR[3];
  38. //********定義函數(shù)*****************************
  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){         //中斷標(biāo)志
  47.     RI=0;
  48.         BUF[cnt]=SBUF;       
  49.         if(cnt==0&&BUF[0]!=0xAA) return;      // 檢查幀頭     
  50.         cnt++;        //接收計(jì)數(shù)
  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;      //串口中斷設(shè)為高優(yōu)先級(jí)別
  69.         TR0=1;           //啟動(dòng)定時(shí)器                       
  70.         TR1=1;
  71.         ET0=1;     //打開定時(shí)器0中斷                       
  72.         ES=1;       
  73. }

  74. //**********延時(shí)函數(shù)***************
  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. //*********串口數(shù)據(jù)發(fā)送******************
  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. //**********檢測忙信號(hào)************************
  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. //**********寫數(shù)據(jù)至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. //*********寫一個(gè)字符數(shù)據(jù)到指定的目標(biāo)***********
  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)));   //小數(shù)點(diǎn)后2位
  152. }

  153. //*******************數(shù)據(jù)接收并顯示**********************
  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. //*******************數(shù)據(jù)接收并顯示**********************

  172. //***************************************
  173. //主程序
  174. void main()
  175. {
  176.    EA=0;  
  177.    delay(200);                                                      //延時(shí)               
  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); //發(fā)送歐拉角(默認(rèn)50HZ)1幀讀取命令。                                
  190.   
  191.   while(1){                                                   //循環(huán)  
  192.                                       
  193.    display();                                   
  194.    }                                                          //end while
  195. }
復(fù)制代碼

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


回復(fù)

使用道具 舉報(bào)

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

本版積分規(guī)則

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

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 日韩在线欧美 | 美美女高清毛片视频免费观看 | 91亚洲精选 | 黄色大片免费网站 | 午夜视频一区二区三区 | 国产精品不卡一区 | av夜夜操 | 国产精品毛片一区二区三区 | 成年人免费在线视频 | 91精品国产91久久久久游泳池 | 欧美一级片黄色 | 久久久久久久久久爱 | 免费黄色的视频 | 久久久九九 | 日韩精品一区二区三区中文字幕 | 亚洲最大的成人网 | 蜜桃视频在线观看免费视频网站www | 欧美aaa级| 欧美五月婷婷 | 91九色在线观看 | 欧美成人精品一区二区男人看 | 欧美高清视频 | 四虎影院免费在线 | 91视频进入 | 色欧美综合 | 国产成人免费网站 | 毛片一区二区三区 | 四虎影视1304t | 亚洲高清免费视频 | 亚洲精品字幕 | 水蜜桃久久夜色精品一区 | 中文字幕一区二区三区日韩精品 | av免费网站在线观看 | 天天插天天操 | 久久综合影院 | 国产精品久久久久久久久久妇女 | 国产精品视频不卡 | www.9191.com| 国产午夜精品理论片a大结局 | 91亚洲国产亚洲国产 | 亚洲一区综合 |