这是beep.c代码
#include "beep.h"
void BEEP_Init(void)
{
P2DIR |= 0x01; //0000 0001
BEEP=0;//默认不响
}
这是main.c代码
unsigned char ch1[]="Temp:";
unsigned char ch2[]=" RH:";
unsigned char Temp[5];//初始值
unsigned char Rh[5];//初始值
unsigned int TempS;//温度
unsigned int HumiS;//湿度
//读温湿度指令
cmd[0]=0x01;//地址
cmd[1]=0x03;//03
cmd[2]=0x02;//02
cmd[3]=0x00;//00
cmd[4]=0x00;//00
cmd[5]=0x02;//02
cmd[6]=0xC5;//CRCH C5
cmd[7]=0xB3;//CRCL B3
LED_Init(); //调用初始化函数
BEEP_Init();
InitUart();//波特率9600
OLED_Init();
OLED_Fill(0xff); //屏全亮
delay_ms(2000);
OLED_Fill(0x00); //屏全灭
delay_ms(20);
OLED_Clear();
OLED_PutString_8X16(20,2,ch1);
OLED_PutString_8X16(20,4,ch2);
delay_ms(400);
U0CSR &= ~0x40; //禁止接收
Uart_Send_String(cmd,8); //发送已记录的字符串。
delay_ms(4);
U0CSR |= 0x40; //允许接收
while(1)
{
if(RXTXflag == 1) //发送状态
{
/****Rxdata[3] Rxdata[4]保存的温度******/
/*********Rxdata[5] Rxdata[6]保存的湿度***********/
TempS=Rxdata[3]*256+(Rxdata[4]>>4)*16+(Rxdata[4] & 0x0F);//总温度
HumiS=Rxdata[5]*256+(Rxdata[6]>>4)*16+(Rxdata[6] & 0x0F);//总湿度
//TempS=TempS*2;
//TempS=685;
//转换温度
TempS=TempS-400;
//TempS=251;
Temp[0]=TempS/100+48;//十位
TempS=TempS%100;
Temp[1]=TempS/10+48;//个位
Temp[2]='.';//小数点
Temp[3]=TempS%10+0x30;//十分位
Temp[4]='\0';
//转换湿度
Rh[0]=HumiS/100+48;//十位
HumiS=HumiS%100;
Rh[1]=HumiS/10+48;//个位
Rh[2]='.';//小数点
Rh[3]=(unsigned char)HumiS%10+0x30;//十分位
Rh[4]='\0';
//OLED_Clear();
//delay_ms(1);
//OLED_PutString_8X16(20,2,ch1);
//OLED_PutString_8X16(20,4,ch2);
OLED_PutString_8X16(70,2,Temp);
OLED_PutString_8X16(70,4,Rh); //4
delay_ms(500);
U0CSR &= ~0x40; //禁止接收
Uart_Send_String(cmd,8); //发送已记录的字符串。
U0CSR |= 0x40; //允许接收
RXTXflag = 0; // 恢复到接收状态
datanumber = 0; //指针归0
}
}
}
/****************************************************************
串口接收一个字符: 一旦有数据从串口传至CC2530, 则进入中断,将接收到的数据赋值给变量temp.
****************************************************************/
#pragma vector = URX0_VECTOR
__interrupt void UART0_ISR(void)
{
URX0IF = 0; // 清中断标志
temp = U0DBUF;
if((datanumber<9)) //最多能接收9个字符
{
Rxdata[datanumber] = temp;
datanumber++;
}
if(datanumber>=9)
{
RXTXflag = 1; //进入发送状态
// datanumber=0;
}
}
比如温度高于28度亮红灯,温度低于28度亮蓝灯这种