帆板運動(adxl3+有字庫1268+51單片機+矩陣鍵盤)
下載:
帆板.docx
(24.59 KB, 下載次數(shù): 13)
2017-7-19 15:14 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
- /***************************************************************/
- #include<reg51.h>
- #include "control.h"
- #include "12864.h"
- #include "adxl.h"
- #define uchar unsigned char
- #define uint unsigned int
- sbit key=P2^3;
- void timer_init()
- {
- TMOD=0X10;
- TH1=(65535-100)/256;
- TL1=(65535-100)%256;
- EA=1;
- ET1=1;
- TR1=1;
- }
- void main()
- {
- char devid;
- timer_init();
- lcd_12864_init();
- Init_ADXL345(); //初始化ADXL345
- devid=Single_Read_ADXL345(0X00); //讀出的數(shù)據(jù)為0XE5,表示正確
- while(1)
- {
- adxl345();
- if(key==0)
- keyscan_1();
- else
- keyscan();
- }
- }
- /*********************************
- // Controh.H文件
- #ifndef __contral_h_
- #define __contral_h_
- extern signed char pwm;
- extern void delayms(unsigned int xms);
- extern void keyscan();
- extern void keyscan_1();
- #endif
- //12864.H文件
- #ifndef __12864_h_
- #define __12864_h_
- extern void lcd_writestring(unsigned char *str); //向lcd發(fā)送一個字符串,長度64字符之內。 /**/
- extern void write_12864_cmd(unsigned char cmd ); //向液晶寫數(shù)據(jù)
- extern void write_12864_data(unsigned char dat); //向液晶寫數(shù)據(jù)?
- extern void lcd_12864_init();//初始化液晶
- extern void write_12864_addr(unsigned char x,unsigned char y); //寫液晶的地址
- extern void delayms_12864(unsigned char xms); //延時函數(shù)
- extern void write_12864_addr(unsigned char x,unsigned char y);//寫液晶的地址
- #endif
- //ADXL.H文件
- #ifndef __ADXL_h_
- #define __ADXL_h_
- extern void jiaodu(); //角度轉換 /**/
- extern void display_x(); //x軸 /**/
- extern void display_y(); //y軸 /**/
- extern void display_z(); //z軸 /**/
- extern void Init_ADXL345(); //延時函數(shù)
- extern unsigned char Single_Read_ADXL345(unsigned char REG_Address);
- extern void Multiple_read_ADXL345(void); /**/
- extern void adxl345();
- #endif
- // Controh.H文件
- //#ifndef __contral_h_
- //#define __contral_h_
- //extern signed char pwm;
- //extern void delayms(unsigned int xms);
- //extern void keyscan();
- //extern void keyscan_1();
- //#endif
- /***************************************************************/
- // Control.C文件
- #include<reg51.h>
- #include "control.h"
- #include "12864.h"
- #define uchar unsigned char
- #define uint unsigned int
- #define keydata P1
- sbit A1=P1^4;
- sbit A2=P1^5;
- sbit ENA=P1^6;
- signed int count=0;
- signed char pwm=0;
- signed char anjian=0;
- uchar numshi=0;
- uchar numge=0;
- void delayms(unsigned int xms)
- {
- unsigned int i,j;
- for(i=0;i<xms;i++)
- for(j=0;j<110;j++);
- }
- void pwm_dis()
- {
- numshi=pwm/10;
- numge=pwm%10;
- write_12864_data(0x30+numshi);
- write_12864_data(0x30+numge);
- }
- void anjian_dis()
- {
- numshi=anjian/10;
- numge=anjian%10;
- write_12864_data(0x30+numshi);
- write_12864_data(0x30+numge);
- }
- void keyscan()
- {
- unsigned char dat=0;
- unsigned char num=0;
- keydata=0xfe;
- dat=keydata;
- dat=dat&0xf0;
- while(dat!=0xf0)
- {
- delayms(5);
- dat=keydata;
- dat=dat&0xf0;
- while(dat!=0xf0)
- {
- dat=keydata;
- switch(dat)
- {
- case 0xee:num=1;
- break;
- case 0xde:num=2;
- break;
- case 0xbe:num=3;
- break;
- case 0x7e:num=4;
- break;
- }
- while(dat!=0xf0)
- {
- dat=keydata;
- dat=dat&0xf0;
- }
- }
- }
- keydata=0xfd;
- dat=keydata;
- dat=dat&0xf0;
- while(dat!=0xf0)
- {
- delayms(5);
- dat=keydata;
- dat=dat&0xf0;
- while(dat!=0xf0)
- {
- dat=keydata;
- switch(dat)
- {
- case 0xed:num=5;
- break;
- case 0xdd:num=6;
- break;
- case 0xbd:num=7;
- break;
- case 0x7d:num=8;
- break;
- }
- while(dat!=0xf0)
- {
- dat=keydata;
- dat=dat&0xf0;
- }
- }
- }
- keydata=0xfb;
- dat=keydata;
- dat=dat&0xf0;
- while(dat!=0xf0)
- {
- delayms(5);
- dat=keydata;
- dat=dat&0xf0;
- while(dat!=0xf0)
- {
- dat=keydata;
- switch(dat)
- {
- case 0xeb:num=9;
- break;
- case 0xdb:num=10;
- break;
- case 0xbb:num=11;
- break;
- case 0x7b:num=12;
- break;
- }
- while(dat!=0xf0)
- {
- dat=keydata;
- dat=dat&0xf0;
- }
- }
- }
-
- keydata=0xf7;
- dat=keydata;
- dat=dat&0xf0;
- while(dat!=0xf0)
- {
- delayms(5);
- dat=keydata;
- dat=dat&0xf0;
- while(dat!=0xf0)
- {
- dat=keydata;
- switch(dat)
- {
- case 0xe7:num=13;
- break;
- case 0xd7:num=14;
- break;
- case 0xb7:num=15;
- break;
- case 0x77:num=16;
- break;
- }
- while(dat!=0xf0)
- {
- dat=keydata;
- dat=dat&0xf0;
- }
- }
- }
- switch(num)
- {
- case 1:write_12864_addr(1,3);
- pwm=0;
- pwm_dis();
- break;
- case 2:write_12864_addr(1,3);
- pwm=10;
- pwm_dis();
- break;
- case 3:write_12864_addr(1,3);
- pwm=20;
- pwm_dis();
- break;
- case 4:write_12864_addr(1,3);
- pwm=30;
- pwm_dis();
- break;
-
- case 5:write_12864_addr(1,3);
- pwm=40;
- pwm_dis();
- break;
- case 6:write_12864_addr(1,3);
- pwm=50;
- pwm_dis();
- break;
- case 7:write_12864_addr(1,3);
- pwm=60;
- pwm_dis();
- break;
- case 8:write_12864_addr(1,3);
- pwm=70;
- pwm_dis();
- break;
- case 9:write_12864_addr(1,3);
- pwm=80;
- pwm_dis();
- break;
- case 10:write_12864_addr(1,3);
- pwm=90;
- pwm_dis();
- break;
- case 11:write_12864_addr(1,3);
- pwm=99;
- pwm_dis();
- break;
- case 12:write_12864_addr(1,3);
- pwm=35;
- pwm_dis();
- break;
- case 13:write_12864_addr(1,3);
- pwm=pwm+5;
- pwm_dis();
- break;
- case 14:write_12864_addr(1,3);
- pwm=pwm-5;
- pwm_dis();
- break;
- case 15:write_12864_addr(1,3);
- pwm=pwm+1;
- pwm_dis();
- break;
- case 16:write_12864_addr(1,3);
- pwm=pwm-1;
- pwm_dis();
- break;
- }
- }
- void keyscan_1()
- {
- unsigned char dat=0;
- unsigned char num=0;
- keydata=0xfe;
- dat=keydata;
- dat=dat&0xf0;
- while(dat!=0xf0)
- {
- delayms(5);
- dat=keydata;
- dat=dat&0xf0;
- while(dat!=0xf0)
- {
- dat=keydata;
- switch(dat)
- {
- case 0xee:num=1;
- break;
- case 0xde:num=2;
- break;
- case 0xbe:num=3;
- break;
- case 0x7e:num=4;
- break;
- }
- while(dat!=0xf0)
- {
- dat=keydata;
- dat=dat&0xf0;
- }
- }
- }
- keydata=0xfd;
- dat=keydata;
- dat=dat&0xf0;
- while(dat!=0xf0)
- {
- delayms(5);
- dat=keydata;
- dat=dat&0xf0;
- while(dat!=0xf0)
- {
- dat=keydata;
- switch(dat)
- {
- case 0xed:num=5;
- break;
- case 0xdd:num=6;
- break;
- case 0xbd:num=7;
- break;
- case 0x7d:num=8;
- break;
- }
- while(dat!=0xf0)
- {
- dat=keydata;
- dat=dat&0xf0;
- }
- }
- }
- keydata=0xfb;
- dat=keydata;
- dat=dat&0xf0;
- while(dat!=0xf0)
- {
- delayms(5);
- dat=keydata;
- dat=dat&0xf0;
- while(dat!=0xf0)
- {
- dat=keydata;
- switch(dat)
- {
- case 0xeb:num=9;
- break;
- case 0xdb:num=10;
- break;
- case 0xbb:num=11;
- break;
- case 0x7b:num=12;
- break;
- }
- while(dat!=0xf0)
- {
- dat=keydata;
- dat=dat&0xf0;
- }
- }
- }
- keydata=0xf7;
- dat=keydata;
- dat=dat&0xf0;
- while(dat!=0xf0)
- {
- delayms(5);
- dat=keydata;
- dat=dat&0xf0;
- while(dat!=0xf0)
- {
- dat=keydata;
- switch(dat)
- {
- case 0xe7:num=13;
- break;
- case 0xd7:num=14;
- break;
- case 0xb7:num=15;
- break;
- case 0x77:num=16;
- break;
- }
- while(dat!=0xf0)
- {
- dat=keydata;
- dat=dat&0xf0;
- }
- }
- }
- switch(num)
- {
- case 1:write_12864_addr(3,7);
- anjian=0;
- anjian_dis();
- break;
- case 2:write_12864_addr(3,7);
- anjian=10;
- anjian_dis();
- break;
- case 3:write_12864_addr(3,7);
- anjian=20;
- anjian_dis();
- break;
- case 4:write_12864_addr(3,7);
- anjian=30;
- anjian_dis();
- break;
- case 5:write_12864_addr(3,7);
- anjian=40;
- anjian_dis();
- break;
- case 6:write_12864_addr(3,7);
- anjian=50;
- anjian_dis();
- break;
- case 7:write_12864_addr(3,7);
- anjian=60;
- anjian_dis();
- break;
- case 8:write_12864_addr(3,7);
- anjian=anjian+1;
- anjian_dis();
- break;
- case 9:write_12864_addr(3,7);
- anjian=anjian+2;
- anjian_dis();
- break;
- case 10:write_12864_addr(3,7);
- anjian=anjian+3;
- anjian_dis();
- break;
- case 11:write_12864_addr(3,7);
- anjian=anjian+4;
- anjian_dis();
- break;
- case 12:write_12864_addr(3,7);
- anjian=anjian+5;
- anjian_dis();
- break;
- case 13:write_12864_addr(3,7);
- anjian=anjian+6;
- anjian_dis();
- break;
- case 14:write_12864_addr(3,7);
- anjian=anjian+7;
- anjian_dis();
- break;
- case 15:write_12864_addr(3,7);
- anjian=anjian+8;
- anjian_dis();
- break;
- case 16:write_12864_addr(3,7);
- anjian=anjian+9;
- anjian_dis();
- break;
- }
- }
- void timer0() interrupt 3
- {
- A1=1;
- A2=0;
- TH1=(65535-100)/256;
- TL1=(65535-100)%256;
- count++;
- if(count>=100)
- count=0;
- if(count<pwm)
- {
- ENA=1;
- }
- else
- ENA=0;
- }
- /***********************************************************
- ******************12864.C文件*******************************
- 12864指令:
- 0x01/將DDRAM填滿“20H”,并且設定DDRAM的地址計數(shù)器(AC)到“00H”
- 0x02//設定DDRAM的地址計數(shù)器(AC)到“00H”,并且將游標移到開頭原點位置;這個指令并不改變DDRAM的內容
- 0x04//讀寫后,AC減一,向左寫
- 0x06//讀寫后,AC加一,向右寫
- 0x10//光標向左移動,AC減一
- 0x14//光標向右移動,AC加一
- 0x18//顯示向左移動,光標跟著移動
- 0x1c//顯示向右移動,光標跟著移動
- 0x0c//整體顯示開,游標關,游標位置反白不允許
- 0x0e//整體顯示開,游標開,游標位置反白不允許
- 0x0f//整體顯示開,游標開,游標位置反白允許
- 0x08//關顯示,關光標,關光標閃爍
- 0x30//8位數(shù)據(jù)端口,基本指令操作
- 0x34//8位數(shù)據(jù)總線,擴展指令集
- 0x20//4位數(shù)據(jù)總線,基本指令集
- 0x24//4位數(shù)據(jù)總線,擴展指令集
- **************************************************************/
- #include<reg51.h>
- #include"12864.h"
- #include"control.h"
- #define lcd_data P0 //定義液晶數(shù)據(jù)端口
- sbit lcd_PSB=P3^7; //液晶串行數(shù)據(jù)和并行數(shù)據(jù)選擇端
- sbit lcd_EN=P2^7; //液晶en使能端
- sbit lcd_RS=P2^6;//液晶的rs
- sbit lcd_RW=P2^5; //液晶的rw讀寫端口
- void delayms_12864(unsigned char xms) //延時函數(shù)
- {
- unsigned char i,j;
- for(i=0;i<xms;i++)
- for(j=0;j<110;j++);
- }
- bit check_12864_busy()//檢測液晶忙不忙
- {
- bit result=0;
- lcd_RS=0;
- lcd_RW=1;
- lcd_EN=1;
- delayms_12864(3);
- result=(bit)(lcd_data&0x80); //取出數(shù)據(jù)端口的最高位
- lcd_EN=0;
- return result;
- }
- void write_12864_cmd(unsigned char cmd ) //寫指令
- {
- while(check_12864_busy()); //檢測液晶忙不忙
- lcd_RS=0; //rs=0為寫命令
- lcd_EN=0;
- lcd_RW=0;
- lcd_data=cmd; //把指令給數(shù)據(jù)端口
- delayms_12864(1);
- lcd_EN=1;
- delayms_12864(1);
- lcd_EN=0;
- }
- void write_12864_data(unsigned char dat) //向液晶寫數(shù)據(jù)
- {
- while(check_12864_busy()); //檢測液晶忙不忙
- lcd_RS=1; //rs=1為寫數(shù)據(jù)
- lcd_EN=0;
- lcd_RW=0;
- lcd_data=dat; //把數(shù)據(jù)給數(shù)據(jù)端口
- delayms_12864(1);
- lcd_EN=1;
- delayms_12864(1);
- lcd_EN=0;
- }
- void lcd_12864_init() //初始化液晶
- {
- lcd_PSB=1;
- write_12864_cmd(0x30);
- delayms_12864(5);
- write_12864_cmd(0x0c);
- delayms_12864(5);
- write_12864_cmd(0x01);
- delayms_12864(5);
- }
- void write_12864_addr(unsigned char x,unsigned char y)//寫液晶的地址
- {
- unsigned char addr;
- if(x==0) //如果x=0,地址為液晶第一行
- {x=0x80;}
- else if(x==1) //如果x=1,地址為液晶第二行
- {x=0x90;}
- else if(x==2) //如果x=2,地址為液晶第三行
- {x=0x88;}
- else if(x==3) //如果x=3,地址為液晶第四行
- {x=0x98;}
- addr=x+y;
- write_12864_cmd(addr);
- }
- //ADXL.C 文件
- #include <reg51.H>
- #include <math.h> //Keil library
- #include <stdio.h> //Keil library
- #include <intrins.h>
- #include "12864.h"
-
- #define uchar unsigned char
- #define uint unsigned int
- #define DataPort P1 //LCD1602數(shù)據(jù)端口
- sbit SCL=P2^0; //IIC時鐘引腳定義
- sbit SDA=P2^1; //IIC數(shù)據(jù)引腳定義
- sbit LED=P2^2;
- #define SlaveAddress 0xA6 //定義器件在IIC總線中的從地址,根據(jù)ALT ADDRESS地址引腳不同修改
- //ALT ADDRESS引腳接地時地址為0xA6,接電源時地址為0x3A
- typedef unsigned char BYTE;
- typedef unsigned short WORD;
- BYTE BUF[8]; //接收數(shù)據(jù)緩存區(qū)
- uchar ge,shi,bai,qian,wan; //顯示變量
- int dis_data; //變量
- void delay(unsigned int k);
- void InitLcd(); //初始化lcd1602
- void Init_ADXL345(void); //初始化ADXL345
- void WriteDataLCM(uchar dataW);
- void WriteCommandLCM(uchar CMD,uchar Attribc);
- void DisplayOneChar(uchar X,uchar Y,uchar DData); /**/
- void conversion(uint temp_data);
- void Single_Write_ADXL345(uchar REG_Address,uchar REG_data); //單個寫入數(shù)據(jù)
- uchar Single_Read_ADXL345(uchar REG_Address); //單個讀取內部寄存器數(shù)據(jù)
- void Multiple_Read_ADXL345();
- //連續(xù)的讀取內部寄存器數(shù)據(jù)
- void Delay5us();
- void Delay5ms();
- void ADXL345_Start();
- void ADXL345_Stop();
- void ADXL345_SendACK(bit ack);
- bit ADXL345_RecvACK();
- void ADXL345_SendByte(BYTE dat);
- BYTE ADXL345_RecvByte();
- void ADXL345_ReadPage();
- void ADXL345_WritePage();
- float tempz;
- float tempy;
- float tempx;
- uchar tab[]="度";
- uchar tab1[]="偏轉";
- uchar tab2[]="風力";
- uchar tab3[]="輸入";
- void conversion(uint temp_data)
- {
- wan=temp_data/10000+0x30;
- temp_data=temp_data%10000; //取余運算
- qian=temp_data/1000+0x30;
- temp_data=temp_data%1000;//取余運算
- bai=temp_data/100+0x30;
- temp_data=temp_data%100;//取余運算
- shi=temp_data/10+0x30;
- temp_data=temp_data%10; //取余運算
- ge=temp_data+0x30;
- }
- //void DisplayOneChar(uchar DData) /**/
- // {
- // Y&=1;
- // X&=15;
- // if(Y)X|=0x40;
- // X|=0x80;
- // write_12864_addr(X,0);
- // write_12864_data(DData); /*這一段*/
- // }
- /****延時5微秒(STC90C52RC@12M)
- 不同的工作環(huán)境,需要調整此函數(shù),
- 注意時鐘過快時需要修改,當改用1
- T的MCU時,請調整此延時函數(shù)
- ***********/
- void Delay5us()
- {
- _nop_();
- _nop_();
- _nop_();
- _nop_();
- _nop_();
- _nop_();
- _nop_();
- _nop_();
- _nop_();
- _nop_();
- _nop_();
- _nop_();
- }
- /*延時5毫秒(STC90C52RC@12M)不同
- 的工作環(huán)境,需要調整此函數(shù)當改用
- 1T的MCU時,請調整此延時函數(shù)*/
- void Delay5ms()
- {
- WORD n=560;
- while(n--);
- }
- /*起始信號*/
- void ADXL345_Start()
- {
- SDA=1;//拉高數(shù)據(jù)線
- SCL=1;//拉高時鐘線
- Delay5us();//延時
- SDA=0;//產生下降沿
- Delay5us();//延時
- SCL=0;//拉低時鐘線
- }
- /**停止信號**/
- void ADXL345_Stop()
- {
- SDA=0;//拉低數(shù)據(jù)線
- SCL=1;//拉高時鐘線
- Delay5us();//延時
- SDA=1;//產生上升沿
- Delay5us();//延時
- }
- /*發(fā)送應答信號
- 入口參數(shù):ack(0:ACK 1:NAK)
- *************************/
- void ADXL345_SendACK(bit ack)
- {
- SDA=ack;//寫應答信號
- SCL=1;//拉高時鐘線
- Delay5us();//延時
- SCL=0;//拉低時鐘線
- Delay5us();//延時
- }
- //void ADXL345_SendACK(bit ack)
- // {
- // SDA=ack; //寫應答信號
- // SCL=1;//拉高時鐘線
- // Delay5us();//延時
- // SCL=0;//拉低時鐘線
- // Delay5us();//延時
- // }
- /*接收應答信號*/
- bit ADXL345_RecvACK()
- {
- SCL=1; //拉高時鐘線
- Delay5us();//延時?
- CY=SDA; //讀應答信號
- SCL=0;//拉低時鐘線
- Delay5us(); //延時
- return CY;
- }
- /*向IIC總線發(fā)送一個字節(jié)數(shù)據(jù)**/
- void ADXL345_SendByte(BYTE dat)
- {
- BYTE i;
- for(i=0;i<8;i++)//8位計數(shù)器
- {
- dat<<=1;//移出數(shù)據(jù)的最高位
- SDA=CY;//送數(shù)據(jù)口
- SCL=1;//拉高時鐘線
- Delay5us();//延時
- SCL=0;//拉低時鐘線
- Delay5us();//延時
- }
- ADXL345_RecvACK();
- }
- /*從IIC總線接收一個字節(jié)數(shù)據(jù)*/
- BYTE ADXL345_RecvByte()
- {
- BYTE i;
- BYTE dat=0;
- SDA=1;//使能內部上拉,準備讀取數(shù)據(jù),
- for(i=0;i<8;i++) //8位計數(shù)器
- {
- dat<<=1;
- SCL=1;//拉高時鐘線
- Delay5us();//延時
- dat|=SDA;//讀數(shù)據(jù)
- SCL=0;//拉低時鐘線
- Delay5us();//延時
- }
- return dat;
- }
- /*單字節(jié)寫入*/
- void Single_Write_ADXL345(uchar REG_Address,uchar REG_data)
- {
- ADXL345_Start();//起始信號
- ADXL345_SendByte(SlaveAddress);//發(fā)送設備地址+寫信號
- ADXL345_SendByte(REG_Address);//內部寄存器地址,請參考中文pdf22頁
- ADXL345_SendByte(REG_data);//內部寄存器數(shù)據(jù),請參考中文pdf22頁
- ADXL345_Stop();//發(fā)送停止信號
- }
- /*單字節(jié)讀取*/
- uchar Single_Read_ADXL345(uchar REG_Address)
- { uchar REG_data;
- ADXL345_Start(); //起始信號
- ADXL345_SendByte(SlaveAddress);//發(fā)送設備地址+寫信號
- ADXL345_SendByte(REG_Address);//發(fā)送存儲單元地址,從0開始
- ADXL345_Start(); //起始信號
- ADXL345_SendByte(SlaveAddress+1);//發(fā)送設備地址+讀信號
- REG_data=ADXL345_RecvByte(); //讀出寄存器數(shù)據(jù)
- ADXL345_SendACK(1);
- ADXL345_Stop();//停止信號
- return REG_data;
- }
- /*連續(xù)讀出ADXL345內部加速度數(shù)據(jù),地址范圍0x32~0x37*/
- void Multiple_read_ADXL345(void)
- {
- uchar i;
- ADXL345_Start();//起始信號
- ADXL345_SendByte(SlaveAddress);//發(fā)送設備地址+寫信號
- ADXL345_SendByte(0x32);//發(fā)送存儲單元地址,從0x32開始
- ADXL345_Start();//起始信號
- ADXL345_SendByte(SlaveAddress+1);//發(fā)送設備地址+讀信號
- for(i=0;i<6;i++)//連續(xù)讀取6個地址數(shù)據(jù),存儲中BUF
- {
- BUF[i]=ADXL345_RecvByte();//BUF[0]存儲0x32地址中的數(shù)據(jù)
- if(i==5)
- {
- ADXL345_SendACK(1); //最后一個數(shù)據(jù)需要回NOACK
- }
- else
- {
- ADXL345_SendACK(0);//回應ACK
- }
- }
- ADXL345_Stop(); //停止信號
- Delay5ms();
- }
- /**初始化ADXL345,根據(jù)需要請參考pdf進行修改*/
- void Init_ADXL345()
- {
- Single_Write_ADXL345(0x31,0x0B); //測量范圍,正負16g,13位模式
- Single_Write_ADXL345(0x2C,0x08); //速率設定為12.5參考pdf13頁
- Single_Write_ADXL345(0x2D,0x08);//選擇電源模式 參考pdf24頁
- Single_Write_ADXL345(0x2E,0x80); //使能DATA_READY中斷
- Single_Write_ADXL345(0x1E,0x00); //X偏移量,根據(jù)測試傳感器的狀態(tài)寫入pdf29頁
- Single_Write_ADXL345(0x1F,0x00); //Y偏移量,根據(jù)測試傳感器的狀態(tài)寫入pdf29頁
- Single_Write_ADXL345(0x20,0x05); //Z偏移量,根據(jù)測試傳感器的狀態(tài)寫入pdf29頁
- }
- /*顯示x軸*/
- void display_x()
- {
- float tempx; /**/
- dis_data=(BUF[1]<<8)+BUF[0]; //合成數(shù)據(jù)
- if(dis_data<0)
- {
- dis_data=-dis_data;
- write_12864_addr(2,1);
- write_12864_data('-');//顯示正負符號位
- }
- else
- {
- write_12864_addr(2,1);
- write_12864_data(' ');//顯示空格
- }
- tempx=(float)dis_data*3.9;//計算數(shù)據(jù)和顯示,查考ADXL345快速入門第4頁
- conversion(tempx);//轉換出顯示需要的數(shù)據(jù)
- write_12864_addr(2,0);
- write_12864_data('X');
- write_12864_data(':');
- write_12864_addr(2,2);
- write_12864_data(qian);
- write_12864_data('.');
- write_12864_addr(2,3);
- write_12864_data(bai);
- write_12864_data(shi);
- // write_12864_addr(2,3); /***/
- // DisplayOneChar(' '); /**/
- }
- /*顯示y軸*/
- void display_y()
- {
- float tempy; /**/
- dis_data=(BUF[3]<<8)+BUF[2];//合成數(shù)據(jù)
- if(dis_data<0)
- {
- dis_data=-dis_data;
- write_12864_addr(2,5);
- write_12864_data('-');//顯示正負符號位
- }
- else
- {
- write_12864_addr(2,5);
- write_12864_data(' ');//顯示空格
- }
- tempy=(float)dis_data*3.9;//計算數(shù)據(jù)和顯示,查考ADXL345快速入門第4頁
- conversion(tempy);//轉換出顯示需要的數(shù)據(jù)
- write_12864_addr(2,4);
- write_12864_data('Y');//第1行,第0列顯示y
- write_12864_data(':');
- write_12864_addr(2,6);
- write_12864_data(qian);
- write_12864_data('.');
- write_12864_addr(2,7);
- write_12864_data(bai);
- write_12864_data(shi);
- // write_12864_addr(2,7);/**/
- // DisplayOneChar(' '); /**/
- }
- /*顯示z軸*/
- void display_z()
- {
- // float temp; /**/
- dis_data=(BUF[5]<<8)+BUF[4];//合成數(shù)據(jù)
- if(dis_data<0)
- {
- dis_data=-dis_data;
- write_12864_addr(3,1);
- write_12864_data('-'); //顯示負符號位
- }
- else
- {
- write_12864_addr(3,1);
- write_12864_data(' '); //顯示空格
- tempz=(float)dis_data*3.9;//計算數(shù)據(jù)和顯示,查考ADXL345快速入門第4頁
- conversion(tempz); //轉換出顯示需要的數(shù)據(jù)
- write_12864_addr(3,0);
- write_12864_data('Z');//第0行,第10列?顯示Z
- write_12864_data(':');
- write_12864_addr(3,2);
- write_12864_data(qian);
- write_12864_data('.');
- write_12864_addr(3,3);
- write_12864_data(bai);
- write_12864_data(shi);
- // write_12864_addr(3,4); /**/
- // DisplayOneChar(' '); /**/
- }
- }
- //void adxl() /*這一段*/
- // {
- // uchar devid;
- // uchar i,j;
- // float w;
- // delay(500);
- // Init_ADXL345();//初始化ADXL345
- // devid=Single_Read_ADXL345(0X00);
- // } /*這一段*/
- void jiaodu()
- {
- uchar i,j,k;
- float w;
- w=(180*atan(tempz/tempx))/3.14;
- if(w>=41&&w<=49)
- {
- LED=0;
- }
- else
- LED=1;
- conversion(w);
- write_12864_addr(1,4);
- {
- for(j=0;tab1[j]!='\0';j++)
- write_12864_data(tab1[j]);
- }
- write_12864_addr(1,6);
- write_12864_data(shi);
- write_12864_data(ge);
- write_12864_addr(1,7);
- {
- for(i=0;tab[i]!='\0';i++)
- write_12864_data(tab[i]);
- }
- write_12864_addr(3,4);
- {
- for(k=0;tab2[k]!='\0';k++)
- write_12864_data(tab2[k]);
- }
- write_12864_addr(1,0);
- {
- for(k=0;tab3[k]!='\0';k++)
- write_12864_data(tab3[k]);
- }
- }
- void adxl345()
- {
- Multiple_Read_ADXL345();//連續(xù)讀出數(shù)據(jù),存儲在BUF中
- display_x();//---------顯示X軸
- display_y();//---------顯示Y軸
- display_z();//---------顯示Z軸
- // delay(200); /**/
- jiaodu();
- }
復制代碼
|