基于msp430的数据传输程序Word下载.docx
《基于msp430的数据传输程序Word下载.docx》由会员分享,可在线阅读,更多相关《基于msp430的数据传输程序Word下载.docx(16页珍藏版)》请在冰豆网上搜索。
j--);
}
voiddelay_10us()
{
unsignedchari;
for(i=0;
i<
40;
i++);
voidwrite_com(unsignedcharcom)
{//写液晶命令函数
P3DIR=0x03;
P3OUT&
=~BIT0;
//rs=0
=~BIT1;
//lcden=0
P2DIR=0xff;
P2OUT=com;
//P0=com
delay(10);
P3OUT|=BIT1;
//lcden=1
//lcden=0
voidwrite_date(unsignedchardate)
{//写液晶数据函数
P3OUT|=BIT0;
//rs=1
P2OUT=date;
//P0=date
//lcden=0
voidinit_1602()
{//初始化函数
unsignedcharnum;
//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);
num++)
write_date(table1[num]);
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)
write_com(0x80+0x40+add);
voidint_clk()
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,则继续循环等待
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)
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确认
8;
i++)
{
FLAG=2;
while((!
(P1IN&
BIT7))&
&
FLAG++);
//1bit是否结束
delay_10us();
temp=0;
//26us~28us表示为0
if((P1IN&
BIT7))
temp=1;
//超过28us依然为高电平表示为1
while((P1IN&
BIT7)&
if(FLAG==1)
break;
//FLAG溢出超时则跳出for循环
//判断数据位是0还是1
//如果高电平高过预定0高电平值则数据位为1
comdata<
<
=1;
comdata|=temp;
}
voidinit_DHT11()
P1DIR|=BIT7;
P1OUT|=BIT7;
delay(400);
voidRH(void)//-----湿温度读取子程序------------
P1OUT&
=~BIT7;
delay(300);
//主机拉低高于18ms
//总线由上拉电阻拉高主机延时20us
P1DIR&
//主机设为输入判断从机响应信号
if(!
BIT7))//判断从机是否有低电平响应信号如不响应则跳出,响应则向下运行
FLAG=2;
while((!
//判断从机是否发出80us的低电平响应信号是否结束
while((P1IN&
//判断从机是否发出80us的高电平,如发出则进入数据接收状态
COM();
//数据接收状态
RH_data_H_temp=comdata;
//湿度整数8位
RH_data_L_temp=comdata;
//湿度小数8位
T_data_H_temp=comdata;
//温度整数8位
T_data_L_temp=comdata;
//温度小数8位
checkdata_temp=comdata;
//校验位
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&
while
(1)
RH();
delay(1500);
write_shuzi(2,RH_data_H);
delay(50);
write_shuzi(11,T_data_H);
if((P4IN&
BIT0)==0)
{a=0;
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);
sent_byte(ADD);
//data=U0RXBUF;
//write_shuzi1(8,data);
接收:
unsignedintm1,m2,data,data1,data2,data3,add;
Add:
"
voiddelay1ms()
unsignedintk;
for(k=0;
k<
1333;
k++)
voiddelayms(unsignedintz)
unsignedinth;
for(h=z;
h>
h--)
delay1ms();
P6DIR=0x03;
P6OUT&
delay(15);
P6OUT|=BIT1;
P6OUT|=BIT0;
P4DIR=0x03;
P4OUT&
delay(15);
//波特率2400
voidMusic(z)//语音播放函数
P3DIR|=BIT2;
P3OUT|=BIT2;
//RST=1;
delayms
(2);
=~BIT2;
//RST=0;
while(z>
0)
P3DIR|=BIT1;
//SCK=1;
delayms
(1);
//SCK=0;
z--;
}
voidinit_yuyin()
P3DIR|=BIT0;
//NOW=1;
voidadd_yuyin(unsignedchara)
Music(a);
delayms(50);
P3DIR&
while((P3IN&
BIT0)==0);
//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)
shi=shidu/10;
ge=shidu%10;
add_yuyin(24);
add_yuyin(21);
init_yuyin();
write_shuzi1(13,1);
data=U0RXBUF;
//读取接收到的数据
URXIFG0)==0);
add=data&
0x03;
switch(add)
case0:
data1=((data>
>
2)&
0x3f);
write_shuzi(2,data1);
m1++;
if(m1==100)
yuyin_shidu(data1);
m1=0;
case1:
data2=((data>
write_shuzi(11,data2);
m2++;
if(m2==100)
yuyin_wendu(data2);
m2=0;
case2:
data3=((data>
write_shuzi1(6,data3);