?? main.c.bak
字號(hào):
#include <hidef.h> /* for EnableInterrupts macro */
#include "derivative.h" /* include peripheral declarations */
//本實(shí)驗(yàn)利用MCU內(nèi)部ADC不停的采集3軸加速度傳感器的X,Y,Z方向的輸出;
//當(dāng)X方向有振動(dòng)時(shí),D5點(diǎn)亮或熄滅
//當(dāng)Y方向有振動(dòng)時(shí),D6點(diǎn)亮或熄滅
//當(dāng)Z方向有振動(dòng)時(shí),D7點(diǎn)亮或熄滅
//注意:因初始的X,Y,Z輸出值未定,故應(yīng)依據(jù)X,Y,Z的上次和本次采集差值進(jìn)行判斷
#define x_led PTAD_PTAD0
#define y_led PTAD_PTAD1
#define z_led PTAD_PTAD2
byte x_h_last=0;//x向上次采集值的高位
byte x_l_last=0;//x向上次采集值的低位
byte x_h_new=0x03;//x向本次采集值的高位
byte x_l_new=0xff;//x向本次采集值的低位
//==============
byte y_h_last=0;//y向上次采集值的高位
byte y_l_last=0;//y向上次采集值的低位
byte y_h_new=0x03;//y向本次采集值的高位
byte y_l_new=0xff;//y向本次采集值的低位
//==============
byte z_h_last=0;//z向上次采集值的高位
byte z_l_last=0;//z向上次采集值的低位
byte z_h_new=0x03;//z向本次采集值的高位
byte z_l_new=0xff;//z向上次采集值的高位
//==============
byte ch_s=0;
byte first=1;
//==============
byte xyz_h;
byte xyz_l;
//===================================
//函數(shù)名:初始化ADC
//===================================
void Init_ADC(void)
{
ch_s=0;
ADC1CFG=0x98;//低功耗模式,10位精度,總線頻率=ADCK
ADC1SC2=0x00;//0x00:軟件觸發(fā),比較功能禁止;0x40:RTI觸發(fā),比較功能禁止
APCTL1=0x1c;//AD2--X;AD3--Y;AD4--Z
ADC1SC1=0x42; //0x42:中斷使能,單次轉(zhuǎn)換,選擇AD2,并啟動(dòng)了轉(zhuǎn)換;
//0x43:中斷使能,單次轉(zhuǎn)換,選擇AD3,并啟動(dòng)了轉(zhuǎn)換;
//0x44:中斷使能,單次轉(zhuǎn)換,選擇AD3,并啟動(dòng)了轉(zhuǎn)換;
}
//===========================
//函數(shù)名:Init_io
//作用:初始化IO
//============================
void Init_io(void)
{
PTAD = 0X00;//端口A數(shù)據(jù)寄存器初始化為0
PTADD_PTADD0=1;//引腳PTA0作為輸出引腳
PTADD_PTADD1=1;//引腳PTA1作為輸出引腳
PTADD_PTADD2=1;//引腳PTA2作為輸出引腳
PTADD_PTADD3=1;//引腳PTA3作為輸出引腳
//其他引腳方向控制位默認(rèn)為輸入引腳
//由于PTA0~PTA3引腳設(shè)置為輸出引腳,故它的內(nèi)部上拉使能控制寄存器不再起作用
PTASE_PTASE0=1;//引腳PTA0的壓擺率控制位使能,提供其EMC性能
PTASE_PTASE1=1;//引腳PTA1的壓擺率控制位使能,提供其EMC性能
PTASE_PTASE2=1;//引腳PTA2的壓擺率控制位使能,提供其EMC性能
PTASE_PTASE3=1;//引腳PTA3的壓擺率控制位使能,提供其EMC性能
PTADS_PTADS0=1;//引腳PTA0高輸出能力使能
PTADS_PTADS1=1;//引腳PTA1高輸出能力使能
PTADS_PTADS2=1;//引腳PTA2高輸出能力使能
PTADS_PTADS3=1;//引腳PTA3高輸出能力使能
}
void main(void) {
Init_io();
Init_ADC();
EnableInterrupts; /* enable interrupts */
/* include your code here */
for(;;) {
__RESET_WATCHDOG(); /* feeds the dog */
} /* loop forever */
/* please make sure that you never leave main */
}
//==========================================
//==========================================
interrupt VectorNumber_Vadc1 ADC_ISR(void)
{
if(first) //第一次采集3軸的電壓值
{
switch(ch_s)
{
case 0:
x_h_new=ADC1RH;
x_l_new=ADC1RL;
ch_s=1;
ADC1SC1=0x43;
break;
case 1:
y_h_new=ADC1RH;
y_l_new=ADC1RL;
ch_s=2;
ADC1SC1=0x44;
break;
case 2:
first=0;
z_h_new=ADC1RH;
z_l_new=ADC1RL;
ch_s=0;
ADC1SC1=0x42;
break;
default:
break;
}
}
else//非第一次采集xyz電壓值
{
switch(ch_s)
{
case 0://x
x_h_last=x_h_new;
x_l_last=x_l_new;
x_h_new=ADC1RH;
x_l_new=ADC1RL;
if((x_h_new>=x_h_last)&&(x_l_new>x_l_last))
{
xyz_h=x_h_new - x_h_last;
xyz_l=x_l_new - x_l_last;
if( (xyz_h>=0)&&(xyz_l>=90))
{
x_led=~x_led;//如果x正向有振動(dòng),D5有變化
}
}
if((x_h_new<=x_h_last)&&(x_l_new<x_l_last))
{
xyz_h=x_h_last - x_h_new;
xyz_l=x_l_last - x_l_new;
if( (xyz_h>=0)&&(xyz_l>=90))//如果x負(fù)向有振動(dòng),D5有變化
{
x_led=~x_led;
}
}
ch_s=1;
ADC1SC1=0x43;
break;
case 1://y
y_h_last=y_h_new;
y_l_last=y_l_new;
y_h_new=ADC1RH;
y_l_new=ADC1RL;
if((y_h_new>=y_h_last)&&(y_l_new>y_l_last))
{
xyz_h=y_h_new - y_h_last;
xyz_l=y_l_new - y_l_last;
if( (xyz_h>=0)&&(xyz_l>=90))//如果y正向有振動(dòng),D7有變化
{
y_led=~y_led;
}
}
if((y_h_new<=y_h_last)&&(y_l_new<y_l_last))
{
xyz_h=y_h_last - y_h_new;//如果y負(fù)向有振動(dòng),D7有變化
xyz_l=y_l_last - y_l_new;
if( (xyz_h>=0)&&(xyz_l>=90))
{
y_led=~y_led;
}
}
ch_s=2;
ADC1SC1=0x44;
break;
case 2://z
z_h_last=z_h_new;
z_l_last=z_l_new;
z_h_new=ADC1RH;
z_l_new=ADC1RL;
if((z_h_new>=z_h_last)&&(z_l_new>z_l_last))
{
xyz_h=z_h_new - z_h_last;
xyz_l=z_l_new - z_l_last;
if( (xyz_h>=0)&&(xyz_l>=90))//如果z正向有振動(dòng),D6有變化
{
z_led=~z_led;
}
}
if((z_h_new<=z_h_last)&&(z_l_new<z_l_last))
{
xyz_h=z_h_last - z_h_new;
xyz_l=z_l_last - z_l_new;
if( (xyz_h>=0)&&(xyz_l>=90))//如果z負(fù)向有振動(dòng),D6有變化
{
z_led=~z_led;
}
}
ch_s=0;
ADC1SC1=0x42;
break;
default:
break;
}
}
}
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -