欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136
標(biāo)題:
C51單片機(jī) 藍(lán)牙 串口、溫度、1602主機(jī)從機(jī)代碼分享
[打印本頁(yè)]
作者:
ynzsc001
時(shí)間:
2021-3-26 15:25
標(biāo)題:
C51單片機(jī) 藍(lán)牙 串口、溫度、1602主機(jī)從機(jī)代碼分享
感興趣的朋友們可以參考哈,如有更好的建議多謝指點(diǎn)!!
等我哪天把它整合到我的車載 溫控GPS系統(tǒng)里面。
程序分主從兩部分......
000111.jpg
(4.44 MB, 下載次數(shù): 45)
下載附件
2021-3-26 15:22 上傳
單片機(jī)主機(jī)源程序如下:
//***********************************************
//晶振:11.0592
//波特率:9600 (主機(jī))
//液晶:1602
//***********************************************
#include <reg52.h>
#include "LCD1602.h"
#include <math.h>
//*************************************************************************************************
#define uchar unsigned char
#define uint unsigned int
static int count=0;//數(shù)組計(jì)數(shù)
static int begin=0;//當(dāng)為0時(shí)表示對(duì)于接收到的數(shù)據(jù)丟棄,1表示接收的數(shù)據(jù)放到數(shù)組array中
int flags;//標(biāo)志位,用到測(cè)試用
char xdata array[9]={0};//數(shù)組
char temp;
uchar i, j, flag;
//****************************************************************************************************
sbit LED=P1^0;
void ZCxshm() //正常顯示畫面
{
stringaddress(2,0,"TEMP:");
lcdwritecom(0xc0+14); // 14表示第15列
lcdwritedata(0xdf); // 溫度符號(hào)的小圈
stringaddress(2,15,"C");
}
void Intcon() // 初始化 TCON:控制寄存器,作用是控制定時(shí)器的啟、停,標(biāo)志定時(shí)器溢出和中斷情況。
{
IT0=1; //IT0 :IT0=1表示INT0為下降沿(負(fù)跳變)觸發(fā),IT0=0表示INT0為低電平觸發(fā)。
EX0=1; //EX0 :INT0中斷允許位;EX0=1允許中斷。
EA=1; //EA=1允許中斷
}
/**********************************************************************************************/
void main()
{
TMOD = 0x20;
TH1 = 0xfd;//9600赫茲
TL1 = 0xfd;
TR1 = 1; //開(kāi)啟時(shí)間中斷
SCON = 0x50;//方式2
SM2 = 1; //可以向cpu請(qǐng)求中斷
EA = 1; //開(kāi)總中斷
ES = 1; //開(kāi)串口中斷
lcdinit(); // LCD顯示器初始化
Intcon(); // 初始化 TCON:控制寄存器,作用是控制定時(shí)器的啟、停,標(biāo)志定時(shí)器溢出和中斷情況。
ZCxshm(); //正常顯示畫面
while(1)
{
lcdwritecom(0xC0+6);
lcdwritedata(array[2]);
lcdwritecom(0xC0+7);
lcdwritedata(array[3]);
lcdwritecom(0xC0+8);
lcdwritedata(array[4]);
lcdwritecom(0xC0+9);
lcdwritedata(array[5]);
lcdwritecom(0xC0+10);
lcdwritedata(array[6]);
}
}
//************************************************************************************************
void Serial() interrupt 4
{
RI = 0;
temp=SBUF;
if(temp=='<'||begin==1)//如果是<,則接下來(lái)的數(shù)據(jù)都是要接收的,如果begin是1也表示是要接收的
{
begin=1;
if(temp!='<')//因?yàn)?lt;是標(biāo)致位,所以我們是要丟棄的
{
if(temp!='>')
{
array[count]=temp;
count++;
}
else if(temp=='>')//停止位
{
begin=0;
count=0;
flags=1;
}
}
}
}
復(fù)制代碼
從機(jī)代碼:
#include "temp.H"
void Delay1ms(unsigned int y) //延時(shí)函數(shù)
{
unsigned int x;
for(y;y>0;y--)
for(x=110;x>0;x--);
}
unsigned char Ds18b20Init() //DS18B20 的初始化函數(shù)
{
unsigned int i;
DSPORT=0;
i=70;
while(i--);// 延時(shí) 642us
DSPORT=1;
i=0;
while(DSPORT) //等待 DS18B20 拉低總線
{
i++;
if(i>5000)// 等待>5MS
return 0;//初始化失敗
}
return 1;//初始化成功
}
void Ds18b20WriteByte(unsigned char dat) //向 DS18B20寫入一個(gè)字節(jié)
{
unsigned int i,j;
for(j=0;j<8;j++)
{
DSPORT=0; //每寫入一位數(shù)據(jù)之前先把總線拉低 1us
i++;
DSPORT=dat&0x01; //然后寫入一個(gè)數(shù)據(jù),從最低位開(kāi)始
i=6;
while(i--); // 延時(shí) 68us,持續(xù)時(shí)間最少 60us
DSPORT=1; // 然后釋放總線,至少 1us給總線恢復(fù)時(shí)間才能接著寫入第
//二個(gè)數(shù)值
dat>>=1;
}
}
unsigned char Ds18b20ReadByte() //向 DS18B20 讀取一個(gè)字節(jié)
{
unsigned char byte,bi;
unsigned int i,j;
for(j=8;j>0;j--)
{
DSPORT=0;//先將總線拉低 1us
i++;
DSPORT=1;//然后釋放總線
i++;
i++;//延時(shí) 6us等待數(shù)據(jù)穩(wěn)定
bi=DSPORT; //讀取數(shù)據(jù),從最低位開(kāi)始讀取
/*將 byte 右移一位,然后或上左移 7 位后的 bi,注意移動(dòng)之后移掉那位
補(bǔ) 0。*/
byte=(byte>>1)|(bi<<7);
i=4; //讀取完之后等待 48us再接著讀取下一個(gè)數(shù)
while(i--);
}
return byte;
}
void Ds18b20ChangTemp() // 讓 DS18B20 開(kāi)始轉(zhuǎn)換溫度
{
Ds18b20Init();
Delay1ms(1);
Ds18b20WriteByte(0xcc); //跳過(guò) ROM 操作命令
Ds18b20WriteByte(0x44); //溫度轉(zhuǎn)換命令
}
void Ds18b20ReadTempCom() //發(fā)送讀取溫度命令
{
Ds18b20Init();
Delay1ms(1);
Ds18b20WriteByte(0xcc); //跳過(guò) ROM 操作命令
Ds18b20WriteByte(0xbe); //發(fā)送讀取溫度命令
}
int Ds18b20ReadTemp() //讀取溫度
{
int temp=0;
unsigned char tmh,tml;
Ds18b20ChangTemp(); //先寫入轉(zhuǎn)換命令
Ds18b20ReadTempCom(); //然后等待轉(zhuǎn)換完后發(fā)送讀取溫度命令
tml=Ds18b20ReadByte(); //讀取溫度值共 16 位,先讀低字節(jié)
tmh=Ds18b20ReadByte(); //再讀高字節(jié)
temp=tmh;
temp<<=8;
temp|=tml;
return temp;
}
復(fù)制代碼
所有代碼51hei提供下載:
單片機(jī)藍(lán)牙串口溫度例子 -我修改版.7z
(27.06 KB, 下載次數(shù): 40)
2021-3-26 15:39 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
作者:
13118302007
時(shí)間:
2021-3-26 22:49
如果沒(méi)有記錯(cuò)的話,處理以上軟件外,兩個(gè)藍(lán)牙模塊需要通過(guò)AT指令配對(duì)為主從機(jī)模式才可以正常運(yùn)行。
歡迎光臨 (http://m.raoushi.com/bbs/)
Powered by Discuz! X3.1