99网
您的当前位置:首页51单片机 加速度传感器采集显示C程序

51单片机 加速度传感器采集显示C程序

来源:99网
振幅、频率测量程序:

//#include #include #include #include //函数声明

void t_init(void); void display(uint); void display1(uint); void ad_init(void); void delay(uchar);

#define uchar unsigned char #define uint unsigned int

unsigned char code table[]={0x3f,0x06,0x5b,0x4f,0x66, //字段吗 0x6d,0x7d,0x07,0x7f,0x6f};

unsigned char code tablewei[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf}; //字位码

unsigned char T0count; //T0计数变量 unsigned char timecount; //T1中段次数 #define PA 0x7cff //PA口 #define PB 0x7dff //PB口 #define con 0x7fff //控制字

sbit A8=P2^0; //地址线A0 sbit A9=P2^1; //地址线A1 sbit cs=P2^7; //片选 sbit wr=P3^6; //读端口 //ad转换的控制位 sbit ST=P3^2; sbit OE=P3^0; sbit EOC=P3^1; sbit ADA=P2^4; sbit ADB=P2^5; sbit ADC=P2^6;

bit flag; //测频率结束标志 unsigned long x;

void main() {t_init(); //T0、T1初始化 ad_init(); //0809初始化 while(1) //循环

{uint getdata; uint pl;

if(flag==1) //测频率完成 {

flag=0;

x=T0count*65536+TH0*256+TL0; pl=(unsigned int)x; timecount=0; T0count=0; TH0=0; TL0=0; TR0=1; }

display(pl);

ADA=1; ADB=1; ADC=0; ST=0; ST=1; ST=0;

while(EOC==0); OE=1; getdata=P1; OE=0; x=getdata; x=x*500/256; x=x/3;

getdata=(unsigned int)x; display1(getdata); } }

void delay(uchar i) {

uchar j,k;

for(j=i;j>0;j--)

for(k=125;k>0;k--); }

void display(uint temp) {uchar A1,A2,A3; A1=temp/100;

A2=(temp%100)/10; A3=temp%10;

//显示频率(后3个数码管)//选择ad通道 //启动ad转换 //转换结束 //允许读数据 //读数据 //换算成想要的数值 //输出于前3个数码管 //延时函数 //显示函数(后3)

wr=1;

XBYTE[PB]=0xdf; //选通第一位数码管 wr=0; delay(1); wr=1;

XBYTE[PA]=table[A3]; //显示个位 wr=0; delay(10); wr=1;

XBYTE[PA]=0x00; //关掉显示个位 wr=0; wr=1;

XBYTE[PB]=0xef; //选通第2位数码管 wr=0; delay(1); wr=1;

XBYTE[PA]=table[A2];//显示十位 wr=0; delay(10); wr=1;

XBYTE[PA]=0x00; //关掉显示十位 wr=0; wr=1;

XBYTE[PB]=0xf7; //选通第3位数码管 wr=0; delay(1); wr=1;

XBYTE[PA]=table[A1]; //显示百位 wr=0; delay(10); wr=1;

XBYTE[PA]=0x00; //关掉显示百位 wr=0; }

void display1(uint temp) //显示函数(后3) {uchar A1,A2,A3; A1=temp/100;

A2=(temp%100)/10; A3=temp%10;

wr=1;

XBYTE[PB]=0xfe; //选通第一位数码管

wr=0; delay(1); wr=1;

XBYTE[PA]=table[A1]; //显示百位 wr=0; delay(10); wr=1;

XBYTE[PA]=0x00; //关掉显示百位 wr=0; wr=1;

XBYTE[PB]=0xfd; //选通第2位数码管 wr=0; delay(1); wr=1;

XBYTE[PA]=table[A2];//显示十位 wr=0; delay(10); wr=1;

XBYTE[PA]=0x00; //关掉显示十位 wr=0; wr=1;

XBYTE[PB]=0xfb; //选通第3位数码管 wr=0; delay(1); wr=1;

XBYTE[PA]=table[A3]; //显示个位 wr=0; delay(10); wr=1;

XBYTE[PA]=0x00; //关掉显示个位 wr=0; }

void t_init(void) //定时器初始化 {TMOD=0x15; TH0=0; TL0=0;

TH1=(65536-4000)/256; TL1=(65536-4000)%256; TR1=1; TR0=1; ET0=1; ET1=1; EA=1;

}

void ad_init(void) //0809和8255初始化 {wr=1;

XBYTE[con]=0x80; //A组输入B组输出方式0 wr=0;

delay(1); // 延时1ms //delay(1000); // 延时1s //P2 |=0x30; ADA=1; ADB=1; ADC=0;

EOC=1;OE=0;ST=0; }

void t0(void) interrupt 1 using 0 {

T0count++; }

void t1(void) interrupt 3 using 0 {

TH1=(65536-4000)/256; TL1=(65536-4000)%256; timecount++;

if(timecount==250) {

TR0=0;

timecount=0; flag=1; } }

键盘控制正弦电压输出程序:

#include

#define uchar unsigned char

#define uint unsigned int

sbit LCP=P2^2;

sbit SCP=P2^1;

sbit SI=P2^0;

//T0中段,测频率 //T1中段 4000us*250=1s;

sbit S1=P2^3;

sbit S2=P2^4;

sbit DA0832=P3^3;

sbit DA0832_ON=P3^2;

uchar fun=0,b=0,c=0,d=0,tl,th;

uchar code tab[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};

uchar code

tosin[256]={0x80,0x83,0x86,0x,0x8d,0x90,0x93,0x96,0x99,0x9c,0x9f,0xa2,0xa5,0xa8,0xab,0xae,0xb1,0xb4,0xb7,0xba,0xbc,0xbf,0xc2,0xc5

,0xc7,0xca,0xcc,0xcf,0xd1,0xd4,0xd6,0xd8,0xda,0xdd,0xdf,0xe1,0xe3,0xe5,0xe7,0xe9,0xea,0xec,0xee,0xef,0xf1,0xf2,0xf4,0xf5

,0xf6,0xf7,0xf8,0xf9,0xfa,0xfb,0xfc,0xfd,0xfd,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0xfd

,0xfd,0xfc,0xfb,0xfa,0xf9,0xf8,0xf7,0xf6,0xf5,0xf4,0xf2,0xf1,0xef,0xee,0xec,0xea,0xe9,0xe7,0xe5,0xe3,0xe1,0xde,0xdd,0xda

,0xd8,0xd6,0xd4,0xd1,0xcf,0xcc,0xca,0xc7,0xc5,0xc2,0xbf,0xbc,0xba,0xb7,0xb4,0xb1,0xae,0xab,0xa8,0xa5,0xa2,0x9f,0x9c,0x99

,0x96,0x93,0x90,0x8d,0x,0x86,0x83,0x80,0x80,0x7c,0x79,0x76,0x72,0x6f,0x6c,0x69,0x66,0x63,0x60,0x5d,0x5a,0x57,0x55,0x51

,0x4e,0x4c,0x48,0x45,0x43,0x40,0x3d,0x3a,0x38,0x35,0x33,0x30,0x2e,0x2b,0x29,0x27,0x25,0x22,0x20,0x1e,0x1c,0x1a,0x18,0x16

,0x15,0x13,0x11,0x10,0x0e,0x0d,0x0b,0x0a,0x09,0x08,0x07,0x06,0x05,0x04,0x03,0x02,0x02,0x01,0x00,0x00,0x00,0x00,0x00,0x00

,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x02 ,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0d,0x0e,0x10,0x11,0x13,0x15

,0x16,0x18,0x1a,0x1c,0x1e,0x20,0x22,0x25,0x27,0x29,0x2b,0x2e,0x30,0x33,0x35,0x38,0x3a,0x3d,0x40,0x43,0x45,0x48,0x4c,0x4e

,0x51,0x55,0x57,0x5a,0x5d,0x60,0x63,0x66 ,0x69,0x6c,0x6f,0x72,0x76,0x79,0x7c,0x80 };

void key1(void) { fun++;

if(fun==2)

fun=0x00; }

void key2(void) { tl++;

if(tl==0x1f) th++; }

void judge(void) {

uchar line,row,de1,de2,keym;

P1=0x0f;

keym=P1;

if(keym==0x0f)return;

for(de1=0;de1<200;de1++)

for(de2=0;de2<125;de2++){;}

P1=0x0f;

keym=P1;

if(keym==0x0f)return;

P1=0x0f;

line=P1;

P1=0xf0;

row=P1;

line=line+row; /*存放特征键值*/

if(line==0xde)key1();

if(line==0x7e)key2(); }

void time0_int(void) interrupt 1 //中断服务程序 { TR0=0;

if(fun==1) {

DA0832=tosin[b]; //正弦波 b++;

void main(void)

{

TMOD=0X01; TR0=1; th=0xff;

tl=0xd0;

TH0=th; TL0=tl; ET0=1; EA=1; while(1) }

因篇幅问题不能全部显示,请点此查看更多更全内容