android温度计源码,蓝牙温度计 安卓app源码和单片机源码都有 还带温度监测系统原理图...

/*****************************************************************

* 此部分为主程序

*控制数码管的显示 以及定义发向串口的函数

*!!!

*此程序只能与上位机程序配合使用,或者修改相应上位机代码

******************************************************************/

#include

extern GetTemp();                                                                           //声明引用外部函数

extern unsigned int  idata Temperature;                      // 声明引用外部变量

extern STC_send_bluetooth(unsigned char a);                          //声明外部函数,与串口相关

extern Serial_port_init();

extern ctrl();

extern unsigned char tmp;

extern void Init18b20(void);

extern bit  flag;//DS18B20是否损坏标志位,1为完好

void send();//处理18B20发来的温度值,将各个位分别存储,并控制发向串口

void delay(unsigned int i);//延时程序

//138的C、B、A端 用于数码管的位选

sbit    LS138A=P2^2;       //管脚定义

sbit    LS138B=P2^3;

sbit    LS138C=P2^4;

sbit    PowerDown=P2^1;           //若18B20损坏,指示灯灭

//此表为 LED 的字模, 共阴数码管 0-9  -

unsigned char code Disp_Tab[] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40};

unsigned long  LedOut[3],LedNumVal;

unsigned char num[3];

unsigned char end_char;                         //定义串口发送结束符

unsigned char ARQFlag=0;//请求重发标志位,若为0,表示不重发

unsigned char AutoSendFlag=0;//为了减小硬件带来的误差,单片机用于重新发送给上位机的标志位

/********************************

*判断18B20是否损坏或未连接

*若损坏或未连接,发给上位机FF作为提示

*************************************/

bit Is_18B20()

{

Init18b20();

if(!flag)

{

STC_send_bluetooth(0x46);        //字符F

delay(500);                                         //发送完一个字符加一定的延时

STC_send_bluetooth(0x46);

delay(500);

STC_send_bluetooth(0x43);                  //字符C的ASCII码,作为此次发送完毕的结束标?

delay(5000);                                          //稍微延长延时,等待发送完毕

PowerDown=1;                                          //指示灯灭

PCON |= 0x02;                                          //单片机进入停机模式,此时内部晶振停振,只能靠外部INT0~3引脚唤醒或复位

return 0;

}

return 1;

}

/********************************

*定时器中断相关初始化

*********************************/

void system_Init()

{

TMOD&=0xF0;

TMOD|= 0x01;

TH0 = 0xD8;    //10ms

TL0 = 0xF0;

TR0  = 1;

ET0=1;

EA=1;

}

/************************************************************************************

*主函数,用于定时器中断,波特率发生器初始化,处理串口数据,以及数码管的显示

************************************************************************************/

void main()

{

unsigned char i;

end_char='C';

Serial_port_init();

system_Init();

//delay(1050);

//        1000           19.57ms

//800 15.67

//1200 23.49

//1100 21.52

//1050 20.55

if(Is_18B20())                  //若18B20没有损坏,则继续执行

{

while(1)

{

if(RI==1)                     // 是否有数据到来

{

RI = 0;

tmp = SBUF;                   // 暂存接收到的数据

ctrl();                                                 //根据接收的字符做出相应的处理

}

GetTemp();                                                 //获取温度

/********以下将读18b20的数据送到LED数码管显示*************/

for(i=0; i<2; i++)

{

P0 = LedOut[i] ;

switch(i)

{                      //138译码

case 0:LS138C=0;LS138B=0;LS138A=0;   break;

case 1:LS138C=0;LS138B=0;LS138A=1;   break;  //001B 表示位选第一个数码管

//case 2:LS138C=0;LS138B=1;LS138A=0;   break;

}

delay(100);

}

P0 = 0;

}

}

}

/**********************************************

*延时程序

**********************************************/

void delay(unsigned int i)

{

char j;

for(i; i > 0; i--)

for(j = 200; j > 0; j--);

}

/******************************************

*单片机串口发送函数

******************************************/

void send()

{

if(AutoSendFlag==20)                                  //当单片机有20秒没有发送数据给上位机时,发送一次数据,防止硬件误差

{

AutoSendFlag='s';

}

if((LedNumVal)==(Temperature) && ARQFlag==0&&AutoSendFlag!='s')  // 温度值与上次相等并且不要求重发,则不执行send()发送到串口

{

return;

}

else

{

LedNumVal=Temperature;      //把实际温度送到LedNumVal变量中

num[0]=        LedNumVal%100/10;

num[1]=        LedNumVal%10;

/* //若需要小数后一位的数据

num[0]=        (LedNumVal/100)%10;        //十位

num[1]=        (LedNumVal/10)%10;        //个位

num[2]=     LedNumVal%10;                //小数点后一位

*/

delay(1050);

STC_send_bluetooth(num[0]+0x30);

delay(1050);                                         //发送完一个字符加一定的延时

STC_send_bluetooth(num[1]+0x30);

delay(1050);                                         //15.67ms

STC_send_bluetooth(0x43);                  //字符C的ASCII码,作为此次发送完毕的结束标志

delay(1050);

LedOut[0]=Disp_Tab[num[0]];         //温度的十位

LedOut[1]=Disp_Tab[num[1]];    //温度的个位

//LedOut[2]=Disp_Tab[num[2]];         //温度的小数后一位

if(ARQFlag)                                  //若是上位机请求重发的,此时ARQFlag为1,需要手动置0

…………限于本文篇幅 余下代码请从51黑下载附件…………

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值