欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136
標(biāo)題:
GY-26電子指南針資料(串口+IIC+溫度源程序)
[打印本頁(yè)]
作者:
第二只芐基
時(shí)間:
2017-10-15 19:22
標(biāo)題:
GY-26電子指南針資料(串口+IIC+溫度源程序)
如題 我只想下個(gè)別的資料但是積分不夠,程序有51單片機(jī)版本的和pic單片機(jī)的
0.png
(11.74 KB, 下載次數(shù): 55)
下載附件
2017-10-16 00:03 上傳
所有資料51hei提供下載:
GY-26電子指南針模塊電子羅盤模塊+機(jī)器人配件送資料.rar
(628.2 KB, 下載次數(shù): 50)
2017-10-15 19:22 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
單片機(jī)源程序如下:
// GY-26電子指南針模塊測(cè)試程序
// 使用單片機(jī):STC89C52
// 晶振: 11.0592 M
// 液晶屏:LCD1602
#include<REG52.H>
#include<math.h> //Keil library
#include<stdio.h> //Keil library
#include<INTRINS.H>
#define uchar unsigned char
#define uint unsigned int
#define DataPort P0 //LCD1602 數(shù)據(jù)端口
sbit LCM_RS=P2^0; //LCD1602 控制端口
sbit LCM_RW=P2^1; //LCD1602 控制端口
sbit LCM_EN=P2^2; //LCD1602 控制端口
sbit KEY_1 =P2^6;
sbit KEY_2 =P2^5;
sbit KEY_3 =P2^4;
sbit KEY_4 =P2^3;
//********定義變量*****************************
uchar BUF[8]; //數(shù)據(jù)緩存區(qū)
uchar cnt; //接收數(shù)據(jù)的累計(jì)值
//********定義函數(shù)*****************************
void delay(unsigned int k);
void InitLcd();
void WriteDataLCM(uchar dataW);
void WriteCommandLCM(uchar CMD,uchar Attribc);
void DisplayOneChar(uchar X,uchar Y,uchar DData);
void SeriPushSend(uchar send_data);
void ReadKey(void);
void display(void);
//*********************************************
//串口中斷
void serial_serve(void) interrupt 4
{
if(RI==1){
RI=0;
BUF[cnt]=SBUF;
cnt++;
// if(cnt==7)flag=1;
}
}
//*********************************************
//串口初始化
//9600 bps @ 11.059 MHz
void init_uart()
{
TMOD=0x21;
TH1=0xfd;
TL1=0xfd;
SCON=0x50;
PS=1; //串口中斷設(shè)為高優(yōu)先級(jí)別
TR0=1; //啟動(dòng)定時(shí)器
TR1=1;
ET0=1; //打開(kāi)定時(shí)器0中斷
ES=1;
}
//*********LCD1602初始化**********************
void InitLcd()
{
WriteCommandLCM(0x38,1);
WriteCommandLCM(0x08,1);
WriteCommandLCM(0x01,1);
WriteCommandLCM(0x06,1);
WriteCommandLCM(0x0c,1);
}
//**********檢測(cè)忙信號(hào)************************
void WaitForEnable(void)
{
DataPort=0xff;
LCM_RS=0;LCM_RW=1;_nop_();
LCM_EN=1;_nop_();_nop_();
while(DataPort&0x80);
LCM_EN=0;
}
//**********寫命令至LCD***********************
void WriteCommandLCM(uchar CMD,uchar Attribc)
{
if(Attribc)WaitForEnable();
LCM_RS=0;LCM_RW=0;_nop_();
DataPort=CMD;_nop_();
LCM_EN=1;_nop_();_nop_();LCM_EN=0;
}
//**********寫數(shù)據(jù)至LCD************************
void WriteDataLCM(uchar dataW)
{
WaitForEnable();
LCM_RS=1;LCM_RW=0;_nop_();
DataPort=dataW;_nop_();
LCM_EN=1;_nop_();_nop_();LCM_EN=0;
}
//*********寫一個(gè)字符數(shù)據(jù)到指定的目標(biāo)***********
void DisplayOneChar(uchar X,uchar Y,uchar DData)
{
Y&=1;
X&=15;
if(Y)X|=0x40;
X|=0x80;
WriteCommandLCM(X,0);
WriteDataLCM(DData);
}
//**********延時(shí)函數(shù)***************
void delay(unsigned int k)
{
unsigned int i,j;
for(i=0;i<k;i++)
{
for(j=0;j<121;j++)
{;}
}
}
//*********串口數(shù)據(jù)發(fā)送******************
void SeriPushSend(uchar send_data)
{
SBUF=send_data;
while(!TI);TI=0;
}
//*********按鍵檢測(cè)**********************
void ReadKey(void)
{
EA=0;
if(KEY_1==0){
delay(50);
if(KEY_1==0){
SeriPushSend(0XC0); //發(fā)送校準(zhǔn)命令。
display();
while(KEY_1==0); //等待按鍵放開(kāi)
}
}
if(KEY_2==0){
delay(50);
if(KEY_2==0){
SeriPushSend(0XC1); //發(fā)送停止校準(zhǔn)命令。
display();
while(KEY_2==0); //等待按鍵放開(kāi)
}
}
if(KEY_3==0){
delay(50);
if(KEY_3==0){
SeriPushSend(0XA0); //發(fā)送恢復(fù)出廠命令。
display();
SeriPushSend(0XAA); //發(fā)送恢復(fù)出廠命令。
display();
SeriPushSend(0XA5); //發(fā)送恢復(fù)出廠命令。
display();
SeriPushSend(0XC5); //發(fā)送恢復(fù)出廠命令。
display();
while(KEY_3==0); //等待按鍵放開(kāi)
}
}
if(KEY_4==0){
delay(50);
if(KEY_4==0){
SeriPushSend(0X3); //發(fā)送設(shè)定磁偏角高8位命令。
display();
SeriPushSend(0X0); //發(fā)送磁偏角高8位的數(shù)據(jù)。
display();
SeriPushSend(0X4); //發(fā)送設(shè)定磁偏角低8位命令
display();
SeriPushSend(0X64); //發(fā)送磁偏角低8位的數(shù)據(jù)。此時(shí)磁偏角被設(shè)定為10.0度
display();
while(KEY_4==0); //等待按鍵放開(kāi)
}
}
/*
if(KEY_5==0){
delay(50);
if(KEY_4==0){
SeriPushSend(0XAE); //發(fā)送當(dāng)前角度為0度命令。
display();
while(KEY_4==0); //等待按鍵放開(kāi)
}
}
*/
EA=1;
}
//*******************數(shù)據(jù)接收并顯示**********************
void display(void)
{
uchar SUM;
uint i ;
for (i=0;i<3000;i++); //傳送數(shù)據(jù)延時(shí)
if(BUF[0]==0X0D&&BUF[1]==0X0A){ //幀頭判斷
SUM=BUF[6]+BUF[5]+BUF[4]+BUF[3]+BUF[2]+BUF[1]+BUF[0]; //校驗(yàn)和
if (BUF[7]==SUM){ //校驗(yàn)和判斷
DisplayOneChar(0,0,BUF[2]); //角度百位值 寫入LCD,因?yàn)槭亲址愋停圆挥棉D(zhuǎn)換,直接顯示
DisplayOneChar(1,0,BUF[3]); //角度十位值 寫入LCD
……………………
…………限于本文篇幅 余下代碼請(qǐng)從51黑下載附件…………
復(fù)制代碼
作者:
highwest
時(shí)間:
2019-4-3 15:37
謝謝分享~~
歡迎光臨 (http://www.raoushi.com/bbs/)
Powered by Discuz! X3.1