標題:
帆板運動(adxl3+有字庫1268+51單片機+矩陣鍵盤)源程序
[打印本頁]
作者:
594211
時間:
2017-7-19 15:15
標題:
帆板運動(adxl3+有字庫1268+51單片機+矩陣鍵盤)源程序
帆板運動(
adxl3+
有字庫
1268+51
單片機
+
矩陣鍵盤)
下載:
帆板.docx
(24.59 KB, 下載次數: 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); //讀出的數據為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 ); //向液晶寫數據
extern void write_12864_data(unsigned char dat); //向液晶寫數據?
extern void lcd_12864_init();//初始化液晶
extern void write_12864_addr(unsigned char x,unsigned char y); //寫液晶的地址
extern void delayms_12864(unsigned char xms); //延時函數
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(); //延時函數
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的地址計數器(AC)到“00H”
0x02//設定DDRAM的地址計數器(AC)到“00H”,并且將游標移到開頭原點位置;這個指令并不改變DDRAM的內容
0x04//讀寫后,AC減一,向左寫
0x06//讀寫后,AC加一,向右寫
0x10//光標向左移動,AC減一
0x14//光標向右移動,AC加一
0x18//顯示向左移動,光標跟著移動
0x1c//顯示向右移動,光標跟著移動
0x0c//整體顯示開,游標關,游標位置反白不允許
0x0e//整體顯示開,游標開,游標位置反白不允許
0x0f//整體顯示開,游標開,游標位置反白允許
0x08//關顯示,關光標,關光標閃爍
0x30//8位數據端口,基本指令操作
0x34//8位數據總線,擴展指令集
0x20//4位數據總線,基本指令集
0x24//4位數據總線,擴展指令集
**************************************************************/
#include<reg51.h>
#include"12864.h"
#include"control.h"
#define lcd_data P0 //定義液晶數據端口
sbit lcd_PSB=P3^7; //液晶串行數據和并行數據選擇端
sbit lcd_EN=P2^7; //液晶en使能端
sbit lcd_RS=P2^6;//液晶的rs
sbit lcd_RW=P2^5; //液晶的rw讀寫端口
void delayms_12864(unsigned char xms) //延時函數
{
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); //取出數據端口的最高位
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; //把指令給數據端口
delayms_12864(1);
lcd_EN=1;
delayms_12864(1);
lcd_EN=0;
}
void write_12864_data(unsigned char dat) //向液晶寫數據
{
while(check_12864_busy()); //檢測液晶忙不忙
lcd_RS=1; //rs=1為寫數據
lcd_EN=0;
lcd_RW=0;
lcd_data=dat; //把數據給數據端口
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數據端口
sbit SCL=P2^0; //IIC時鐘引腳定義
sbit SDA=P2^1; //IIC數據引腳定義
sbit LED=P2^2;
#define SlaveAddress 0xA6 //定義器件在IIC總線中的從地址,根據ALT ADDRESS地址引腳不同修改
//ALT ADDRESS引腳接地時地址為0xA6,接電源時地址為0x3A
typedef unsigned char BYTE;
typedef unsigned short WORD;
BYTE BUF[8]; //接收數據緩存區(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); //單個寫入數據
uchar Single_Read_ADXL345(uchar REG_Address); //單個讀取內部寄存器數據
void Multiple_Read_ADXL345();
//連續(xù)的讀取內部寄存器數據
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)境,需要調整此函數,
注意時鐘過快時需要修改,當改用1
T的MCU時,請調整此延時函數
***********/
void Delay5us()
{
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
}
/*延時5毫秒(STC90C52RC@12M)不同
的工作環(huán)境,需要調整此函數當改用
1T的MCU時,請調整此延時函數*/
void Delay5ms()
{
WORD n=560;
while(n--);
}
/*起始信號*/
void ADXL345_Start()
{
SDA=1;//拉高數據線
SCL=1;//拉高時鐘線
Delay5us();//延時
SDA=0;//產生下降沿
Delay5us();//延時
SCL=0;//拉低時鐘線
}
/**停止信號**/
void ADXL345_Stop()
{
SDA=0;//拉低數據線
SCL=1;//拉高時鐘線
Delay5us();//延時
SDA=1;//產生上升沿
Delay5us();//延時
}
/*發(fā)送應答信號
入口參數: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é)數據**/
void ADXL345_SendByte(BYTE dat)
{
BYTE i;
for(i=0;i<8;i++)//8位計數器
{
dat<<=1;//移出數據的最高位
SDA=CY;//送數據口
SCL=1;//拉高時鐘線
Delay5us();//延時
SCL=0;//拉低時鐘線
Delay5us();//延時
}
ADXL345_RecvACK();
}
/*從IIC總線接收一個字節(jié)數據*/
BYTE ADXL345_RecvByte()
{
BYTE i;
BYTE dat=0;
SDA=1;//使能內部上拉,準備讀取數據,
for(i=0;i<8;i++) //8位計數器
{
dat<<=1;
SCL=1;//拉高時鐘線
Delay5us();//延時
dat|=SDA;//讀數據
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);//內部寄存器數據,請參考中文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(); //讀出寄存器數據
ADXL345_SendACK(1);
ADXL345_Stop();//停止信號
return REG_data;
}
/*連續(xù)讀出ADXL345內部加速度數據,地址范圍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個地址數據,存儲中BUF
{
BUF[i]=ADXL345_RecvByte();//BUF[0]存儲0x32地址中的數據
if(i==5)
{
ADXL345_SendACK(1); //最后一個數據需要回NOACK
}
else
{
ADXL345_SendACK(0);//回應ACK
}
}
ADXL345_Stop(); //停止信號
Delay5ms();
}
/**初始化ADXL345,根據需要請參考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偏移量,根據測試傳感器的狀態(tài)寫入pdf29頁
Single_Write_ADXL345(0x1F,0x00); //Y偏移量,根據測試傳感器的狀態(tài)寫入pdf29頁
Single_Write_ADXL345(0x20,0x05); //Z偏移量,根據測試傳感器的狀態(tài)寫入pdf29頁
}
/*顯示x軸*/
void display_x()
{
float tempx; /**/
dis_data=(BUF[1]<<8)+BUF[0]; //合成數據
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;//計算數據和顯示,查考ADXL345快速入門第4頁
conversion(tempx);//轉換出顯示需要的數據
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];//合成數據
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;//計算數據和顯示,查考ADXL345快速入門第4頁
conversion(tempy);//轉換出顯示需要的數據
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];//合成數據
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;//計算數據和顯示,查考ADXL345快速入門第4頁
conversion(tempz); //轉換出顯示需要的數據
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ù)讀出數據,存儲在BUF中
display_x();//---------顯示X軸
display_y();//---------顯示Y軸
display_z();//---------顯示Z軸
// delay(200); /**/
jiaodu();
}
復制代碼
作者:
shunshun
時間:
2017-7-20 14:26
有仿真嗎?
作者:
殤單片機小白
時間:
2017-7-23 21:44
這個是電賽的程序?
歡迎光臨 (http://www.torrancerestoration.com/bbs/)
Powered by Discuz! X3.1