微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > MMA7260的STC12C5410AD单片机程序

MMA7260的STC12C5410AD单片机程序

时间:12-01 来源:互联网 点击:
头文件可以在本站的软件下载区下载 在51hei.com上搜索即可找到

#include "STC12C5410AD.H"

sbit MMA7260sleep=P1^0; //MMA7260休眠与否,0-休眠;1-正常工作

//---------------------------------------

//名称: 延时约1毫秒函数

//-----------------------------------------

void delay1ms()

{

word k;

for(k=0;k<12000;k++);

}

void delayms(word ms)

{

word k,j;

for(j=0;j

for(k=0;k<12000;k++);

}

//---------------------------------------

//名称: 串口数据发送函数

//-----------------------------------------

void uart_putchar(byte ch)

{

TI=0;

if (ch == )

{

SBUF= 0x0d; //outputCR

while(!TI);

return;

}

SBUF=ch;

while(!TI);

}

//---------------------------------------

//名称: 串口数据接收函数

//-----------------------------------------

byte uart_getchar(void)

{

if(RI)

{

RI=0;

return SBUF; //有数据接收到,返回1

}

else

{

return 0; //无数据接收到,返回0

}

}

void putstr(char ch[])

{

byte ptr=0;

while(ch[ptr])

{

uart_putchar((byte)ch[ptr++]);

}

}

//---------------------------------------

//名称: 模数转换函数(8位)

//-----------------------------------------

byte ReadAD(byte ch)

{

ADC_DATA = 0; //清A/D转换结果寄存器

ADC_CONTR = 0xF8|ch; //0000,1000ADCS = 1,启动转换

delay1ms();

do{;}

while((ADC_CONTR&0x10)==0); //0001,0000等待A/D转换结束

ADC_CONTR = ADC_CONTR&0xE7; //1110,0111清ADC_FLAG位,停止A/D转换

return ADC_DATA;

}

/***************************************************

把0--255的数值转化为3位字符串格式

****************************************************/

void Byte2Str3(char zifu[],byte val,byte StartPtr)

{

char characters[11]="0123456789";

byte tv=0;

tv=val/100;

zifu[StartPtr++] = characters[tv];

tv=(val%100)/10;

zifu[StartPtr++] = characters[tv];

tv=val%10;

zifu[StartPtr] = characters[tv];

//zifu[3] = ;

return;

}

//---------------------------------------

//名称: 初始化函数函数

//-----------------------------------------

void init_ad(void)

{

P1M0=0x07; //设置P1.012为高阻输入,以准备AD

P1M1=0x00;

ADC_CONTR = 0xf8; //1000,0000打开A/D转换电源

delay1ms();

ADC_CONTR = ADC_CONTR&0xe0; //1110,0000 清ADC_FLAG,ADC_START位和低3位

}

void init_uart(void) //P3.0,3.1

{

TMOD=0x20; //TH1=256-INT(22118400/32/12/baud+0.5)

TH1=0xfa; //0xfa,9600

TL1=0xfd; //0xff,57600

PCON=0x00;

TR1=1;

SCON=0xd0;

}

void init_dev(void)

{

init_ad();

init_uart();

}

//---------------------------------------

//名称: 主函数

//-----------------------------------------

void main()

{

char txtbuf[17]="ADC Val: ";

byte adbuf;

init_dev();

putstr("MMA7260 starts working!");

MMA7260sleep=1;//MMA7260开始工作

while(1)

{

//ADC

adbuf=ReadAD(0); //X AXIS

Byte2Str3(txtbuf,adbuf,11);

putstr(txtbuf);

adbuf=ReadAD(1); //Y AXIS

Byte2Str3(txtbuf,adbuf,11);

putstr(txtbuf);

adbuf=ReadAD(2); //Z AXIS

Byte2Str3(txtbuf,adbuf,11);

putstr(txtbuf);

delayms(300);

}

}

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top