str91xdth90 sht1x传感器驱动.docx
- 文档编号:10228719
- 上传时间:2023-02-09
- 格式:DOCX
- 页数:76
- 大小:27.58KB
str91xdth90 sht1x传感器驱动.docx
《str91xdth90 sht1x传感器驱动.docx》由会员分享,可在线阅读,更多相关《str91xdth90 sht1x传感器驱动.docx(76页珍藏版)》请在冰豆网上搜索。
str91xdth90sht1x传感器驱动
因为电路没有粘上,所以在这里说明一下,使用的是str911faw42芯片,用了uart0,uart1两个串口。
Arm芯片的没有所谓的通用io口,在接传感器的时候,p2.1、p2.7接到sht1x的data口,p2.0接到它的clk口,注意上拉电阻10k;显示模块与p6.1-p6.5相连,lcd的型号也不太清楚,下面简单说了一下。
其他一些注释请看程序。
Ps:
我的程序使用了zigbee模块,程序的uart1写入的数组是用来设置它的,uart0则是用来调试的。
主函数
#include
#include"91x_lib.h"
#include"LCD_TFT.h"
#include"dth90.h"
#include"dsphzi.h"
#defineDATA1GPIO_ReadBit(GPIO2,GPIO_Pin_7)
GPIO_InitTypeDefGPIO_InitStructure;
UART_InitTypeDefUART_InitStructure;
RTC_TIMEtime;
RTC_DATEdate;
RTC_ALARMalarm;
voidInit_RTC_VIC(void);
voidDelayLong(u16Num);
voidInit_config(void);
voidsensor_send(u8*ss_data);
voidstart_display(void);
voidDisplay_factor(u8sensorflag);
voidDisplay_clear(u8sensorflag1);
voidSensordata(void);
voidAlarmSet(RTC_DATE*date1,RTC_TIME*time1,RTC_ALARM*alarm1,u8alarm1_d,u8alarm1_h,u8alarm1_m,u8alarm1_s);
ssdata_send_defssdata_send={0xfe,0x01,0xa0,0x0c,0x00,0x00,0x00,0xff,0.0,0.0,0x05};
/*帧头命令长度标志地址数据fcs*/
floatsensordata[]={0.1,0.1};//赋值的时候不应使用0,0代表传感器没工作
floatsensor_data=0.0;
typedefstruct
{
floats_temp1;
floats_humi1;
}send_test_def;
typedefunion
{
u8send_test[8];
send_test_defsend_test_part;
}ssdata_test_def;
ssdata_test_defsssendtest;
u16Humidata,Tempdata;
floathumilinear;
u8sensor_flag=1;
u8TongDao[11]={0xFE,0x00,0x12,0x06,0x84,0x04,0x00,0x80,0x00,0x00,0x14};
u8PanId[9]={0xFE,0x00,0x12,0x04,0x83,0x02,0x01,0x00,0x96};
u8Style[8]={0xFE,0x00,0x12,0x03,0x87,0x01,0x02,0x95};
u8ReSet[6]={0xFE,0x00,0x05,0x01,0x00,0x04};
u8Start[5]={0xFE,0x0A,0x18,0x00,0x12};
u8SetInfoReturn[8]={0xFE,0x00,0x06,0x03,0xFF,0xFF,0x01,0x04};
u8NetFound[16]={0xFE,0x0A,0x02,0x0B,0x7c,0x02,0x45,0x42,0x4C,0x4C,0x58,0x57,0x00,0x00,0x00,0x70};
/***57584c4c4245027a***/
u8test[]={0xff,0xff};
u8test1[]={0xee,0xee};
u8count,testcheck,error0=0;
u16testdata[]={0x00,0x01};
u16testdata1[]={0x00,0x01};
u8j;
intmain()
{
SCU_MCLKSourceConfig(SCU_MCLK_OSC);//设定主时钟
Init_config();
//传感器上电之后,大延时
LCD_Init();
dsp_single_colour(0x00,0x00);
DelayLong(10);
start_display();
//DelayLong(100);
sensor_send(TongDao);
DelayLong(10);
sensor_send(PanId);
DelayLong(10);
sensor_send(Style);
DelayLong(10);
sensor_send(ReSet);
DelayLong(10);//这个延时必不可少
sensor_send(Start);
DelayLong(10);
sensor_send(SetInfoReturn);
DelayLong(30);
sensor_send(NetFound);
DelayLong(10);
Init_RTC_VIC();
while
(1)
{
if(sensor_flag)
{
Sensordata();
sensordata[0]=(float)(0.01*Tempdata-39.63);//数组下标0为温度
humilinear=(float)(0.0405*Humidata-4.0-0.0000028*Humidata*Humidata);
sensordata[1]=(float)((sensordata[0]-25.0)*(0.01+0.00008*Humidata)+humilinear);//数组下标1为湿度
if(sensordata[1]>100)sensordata[1]=99.9;
if(sensordata[1]<0.1)sensordata[1]=0.1;
//LCD_Line(0,112,127,112,0xff,0xff);
ssdata_send.send_data_part.s_temp=sensordata[0];//将检测到的数据复制到发送数组中
//sssendtest.send_test_part.s_temp1=sensordata[0];
ssdata_send.send_data_part.s_humi=sensordata[1];
//sssendtest.send_test_part.s_humi1=sensordata[1];
/*for(j=0;j<8;j++)//显示
{
UART_SendData(UART0,sssendtest.send_test[j]);
while(UART_GetFlagStatus(UART0,UART_FLAG_TxFIFOEmpty)==RESET);
}*/
/*codeisusedtodisplay*/
Display_clear(0);
Display_factor(0);
Display_clear
(1);
Display_factor
(1);
sensor_send(ssdata_send.send_all);
//LCD_Line(0,112,127,112,0xff,0xff);
sensor_flag=0;
}
}
}
/**********************************************/
voidsensor_send(u8*ss_data)
{u8i;
for(i=0;i { UART_SendData(UART0,ss_data[i]); while(UART_GetFlagStatus(UART0,UART_FLAG_TxFIFOEmpty)==RESET); } for(i=0;i { UART_SendData(UART1,ss_data[i]); while(UART_GetFlagStatus(UART1,UART_FLAG_TxFIFOEmpty)==RESET); } } /**********************************************/ /*************************************************************/ voidDelayLong(u16Num) { u16i,j; for(i=0;i for(j=0;j<65535;j++); } /************************************************************/ /************************************************************/ voidInit_config(void) { SCU_APBPeriphClockConfig(__UART0,ENABLE);//UART0时钟使能 SCU_APBPeriphClockConfig(__UART1,ENABLE);//UART0时钟使能 SCU_APBPeriphClockConfig(__GPIO2,ENABLE);//使能GPIO2时钟 SCU_APBPeriphClockConfig(__GPIO3,ENABLE);//使能GPIO3时钟 SCU_APBPeriphClockConfig(__GPIO6,ENABLE);//使能GPIO6时钟 GPIO_DeInit(GPIO2); GPIO_StructInit(&GPIO_InitStructure); GPIO_InitStructure.GPIO_Direction=GPIO_PinOutput;//配置为: 输出 GPIO_InitStructure.GPIO_Pin=GPIO_Pin_0|GPIO_Pin_1; GPIO_InitStructure.GPIO_Type=GPIO_Type_OpenCollector;//输出类型为: 开路这里可以注意一下 GPIO_InitStructure.GPIO_Alternate=GPIO_OutputAlt1;//引脚功能: 通用功能输出 GPIO_Init(GPIO2,&GPIO_InitStructure); GPIO_StructInit(&GPIO_InitStructure); GPIO_InitStructure.GPIO_Direction=GPIO_PinInput;//配置为: 输入 GPIO_InitStructure.GPIO_Pin=GPIO_Pin_7; GPIO_InitStructure.GPIO_Type=GPIO_Type_PushPull;//输出类型为: 推挽 GPIO_Init(GPIO2,&GPIO_InitStructure); GPIO_DeInit(GPIO3); //GonfigureUART0_RxpinGPIO3.0 //GonfigureUART1_RxpinGPIO3.2 GPIO_StructInit(&GPIO_InitStructure); GPIO_InitStructure.GPIO_Direction=GPIO_PinInput; GPIO_InitStructure.GPIO_Pin=GPIO_Pin_0|GPIO_Pin_2; GPIO_InitStructure.GPIO_Type=GPIO_Type_PushPull; GPIO_InitStructure.GPIO_IPConnected=GPIO_IPConnected_Enable; GPIO_InitStructure.GPIO_Alternate=GPIO_InputAlt1; GPIO_Init(GPIO3,&GPIO_InitStructure); //GonfigureUART0_TxpinGPIO3.1 //GonfigureUART1_TxpinGPIO3.3 GPIO_StructInit(&GPIO_InitStructure); GPIO_InitStructure.GPIO_Direction=GPIO_PinInput; GPIO_InitStructure.GPIO_Pin=GPIO_Pin_1|GPIO_Pin_3; GPIO_InitStructure.GPIO_Type=GPIO_Type_PushPull; GPIO_InitStructure.GPIO_Alternate=GPIO_OutputAlt2; GPIO_Init(GPIO3,&GPIO_InitStructure); //GonfigureUART0 UART_DeInit(UART0); UART_InitStructure.UART_WordLength=UART_WordLength_8D;//数据宽度8bit UART_InitStructure.UART_StopBits=UART_StopBits_1;//停止位1bit UART_InitStructure.UART_Parity=UART_Parity_No;//无奇偶校验 UART_InitStructure.UART_BaudRate=9600;//波特率9600 UART_InitStructure.UART_Mode=UART_Mode_Tx_Rx;//开发送和接收 UART_InitStructure.UART_FIFO=UART_FIFO_Disable;//收发FIFO关闭 UART_Init(UART0,&UART_InitStructure); UART_Cmd(UART0,ENABLE);//使能串口0 //GonfigureUART1 UART_DeInit(UART1); UART_InitStructure.UART_WordLength=UART_WordLength_8D;//数据宽度8bit UART_InitStructure.UART_StopBits=UART_StopBits_1;//停止位1bit UART_InitStructure.UART_Parity=UART_Parity_No;//无奇偶校验 UART_InitStructure.UART_BaudRate=38400;//波特率38400 UART_InitStructure.UART_Mode=UART_Mode_Tx_Rx;//开发送和接收 UART_InitStructure.UART_FIFO=UART_FIFO_Disable;//收发FIFO关闭 UART_Init(UART1,&UART_InitStructure); UART_Cmd(UART1,ENABLE);//使能串口1 GPIO_DeInit(GPIO6); GPIO_StructInit(&GPIO_InitStructure); GPIO_InitStructure.GPIO_Direction=GPIO_PinOutput;//配置为: 输出 GPIO_InitStructure.GPIO_Pin=GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5; GPIO_InitStructure.GPIO_Type=GPIO_Type_PushPull;//输出类型为: 推挽 GPIO_InitStructure.GPIO_Alternate=GPIO_OutputAlt1;//引脚功能: 通用功能输出 GPIO_Init(GPIO6,&GPIO_InitStructure); } voidInit_RTC_VIC(void) { SCU_APBPeriphClockConfig(__RTC,ENABLE);/*enableRTCclock*/ SCU_APBPeriphReset(__RTC,DISABLE);/*RTCoutofRESETstate*/ SCU_AHBPeriphClockConfig(__VIC,ENABLE);/*enableVIC*/ SCU_AHBPeriphReset(__VIC,DISABLE);/*VICoutofRESETstate*/ VIC_DeInit(); /*configuredate×tructures*/ date.day=1;/*setday*/ date.weekday=4;/*setweekday*/ date.month=9;/*setmonth*/ date.year=11;/*setyear*/ date.century=20;/*setcentury*/ time.hours=9;/*sethours*/ time.minutes=0;/*setminutes*/ time.seconds=0;/*setseconds*/ time.milliseconds=0;/*setmilliseconds*/ /*settime&date*/ RTC_SetDate(date);/*setdateinRTC*/ RTC_SetTime(time);/*settimeinRTCregisters*/ alarm.day=1;/*setalarmday*/ alarm.hours=9;/*setalarmhours*/ alarm.minutes=0;/*setalarmminutes*/ alarm.seconds=10;/*setalarmseconds*/ /*setalarm*/ RTC_SetAlarm(alarm); RTC_ClearFlag(RTC_FLAG_Alarm);/*clearalarmflag*/ RTC_AlarmCmd(ENABLE);/*enablealarm*/ /*EnableRTCalarminterrupt*/ RTC_ITConfig(RTC_IT_Alarm,ENABLE); /*ConfigureandenableRTCinterruptinVIC*/ VIC_Config(RTC_ITLine,VIC_IRQ,0); VIC_ITCmd(RTC_ITLine,ENABLE); } voidstart_display(void) { LCD_Word(24,10,shi,16,16,0xff,0xff); LCD_Word(44,10,shi1,16,16,0xff,0xff); LCD_Word(64,10,shu,16,16,0xff,0xff); LCD_Word(84,10,ju,16,16,0xff,0xff); LCD_Word(8,52,wen,16,16,0xff,0xff); LCD_Word(28,52,du,16,16,0xff,0xff); Display_ASCII8X16(44,52,": ",0xff,0xff); LCD_Word(112,52,du_dwei,16,16,0xff,0xff); LCD_Word(8,72,shi2,16,16,0xff,0xff); LCD_Word(28,72,du,16,16,0xff,0xff); Display_ASCII8X16(44,72,": ",0xff,0xff); Display_ASCII8X16(120,72,"%",0xff,0xff); } voidDisplay_factor(u8sensorflag) { u8Value[7];//整数部分6位+小数部分1位 inttemp_int; floattemp_float; if(sensorflag==0) { if(sensordata[sensorflag]<0.0) { Value[0]='-'; sensordata[sensorflag]=-sensordata[sensorflag]; } else Value[0]='+'; } else Value[0]=''; temp_int=(int)sensordata[sensorflag];//得到了整数部分 temp_float=sensordata[sensorflag]-temp_int;//小数部分 sensor_data=(float)((float)temp_int+temp_float); //Value[1]=temp_int/100+0x30; Value[1]=temp_int/10+0x30;//十位 Value[2]=temp_int%10+0x30;//个位 Value[3]='.';//小数点 Value[4]=((int)(temp_float*10))%10+0x30;//0.1位 Value[5]=0;//字符串结束标志 Display_ASCII8X16(52,20*sensorflag+52,Value,0xff,0xff); } voidD
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- str91x dth90 sht1x传感器驱动 sht1x 传感器 驱动
![提示](https://static.bdocx.com/images/bang_tan.gif)