额温枪测温结果,加装无线数据传输功能,串口无线模块对码不做详解,我用的是433M的汇成hc-12无线模块,解析额温枪电路24C02的iic接口,每次测温数据写入存储过程解析,每条存储过程iic-SCL有76次时钟跳变,包含起始位+数据位+应答位,程序考虑电池功耗有低功耗设计要求(测试可忽略),详见程序;欢迎评测!!
制作出来的实物图如下:
单片机源程序如下:
- #include "sys.h"
- #include "usart.h"
- #include "systick.h"
- #include "exti.h"
- #include "time.h"
- #include "led.h"
- #include "wkup.h"
- u8 data_ok,n;
- u32 AT24cxx_data,AT24cxx_add;
- int main(void)
- {
- u16 AT_H,AT_L;
- NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //中断优先级分组 分2组
- USART1_Init(4800);
- SysTick_Init(72);
- PW_EXTI_Init(); //主控外干预休眠引脚初始化
- LED_Init(); //工作指示灯
- Enter_Standby_Mode(); //主控可被唤醒配置
- led2=0;
- SLEEP_SET=0;
- delay_ms(40);
- SLEEP_SET=1;
- delay_ms(90);
- printf("系统启动!\n");//输出提示信息
- AT24xx_EXTI_Init(); //存储器解析端口初始化
-
- while(1)
- {
- if(data_ok)
- {
- data_ok=0;
- TIM_Cmd(TIM4,DISABLE);
- if(n==67)
- {
- // printf("AT24cxx_data= %x %x %u\r\n",(u16)AT24cxx_data,AT24cxx_add,n);//输出提示信息
- AT_H=(u16)AT24cxx_data<<8;
- AT_L=(u16)AT24cxx_data>>8;
- AT_H=AT_H|AT_L;
- if(AT_H%10>5)
- AT_H=AT_H/10+1;
- else
- AT_H=AT_H/10;
- AT_L=AT_H%10;
- AT_H=AT_H/10;
- printf("Body_temperature:%u.%u",AT_H,AT_L);
- }
- AT24cxx_data=0;
- AT24cxx_add=0;
- n=0;
- }
- }
- }
复制代码
所有资料51hei提供下载:
额温枪解析.7z
(208.64 KB, 下载次数: 40)
|