|
各位師傅,麻煩看下我的程序哪有問(wèn)題,怎么接收不到信息呢這也是參考本壇一位高手寫的程序修改的,在此一并謝過(guò)
55.jpg (118.27 KB, 下載次數(shù): 64)
下載附件
2021-1-13 12:45 上傳
單片機(jī)源程序如下:
#include "reg52.h"
#include "oled.h"
#include "bmp.h"
#include "ds18b20.h"
#include <stdio.h>
#include "ds1302.h"
sbit key_s2 = P2^4;//獨(dú)立按鍵S2
uchar rev=0; //藍(lán)牙接收緩存值
bit flag=0; //接收標(biāo)志
uint d=1;
#define MHz 1000000U // 定義 MHz
#define gCLK 11059200 // 系統(tǒng)時(shí)鐘頻率
#define UART_BAUD 9600 // 定義所用的波特率
//串口初始化
void UARTInit()
{
SCON = 0x50; // Mode 1: 8-bit UART, 允許接收
TMOD |= 0x20; // 定時(shí)器1 Mode 2: 8-Bit reload
PCON = 0x80; // SMOD = 1
TH1 = 0xfd;
TL1 = 0xfd;
TR1 = 1; // 定時(shí)器 1 啟動(dòng)
ES = 1; // 串行中斷允許
EA=1;
}
/********************************************************************
* 名稱 : Com_Int()
* 功能 : 串口中斷子函數(shù)
***********************************************************************/
void Com_Int(void) interrupt 4
{
ES = 0;//關(guān)閉串口中斷
if(RI == 1) //當(dāng)硬件接收到一個(gè)數(shù)據(jù)時(shí),RI會(huì)置位
{
rev = SBUF;//數(shù)據(jù)傳輸緩存
RI = 0;//清零
flag=1; //置一
}
ES = 1; //打開串口中斷
}
void gongneng()//功能
{
switch(rev)//緩存數(shù)據(jù)
{
case 'E':d ==0; break;
default:break;
}
flag=0;//標(biāo)志清零
}
int main(void)
{
extern uint temp_ds; //傳遞當(dāng)前溫度值
OLED_Init(); //初始化OLED
OLED_Clear(); //OLED清屏
UARTInit(); //串口初始化
DS1302Init(); //DS1302初始化
OLED_ShowCHinese(0,6,0); //溫
OLED_ShowCHinese(16,6,1); //度
OLED_ShowString(32,6,":",16);
OLED_ShowCHinese(88,6,2); //℃
OLED_ShowCHinese(0,4,5); //重
OLED_ShowCHinese(16,4,6); //量
OLED_ShowString(32,4,":",16);
while(1)
{
gongneng();
OLED_ShowNum(45,4,rev,2,16);
OLED_ShowNum(60,4,d,2,16);
if(d == 0)//判斷S2是否被按下
{
// delay_ms(20);//按鍵消抖
// if(key_s2 == 0)
{
TI = 1;
printf("temp is %d.%d C\n",temp_ds/10,temp_ds%10); //檢測(cè)有誤按鍵按下 輸出當(dāng)前溫度值給手機(jī)APP
while(!RI);
RI = 0;
// while(!key_s2);//松手檢測(cè)
}
}
Test_Temp(); //溫度顯示
Test_Time(); //時(shí)間顯示
}
}
重量后面是rev的值還有d的值,rev有時(shí)顯示35,48等,但和發(fā)送的字符對(duì)不上啊,d一直是1.
|
|