基于msp430的数据传输程序.docx

上传人:b****5 文档编号:8521415 上传时间:2023-01-31 格式:DOCX 页数:16 大小:18.12KB
下载 相关 举报
基于msp430的数据传输程序.docx_第1页
第1页 / 共16页
基于msp430的数据传输程序.docx_第2页
第2页 / 共16页
基于msp430的数据传输程序.docx_第3页
第3页 / 共16页
基于msp430的数据传输程序.docx_第4页
第4页 / 共16页
基于msp430的数据传输程序.docx_第5页
第5页 / 共16页
点击查看更多>>
下载资源
资源描述

基于msp430的数据传输程序.docx

《基于msp430的数据传输程序.docx》由会员分享,可在线阅读,更多相关《基于msp430的数据传输程序.docx(16页珍藏版)》请在冰豆网上搜索。

基于msp430的数据传输程序.docx

基于msp430的数据传输程序

基于msp430的数据传输程序

 

发送

#include

#include

#include

/***********dht11***************/

unsignedcharFLAG;

unsignedchartemp,TEMP;

unsignedcharT_data_H,T_data_L,RH_data_H,RH_data_L,checkdata;

unsignedcharT_data_H_temp,T_data_L_temp,RH_data_H_temp,RH_data_L_temp,checkdata_temp;

unsignedcharcomdata;

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

//unsignedchara,time;

unsignedcharRH_DATA,TH_DATA,ADD,a,data;

unsignedchartable[]={"H:

%T:

c"};

unsignedchartable1[]={"Light:

add:

01"};

voiddelay(intxms)//i=xms即延时约xms毫秒

{

inti,j;

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

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

}

voiddelay_10us()

{

unsignedchari;

for(i=0;i<40;i++);

}

voidwrite_com(unsignedcharcom)

{//写液晶命令函数

P3DIR=0x03;

P3OUT&=~BIT0;//rs=0

P3OUT&=~BIT1;//lcden=0

P2DIR=0xff;

P2OUT=com;//P0=com

delay(10);

P3OUT|=BIT1;//lcden=1

delay(10);

P3OUT&=~BIT1;//lcden=0

}

voidwrite_date(unsignedchardate)

{//写液晶数据函数

P3DIR=0x03;

P3OUT|=BIT0;//rs=1

P3OUT&=~BIT1;//lcden=0

P2DIR=0xff;

P2OUT=date;//P0=date

delay(10);

P3OUT|=BIT1;//lcden=1

delay(10);

P3OUT&=~BIT1;//lcden=0

}

voidinit_1602()

{//初始化函数

unsignedcharnum;

P3DIR=0x03;

P3OUT&=~BIT1;//lcden=0

P3OUT&=~BIT0;//rs=0

write_com(0x38);//1602液晶初始化

write_com(0x0c);

write_com(0x06);

write_com(0x01);

write_com(0x80);

for(num=0;num<15;num++)//写入液晶固定部分显示

{

write_date(table[num]);

delay(10);

}

write_com(0x80+0x40);

for(num=0;num<15;num++)

{

write_date(table1[num]);

delay(10);

}

}

voidwrite_shuzi(unsignedcharadd,chardate)

{

charshi,ge;

shi=date/10;

ge=date%10;

write_com(0x80+add);

write_date(0x30+shi);

write_date(0x30+ge);

}

voidwrite_shuzi1(unsignedcharadd,chardate)

{

charshi,ge;

shi=date/10;

ge=date%10;

write_com(0x80+0x40+add);

write_date(0x30+shi);

write_date(0x30+ge);

}

voidint_clk()

{

unsignedchari;

BCSCTL1&=~XT2OFF;//打开xt振荡器

BCSCTL2|=SELM1+SELS;//MCLK为8MHZ,SMCLK为1MHZ

do

{

IFG1&=~OFIFG;//清除震荡错误标志

for(i=0;i<100;i++)

_NOP();//延时

}

while((IFG1&OFIFG)!

=0);//如果标志为1,则继续循环等待

IFG1&=~OFIFG;

}

voidint_usart()

{

U0CTL|=SWRST;//复位串口

U0CTL|=CHAR;//8位数据

U0TCTL|=SSEL1;//时钟设置

U0BR0=0x00;

U0BR1=0x0d;

UMCTL0=0x00;//波特率2400

ME1|=UTXE0+URXE0;//使能接收和发送

U0CTL&=~SWRST;//清除串口复位信号

P3SEL|=BIT4;

P3SEL|=BIT5;//使用扩展功能

P3DIR|=BIT4;

}

sent_byte(unsignedchardata)

{

while((IFG1&UTXIFG0)==0);//判断发送缓存区是否结束

U0TXBUF=data;

}

voidint_pwm()

{

P1SEL|=BIT2;//P1.2作为pwm输出

P1DIR|=BIT2;

TACCR0=26;//pwm频率为10k.8000k/800=10k

TACCR1=13;//占空比1:

1

TACCTL1=OUTMOD0+OUTMOD1+OUTMOD2;//输出模式选择

TACTL|=TASSEL1+MC0;

}

voidCOM(void)//数据01确认

{

unsignedchari;

for(i=0;i<8;i++)

{

FLAG=2;

while((!

(P1IN&BIT7))&&FLAG++);//1bit是否结束

delay_10us();

temp=0;//26us~28us表示为0

if((P1IN&BIT7))

temp=1;//超过28us依然为高电平表示为1

FLAG=2;

while((P1IN&BIT7)&&FLAG++);

if(FLAG==1)

break;//FLAG溢出超时则跳出for循环

//判断数据位是0还是1

//如果高电平高过预定0高电平值则数据位为1

comdata<<=1;

comdata|=temp;

}

}

voidinit_DHT11()

{

P1DIR|=BIT7;

P1OUT|=BIT7;

delay(400);

}

voidRH(void)//-----湿温度读取子程序------------

{

P1DIR|=BIT7;

P1OUT&=~BIT7;

delay(300);//主机拉低高于18ms

P1OUT|=BIT7;//总线由上拉电阻拉高主机延时20us

delay_10us();

P1DIR&=~BIT7;//主机设为输入判断从机响应信号

if(!

(P1IN&BIT7))//判断从机是否有低电平响应信号如不响应则跳出,响应则向下运行

{

FLAG=2;

while((!

(P1IN&BIT7))&&FLAG++);//判断从机是否发出80us的低电平响应信号是否结束

FLAG=2;

while((P1IN&BIT7)&&FLAG++);//判断从机是否发出80us的高电平,如发出则进入数据接收状态

COM();//数据接收状态

RH_data_H_temp=comdata;//湿度整数8位

COM();

RH_data_L_temp=comdata;//湿度小数8位

COM();

T_data_H_temp=comdata;//温度整数8位

COM();

T_data_L_temp=comdata;//温度小数8位

COM();

checkdata_temp=comdata;//校验位

P1DIR|=BIT7;

P1OUT|=BIT7;

P1DIR&=~BIT7;

temp=(T_data_H_temp+T_data_L_temp+RH_data_H_temp+RH_data_L_temp);

if(temp==checkdata_temp)//数据校验正确执行

{

RH_data_H=RH_data_H_temp;

RH_data_L=RH_data_L_temp;

T_data_H=T_data_H_temp;

T_data_L=T_data_L_temp;

checkdata=checkdata_temp;

}

}

}

voidmain(void)

{

WDTCTL=WDTPW+WDTHOLD;//关看门狗

int_clk();//初始化时钟

init_1602();

int_usart();

init_DHT11();

int_pwm();

P4DIR&=~BIT0;

while

(1)

{

RH();

delay(1500);

write_shuzi(2,RH_data_H);

delay(50);

write_shuzi(11,T_data_H);

delay(50);

if((P4IN&BIT0)==0)

{a=0;}

if((P4IN&BIT0)==1)

{a=1;}

write_shuzi1(6,a);

RH_DATA=((RH_data_H<<2)|0);//湿度

TH_DATA=((T_data_H<<2)|1);//温度

ADD=((a<<2)|2);//地址

sent_byte(RH_DATA);

delay(1000);

sent_byte(TH_DATA);

delay(1000);

sent_byte(ADD);

delay(1000);

//data=U0RXBUF;

//write_shuzi1(8,data);

}

}

接收:

#include

#include

#include

unsignedintm1,m2,data,data1,data2,data3,add;

unsignedchartable[]={"H:

%T:

c"};

unsignedchartable1[]={"Light:

Add:

"};

/***********dht11***************/

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

voiddelay(intxms)//i=xms即延时约xms毫秒

{

inti,j;

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

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

}

voiddelay1ms()

{

unsignedintk;

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

_NOP();

}

voiddelayms(unsignedintz)

{

unsignedinth;

for(h=z;h>0;h--)

delay1ms();

}

voidwrite_com(unsignedcharcom)

{//写液晶命令函数

P6DIR=0x03;

P6OUT&=~BIT0;//rs=0

P6OUT&=~BIT1;//lcden=0

P2DIR=0xff;

P2OUT=com;//P0=com

delay(15);

P6OUT|=BIT1;//lcden=1

delay(15);

P6OUT&=~BIT1;//lcden=0

}

voidwrite_date(unsignedchardate)

{//写液晶数据函数

P6DIR=0x03;

P6OUT|=BIT0;//rs=1

P6OUT&=~BIT1;//lcden=0

P2DIR=0xff;

P2OUT=date;//P0=date

delay(15);

P6OUT|=BIT1;//lcden=1

delay(15);

P6OUT&=~BIT1;//lcden=0

}

voidinit_1602()

{//初始化函数

unsignedcharnum;

P4DIR=0x03;

P4OUT&=~BIT1;//lcden=0

P4OUT&=~BIT0;//rs=0

write_com(0x38);//1602液晶初始化

write_com(0x0c);

write_com(0x06);

write_com(0x01);

write_com(0x80);

for(num=0;num<15;num++)//写入液晶固定部分显示

{

write_date(table[num]);

delay(15);

}

write_com(0x80+0x40);

for(num=0;num<15;num++)

{

write_date(table1[num]);

delay(15);

}

}

voidwrite_shuzi(unsignedcharadd,chardate)

{

charshi,ge;

shi=date/10;

ge=date%10;

write_com(0x80+add);

write_date(0x30+shi);

write_date(0x30+ge);

}

voidwrite_shuzi1(unsignedcharadd,chardate)

{

charshi,ge;

shi=date/10;

ge=date%10;

write_com(0x80+0x40+add);

write_date(0x30+shi);

write_date(0x30+ge);

}

voidint_clk()

{

unsignedchari;

BCSCTL1&=~XT2OFF;//打开xt振荡器

BCSCTL2|=SELM1+SELS;//MCLK为8MHZ,SMCLK为1MHZ

do

{

IFG1&=~OFIFG;//清除震荡错误标志

for(i=0;i<100;i++)

_NOP();//延时

}

while((IFG1&OFIFG)!

=0);//如果标志为1,则继续循环等待

IFG1&=~OFIFG;

}

voidint_usart()

{

U0CTL|=SWRST;//复位串口

U0CTL|=CHAR;//8位数据

U0TCTL|=SSEL1;//时钟设置

U0BR0=0x00;

U0BR1=0x0d;

UMCTL0=0x00;//波特率2400

ME1|=UTXE0+URXE0;//使能接收和发送

U0CTL&=~SWRST;//清除串口复位信号

P3SEL|=BIT4;

P3SEL|=BIT5;//使用扩展功能

P3DIR|=BIT4;

}

voidMusic(z)//语音播放函数

{

P3DIR|=BIT2;

P3OUT|=BIT2;//RST=1;

delayms

(2);

P3OUT&=~BIT2;//RST=0;

delayms

(2);

while(z>0)

{

P3DIR|=BIT1;

P3OUT|=BIT1;//SCK=1;

delayms

(1);

P3OUT&=~BIT1;//SCK=0;

delayms

(1);

z--;

}

}

voidinit_yuyin()

{

P3DIR|=BIT0;

P3OUT|=BIT0;//NOW=1;

P3DIR|=BIT2;

P3OUT&=~BIT2;//RST=0;

P3DIR|=BIT1;

P3OUT&=~BIT1;//SCK=0;

P3OUT|=BIT2;//RST=1;

delayms

(2);

P3OUT&=~BIT2;//RST=0;

}

voidadd_yuyin(unsignedchara)

{

Music(a);

delayms(50);

P3DIR&=~BIT0;

while((P3IN&BIT0)==0);

delay(1000);

//P6DIR|=BIT3;

}

voidyuyin_wendu(unsignedchartem)

{

unsignedcharge,shi;

shi=tem/10;

ge=tem%10;

add_yuyin(0);

add_yuyin(23);

add_yuyin(shi+1);

add_yuyin(11);

add_yuyin(ge+1);

add_yuyin(20);

}

voidyuyin_shidu(unsignedcharshidu)

{

unsignedcharge,shi;

shi=shidu/10;

ge=shidu%10;

add_yuyin(0);

add_yuyin(24);

add_yuyin(21);

add_yuyin(shi+1);

add_yuyin(11);

add_yuyin(ge+1);

}

voidmain(void)

{

WDTCTL=WDTPW+WDTHOLD;//关看门狗

int_clk();//初始化时钟

init_1602();

int_usart();

init_yuyin();

write_shuzi1(13,1);

while

(1)

{

data=U0RXBUF;//读取接收到的数据

while((IFG1&URXIFG0)==0);

add=data&0x03;

delay(50);

switch(add)

{

case0:

data1=((data>>2)&0x3f);

write_shuzi(2,data1);

m1++;

if(m1==100)

{

yuyin_shidu(data1);

m1=0;

}

break;

case1:

data2=((data>>2)&0x3f);

write_shuzi(11,data2);

m2++;

if(m2==100)

{

yuyin_wendu(data2);

m2=0;

}

break;

case2:

data3=((data>>2)&0x3f);

write_shuzi1(6,data3);

break;

}

}

}

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 初中教育

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1