内容介绍
内容介绍
本期Funpack活动选用模块:
DM164137、7SEG CLICK模块、DS18B20模块和BLE模块
任务要求:
使用DM164137板卡和CLICK模块实现特定功能
设计思路:
使用手机端微信小程序和BLE模块进行数据通信,完成温度传感器参数采集和显示,实现报警温度和采集间隔的设定。
程序流程:
上电:初始化IO、初始化串口、初始化EE、初始化CLICK模块
主循环:读取温度、ble发送任务、ble接收任务、温度或设定显示和温度采集报警任务。
主要代码:
void __interrupt() Int(void)
{
unsigned int temp,cTemp;
static unsigned int cnt;
// interrupt handler
if((PIR3bits.RC1IF == 1)&&(PIE3bits.RC1IE == 1))
{
cTemp = RCREG;
if(cTemp!='\0')
{
buf[writeIndex++] = cTemp;
if(writeIndex>=200)
writeIndex = 0;
}
PIR3bits.RC1IF = 0;
}
if((PIR0bits.TMR0IF == 1)&&(PIE0bits.TMR0IE == 1))
{
PIR0bits.TMR0IF = 0;
if(cnt <500)
cnt++;
else
{
cnt = 0;
times++;
LED4_STATE ^=1;
LED5_STATE ^=1;
LED6_STATE ^=1;
}
}
}
void Init_DS18B20(void)
{
unsigned char presence = 1,cnt = 0;
while(presence&&cnt <15)
{
DQ_LOW() ; //主机拉至低电平
__delay_us(503);
DQ_HIGH() ;
__delay_us(40);
if(DQ == 1)
presence = 1;
else
presence = 0;
__delay_us(430);
//cnt++;
}
}
unsigned char ReadOneChar(void) //主机数据线先从高拉至低电平1us以上,再使数据线升为高电平,从而产生读信号
{
unsigned char i=0; //每个读周期最短的持续时间为60us,各个读周期之间必须有1us以上的高电平恢复期
unsigned char dat=0;
static unsigned char j;
for (i=8;i>0;i--) //一个字节有8位
{
dat>>=1;
DQ_LOW();
NOP();NOP();NOP();NOP();NOP();NOP();
DQ_HIGH();
NOP();NOP();NOP();NOP();NOP();
j = DQ;
if(j==1)
dat|=0x80;
__delay_us(63);
}
return(dat);
}
void WriteOneChar(unsigned char dat)
{
unsigned char i=0,temp; //数据线从高电平拉至低电平,产生写起始信号。15us之内将所需写的位送到数据线上,
for(i=8;i>0;i--) //在15~60us之间对数据线进行采样,如果是高电平就写1,低写0发生。
{
temp=dat&0x01;
DQ_LOW();
NOP();NOP();NOP();NOP();NOP();
if(temp == 1)
DQ_HIGH();
__delay_us(63);
DQ_HIGH();
NOP();NOP();
dat>>=1;
}
}
unsigned int ReadTemperature(void)
{
unsigned char TLV;
unsigned char THV,ge,shi,TZ,TX,shifen,baifen,qianfen,wanfen;
unsigned int temperature,value,wd;
GIE = 0;
DQ_HIGH();
Init_DS18B20();
WriteOneChar(0xcc);
WriteOneChar(0x44);
__delay_ms(50);
Init_DS18B20();
WriteOneChar(0xcc);
WriteOneChar(0xbe);
TLV=ReadOneChar();
THV=ReadOneChar();
DQ_HIGH();
GIE = 1;
TZ = ((TLV>>4)|(THV<< 4))&0X3f; //温度整数部分
TX = TLV << 4; //温度小数部分
if (TZ > 100) TZ /= 100; //不显示百位
ge = TZ % 10; //整数部分个位
shi = TZ / 10; //整数十位
wd = 0;
if (TX & 0x80) wd = wd + 5000;
if (TX & 0x40) wd = wd + 2500;
if (TX & 0x20) wd = wd + 1250;
if (TX & 0x10) wd = wd + 625; //以上4条指令把小数部分转换为BCD码形式
shifen = wd / 1000; //十分位
baifen = (wd % 1000) / 100; //百分位
qianfen = (wd % 100) / 10; //千分位
wanfen = wd % 10; //万分位
NOP();
temperature = shi*10+ge;
return temperature;
}
学习体会:
通过本次活动,进一步加深了对于单片功能和仿真的理解,学会了如何使用ble通讯方式,采集温度和控制,为后续产品设计研发奠定基础,非常棒的活动,后面还会参加。
软硬件
元器件
附件下载
BLE微信小程序温控系统.X.rar
ble微信小程序温控系统
团队介绍
业余开发团队
团队成员
爱洗头的程序员
评论
0 / 100
查看更多
猜你喜欢
Funpack第七期—基于DM164137设计的按键监控系统本设计是利用DM164137板子作为主控,设计的一个可以监控按键按下、短按(1S)、长按(5S)以及电位器状态,通过LED以及串口输出状态的设备。
冷月烟
1443
基于DM164137的PWM电机调速试验(Funpack第七期)使用DM164137开发板和MIKROE-4114模块,实现驱动电机正反转和调速。
每按下S1按键,电机可以在停止、低速正转、高速正转、停止、低速反转、高速反转等6种状态依次切换。
chinaking
1420
Funpack第七期——基于DM164137的按键实验通过按键扩展功能,分为按键点击(快速点击),短按(大于1秒),长按(大于5秒)用来控制板上LED显示。同时外接串口模块打印信息(包括按键信息,电位计信息)。
星辰i
1288