




已阅读5页,还剩41页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
因为电路没有粘上,所以在这里说明一下,使用的是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#define DATA1 GPIO_ReadBit(GPIO2,GPIO_Pin_7)GPIO_InitTypeDef GPIO_InitStructure;UART_InitTypeDef UART_InitStructure;RTC_TIME time;RTC_DATE date;RTC_ALARM alarm;void Init_RTC_VIC(void);void DelayLong(u16 Num);void Init_config(void);void sensor_send(u8 *ss_data);void start_display(void);void Display_factor(u8 sensorflag);void Display_clear(u8 sensorflag1);void Sensordata(void); void AlarmSet(RTC_DATE *date1,RTC_TIME *time1,RTC_ALARM *alarm1,u8 alarm1_d,u8 alarm1_h,u8 alarm1_m,u8 alarm1_s );ssdata_send_def ssdata_send=0xfe,0x01,0xa0,0x0c,0x00,0x00,0x00,0xff,0.0,0.0,0x05;/* 帧头 命令 长度 标志 地址 数据 fcs*/float sensordata=0.1,0.1;/赋值的时候不应使用0,0代表传感器没工作float sensor_data=0.0;typedef struct float s_temp1; float s_humi1; send_test_def;typedef unionu8 send_test8;send_test_def send_test_part;ssdata_test_def;ssdata_test_def sssendtest;u16 Humidata,Tempdata;float humilinear;u8 sensor_flag=1;u8TongDao11=0xFE,0x00,0x12,0x06,0x84,0x04,0x00,0x80,0x00,0x00,0x14;u8PanId9=0xFE,0x00,0x12,0x04,0x83,0x02,0x01,0x00,0x96;u8Style8=0xFE,0x00,0x12,0x03,0x87,0x01,0x02,0x95; u8ReSet6=0xFE,0x00,0x05,0x01,0x00,0x04;u8Start5=0xFE,0x0A,0x18,0x00,0x12;u8SetInfoReturn8=0xFE,0x00,0x06,0x03,0xFF,0xFF,0x01,0x04;u8NetFound16=0xFE,0x0A,0x02,0x0B,0x7c,0x02,0x45,0x42,0x4C,0x4C,0x58,0x57,0x00,0x00,0x00,0x70;/*57 58 4c 4c 42 45 02 7a*/u8 test=0xff,0xff;u8 test1=0xee,0xee;u8 count,testcheck,error0=0;u16 testdata=0x00,0x01;u16 testdata1=0x00,0x01;u8 j;int main()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();sensordata0=(float)(0.01*Tempdata-39.63);/数组下标0为温度humilinear=(float)(0.0405*Humidata-4.0-0.0000028*Humidata*Humidata);sensordata1=(float)(sensordata0-25.0)*(0.01+0.00008*Humidata)+humilinear);/数组下标1为湿度if(sensordata1100) sensordata1=99.9;if(sensordata10.1) sensordata1=0.1;/LCD_Line(0,112,127,112,0xff, 0xff);ssdata_send.send_data_part.s_temp=sensordata0; /将检测到的数据复制到发送数组中/sssendtest.send_test_part.s_temp1=sensordata0;ssdata_send.send_data_part.s_humi=sensordata1;/sssendtest.send_test_part.s_humi1=sensordata1;/*for(j=0;j8;j+)/显示UART_SendData(UART0,sssendtest.send_testj);while(UART_GetFlagStatus(UART0, UART_FLAG_TxFIFOEmpty)= RESET); */*code is used to display*/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; /*/void sensor_send(u8 *ss_data) u8 i; for(i=0;iss_data3+5;i+)/显示UART_SendData(UART0,ss_datai);while(UART_GetFlagStatus(UART0, UART_FLAG_TxFIFOEmpty)= RESET); for(i=0;iss_data3+5;i+)/发送UART_SendData(UART1,ss_datai);while(UART_GetFlagStatus(UART1, UART_FLAG_TxFIFOEmpty)= RESET); /*/*/void DelayLong(u16 Num)u16 i,j;for(i = 0;i Num;i+)for(j = 0;j 65535;j+);/*/*/void Init_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);/Gonfigure UART0_Rx pin GPIO3.0/Gonfigure UART1_Rx pin GPIO3.2GPIO_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);/Gonfigure UART0_Tx pin GPIO3.1/Gonfigure UART1_Tx pin GPIO3.3GPIO_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);/Gonfigure UART0UART_DeInit(UART0);UART_InitStructure.UART_WordLength = UART_WordLength_8D;/数据宽度 8bitUART_InitStructure.UART_StopBits = UART_StopBits_1;/停止位 1bitUART_InitStructure.UART_Parity = UART_Parity_No ;/无奇偶校验UART_InitStructure.UART_BaudRate = 9600;/波特率 9600UART_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/Gonfigure UART1 UART_DeInit(UART1);UART_InitStructure.UART_WordLength = UART_WordLength_8D;/数据宽度 8bitUART_InitStructure.UART_StopBits = UART_StopBits_1;/停止位 1bitUART_InitStructure.UART_Parity = UART_Parity_No ;/无奇偶校验UART_InitStructure.UART_BaudRate = 38400;/波特率 38400UART_InitStructure.UART_Mode = UART_Mode_Tx_Rx;/开发送和接收UART_InitStructure.UART_FIFO = UART_FIFO_Disable;/收发FIFO关闭UART_Init(UART1, &UART_InitStructure);UART_Cmd(UART1, ENABLE);/使能串口1GPIO_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); void Init_RTC_VIC(void) SCU_APBPeriphClockConfig(_RTC,ENABLE); /*enable RTC clock*/ SCU_APBPeriphReset(_RTC,DISABLE); /*RTC out of RESET state*/ SCU_AHBPeriphClockConfig(_VIC,ENABLE); /*enable VIC*/ SCU_AHBPeriphReset(_VIC,DISABLE); /*VIC out of RESET state*/VIC_DeInit(); /*configure date & time structures */ date.day = 1 ; /* set day */ date.weekday = 4; /* set weekday */ date.month = 9; /* set month */ date.year = 11; /* set year */ date.century = 20; /* set century */ time.hours = 9; /* set hours */ time.minutes = 0; /* set minutes */ time.seconds = 0; /* set seconds */ liseconds = 0; /* set milliseconds */ /*set time & date*/ RTC_SetDate(date); /* set date in RTC */ RTC_SetTime(time); /* set time in RTC registers */ alarm.day = 1; /* set alarm day */ alarm.hours = 9; /* set alarm hours */ alarm.minutes =0; /* set alarm minutes */ alarm.seconds =10; /* set alarm seconds */ /*set alarm*/ RTC_SetAlarm(alarm); RTC_ClearFlag(RTC_FLAG_Alarm); /* clear alarm flag*/ RTC_AlarmCmd(ENABLE); /* enable alarm */ /*Enable RTC alarm interrupt*/ RTC_ITConfig(RTC_IT_Alarm, ENABLE); /*Configure and enable RTC interrupt in VIC*/ VIC_Config(RTC_ITLine, VIC_IRQ, 0); VIC_ITCmd(RTC_ITLine, ENABLE); void start_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);void Display_factor(u8 sensorflag)u8 Value7; /整数部分6位+小数部分1位int temp_int;float temp_float;if(sensorflag=0) if(sensordatasensorflag0.0) Value0=-; sensordatasensorflag=-sensordatasensorflag; else Value0=+;elseValue0= ;temp_int= (int)sensordatasensorflag;/得到了整数部分temp_float=sensordatasensorflag-temp_int;/小数部分sensor_data=(float)(float)temp_int+temp_float);/Value1=temp_int/100+0x30;Value1=temp_int/10+0x30;/十位Value2=temp_int%10+0x30;/个位Value3=.;/小数点Value4=(int)(temp_float*10)%10+0x30;/0.1位Value5=0;/字符串结束标志Display_ASCII8X16(52,20*sensorflag+52,Value,0xff,0xff);void Display_clear(u8 sensorflag1) Display_ASCII8X16(52,20*sensorflag1+52,0x00,0x00);void Sensordata(void)/*temp*/s_connectionreset();error0=s_write_byte(MEASURE_TEMP);if(error0=0) for(count=0;count2;count+)UART_SendData(UART0,testcount);while(UART_GetFlagStatus(UART0, UART_FLAG_TxFIFOEmpty)= RESET);for(count=0;count1665535;count+) if(DATA=0) break;/wait until sensor has finished the measurement(about 2s) if(DATA) error0+=1; / or timeout (2 sec.) is reached if(error0!=0) s_connectionreset(); for(count=0;count2;count+)UART_SendData(UART0,test1count);while(UART_GetFlagStatus(UART0, UART_FLAG_TxFIFOEmpty)= RESET); else testdata0=s_read_byte(ACK); /read the first byte (MSB) testdata1=s_read_byte(ACK); /read the second byte (LSB)testcheck=s_read_byte(noACK);for(count=0;count2;count+)UART_SendData(UART0,testdatacount);while(UART_GetFlagStatus(UART0, UART_FLAG_TxFIFOEmpty)= RESET); Tempdata=(testdata08)+testdata1;/*humi*/s_connectionreset();error0=s_write_byte(MEASURE_HUMI);if(error0=0) for(count=0;count2;count+)UART_SendData(UART0,testcount);while(UART_GetFlagStatus(UART0, UART_FLAG_TxFIFOEmpty)= RESET); for(count=0;count1665535;count+) if(DATA=0) break;/wait until sensor has finished the measurement(about 2s) if(DATA) error0+=1; / or timeout (2 sec.) is reached if(error0!=0) s_connectionreset(); for(count=0;count2;count+)UART_SendData(UART0,test1count);while(UART_GetFlagStatus(UART0, UART_FLAG_TxFIFOEmpty)= RESET); else testdata0=s_read_byte(ACK); /read the first byte (MSB) testdata1=s_read_byte(ACK); /read the second byte (LSB)testcheck=s_read_byte(noACK);for(count=0;count2;count+)UART_SendData(UART0,testdatacount);while(UART_GetFlagStatus(UART0, UART_FLAG_TxFIFOEmpty)= RESET);Humidata=(testdata0day=(date1-day4)*10+(date1-day&0x0f)+alarm1_d;alarm1-hours=(time1-hours4)*10+(time1-hours&0x0f)+alarm1_h;alarm1-minutes=(time1-minutes4)*10+(time1-minutes&0x0f)+alarm1_m;alarm1-seconds=(time1-seconds4)*10+(time1-seconds&0x0f)+alarm1_s;/*这里主要是用来设置报警时间不要超过阈值*/if(alarm1-seconds59) alarm1-seconds=alarm1-seconds-60; alarm1-minutes=alarm1-minutes+1;if(alarm1-minutes59) alarm1-minutes=alarm1-minutes-60; alarm1-hours=alarm1-hours+1;if(alarm1-hours23) alarm1-hours=alarm1-hours-24; alarm1-day=alarm1-day+1;if(alarm1-day31) alarm1-day=alarm1-day-31;Lcd的驱动函数,使用的是串行口,128*160de 16位真彩屏#include #include 91x_lib.h#include 91x_it.h#include 91x_conf.h#include LCD_TFT.h#define uchar unsigned char#define uint unsigned int#define RESET_L GPIO_WriteBit(GPIO6,GPIO_Pin_1,Bit_RESET)#define RESET_H GPIO_WriteBit(GPIO6,GPIO_Pin_1,Bit_SET)#define RS_L GPIO_WriteBit(GPIO6,GPIO_Pin_2,Bit_RESET)#define RS_H GPIO_WriteBit(GPIO6,GPIO_Pin_2,Bit_SET)#define SDA_L GPIO_WriteBit(GPIO6,GPIO_Pin_3,Bit_RESET)#define SDA_H GPIO_WriteBit(GPIO6,GPIO_Pin_3,Bit_SET)#define SCL_L GPIO_WriteBit(GPIO6,GPIO_Pin_
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- (正式版)DB2327∕T 050-2022 《赤芍人工种植技术规程》
- 2025年护理心理学题库及答案带章节
- 2025年老年日常护理知识试题库及答案
- 汇兑业务课件
- 求职培训知识技能课件
- 《三角形的内角和》教学设计-四年级数学上册青岛版(五四学制)
- 人教版七年级下册历史说课稿(1-22课54份)
- 2024秋八年级地理上册 第2章 第二节《气候基本特征》说课稿2 (新版)商务星球版
- 疫情知识培训相关流程课件
- 氢气的知识课件
- 招聘渠道分析评估表
- 2025年注册安全工程师考试 安全生产法律法规与标准冲刺押题卷
- 服装色彩构成课件
- 化工仪表检修与维护课件
- 2025年华为软件开发工程师招聘面试题库及答案解析
- 程序化广告课件
- 电工基础课件
- 真菌生物膜毒力因子-洞察及研究
- 副校长在任职宣布会上的表态发言材料
- 同学互助基金管理办法
- 2025年建设工程质量检测行业现状分析及未来五年运行态势
评论
0/150
提交评论