久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费
標題:
單片機紅外接收程序(串口顯示)
[打印本頁]
作者:
51黑z
時間:
2016-9-11 22:27
標題:
單片機紅外接收程序(串口顯示)
0.png
(66.21 KB, 下載次數: 90)
下載附件
2016-9-11 22:25 上傳
本例程實現51單片機紅外解碼接收,結果發送到串口,大家可以從51黑電子論壇搜索到串口調試助手來查看紅外數據
完整keil工程文件下載:
http://www.zg4o1577.cn/bbs/dpj-55490-1.html
下面是部分程序代碼的預覽:
#include "IR_Receive.h"
#include "UART.h"
#include "delay.h"
extern uint8_t IRcode_Type;//紅外數據類型,RCA或NEC8或NEC16
extern uint16_t IRcode[2]; //紅外數據中的系統碼IRcode[0],紅外數據中的用戶碼IRcode[1]
extern uint32_t RCAcode_Original;//RCA協議原碼
extern uint32_t NECcode_Original;//NEC原始數據
void main(void)
{
Time0_INT0_Init();
UART_Init();
while(1)
{
if(IRdata_Analysis())//解析成功串口打印正確紅外碼值
{
switch(IRcode_Type)
{
case IRcode_TypeRCA:
{
UART_Printf("RCAcode_Original=",RCAcode_Original,Hex,"\r\n");//打印出未進行解析的原始紅外NEC數據
UART_SendString("IRcode_Type: RCA\r\n");
UART_Printf("SystemCode= ",IRcode[0],Hex,"\r\n");
UART_Printf("UserCode= ",IRcode[1],Hex,"\r\n");
UART_SendString("\r\n");break;
}
case IRcode_TypeNEC8:
{
UART_Printf("NECcode_Original=",NECcode_Original,Hex,"\r\n");//打印出未進行解析的原始紅外NEC數據
UART_SendString("IRcode_Type: NEC-8\r\n");
UART_Printf("SystemCode= ",IRcode[0],Hex,"\r\n");
UART_Printf("UserCode= ",IRcode[1],Hex,"\r\n");
UART_SendString("\r\n");break;
}
case IRcode_TypeNEC16:
{
UART_Printf("NECcode_Original=",NECcode_Original,Hex,"\r\n");//打印出未進行解析的原始紅外NEC數據
UART_SendString("IRcode_Type: NEC-16\r\n");
UART_Printf("SystemCode= ",IRcode[0],Hex,"\r\n");
UART_Printf("UserCode= ",IRcode[1],Hex,"\r\n");
UART_SendString("\r\n");break;
}
default:{break;}
}
}
}
}
復制代碼
UART.c
#include "UART.h"
uint8_t Dex_Hex_Buffer[Length_Max];//數據緩沖區
/*************************************************************************************
函數:void Divide_Dex_Hex(uint32_t Num,uint8_t Format)
功能:數據分離,儲存在緩沖中數組中,低位~高位=[0]~[Length_Max-1],返回數據位數
*************************************************************************************/
uint8_t Divide_Dex_Hex(uint32_t Num,uint8_t Format)
{
signed char i=0;
uint8_t Num_Cnt = 0;
for(i=0;i<Length_Max;i++) //緩沖清零
{
Dex_Hex_Buffer[i] = 0;
}
if(Num == 0)//Num = 0處理
{
Dex_Hex_Buffer[0] += 0x30;//處理成ASIIC碼
Dex_Hex_Buffer[1] += 0x30;
if(Format == Dex)return 1;
if(Format == Hex)return 2;
}
else if(Format == Dex)//把數據分離成十進制數
{
i = 0;
while(Num)
{
Dex_Hex_Buffer[i] = Num%10+'0';//處理成ASIIC碼
Num /= 10;
Num_Cnt++;
i++;
}
}
else if(Format == Hex)//把數據分離成十六進制數
{
i = 0;
while(Num)
{
Dex_Hex_Buffer[i] = Num%16;
Num /= 16;
Num_Cnt++;
i++;
}
if(Num_Cnt%2)Num_Cnt+=1; //十六進制返回的位數強制為偶數
for(i=Num_Cnt-1;i>=0;i--) //把十六進制數據處理成ASIIC碼
{
if(Dex_Hex_Buffer[i]<10)
{
Dex_Hex_Buffer[i] += 0x30;
}
else
{
Dex_Hex_Buffer[i] = Dex_Hex_Buffer[i]-0x0A+0x41;
}
}
}
return Num_Cnt;//返回數據十進制或十六進制位數
}
/*************************************************************************************
函數:void UART_Init(void);
功能:對串口進行初始化,串口工作方式1,波特率9600,SMOD = 0;
*************************************************************************************/
void UART_Init(void)
{
TMOD |= 0x20;
TH1 = 0xFD;
TL1 = 0xFD;
SM0 = 0; //設置串口工作方式為1
SM1 = 1;
REN = 1; //允許單片機接收數據
TR1 = 1;
ES = 1;
EA = 1;
}
/*************************************************************************************
函數:void UART_SendChar(char ch);
功能:發送一個字符;
*************************************************************************************/
void UART_SendChar(char ch)
{
REN = 0; //發送過程不接收數據
SBUF= ch;
while(!TI);
TI = 0;
REN = 1;
}
/*************************************************************************************
函數:void UART_SendHex(uint8_t *pTx_Buffer,uint8_t Length);
功能:發送一個十六進制數組數據,電腦端勾選“Hex顯示”;
*************************************************************************************/
void UART_SendHex(uint8_t *pTx_Buffer,uint8_t Length)
{
uint8_t i=0;
REN = 0; //發送過程不接收數據
for(i=0;i<Length;i++)
{
SBUF = *pTx_Buffer;
while(!TI);
TI = 0;
pTx_Buffer++;
}
REN = 1;
}
/*************************************************************************************
函數:void UART_SendString(uint8_t *String);
功能:發送一個字符串;
*************************************************************************************/
void UART_SendString(uint8_t *String)
{
while(*String != '\0')
{
UART_SendChar(*String);
String++;
}
}
/*************************************************************************************
函數:void UART_Printf(uint8_t *String,uint32_t Value,uint8_t Format,uint8_t *String);
功能:串口以十進制或者十六進制發送數據(ASII碼數據,電腦端不需要勾選"Hex顯示");
*************************************************************************************/
void UART_Printf(uint8_t *String1,uint32_t Value,uint8_t Format,uint8_t *String2)
{
uint8_t i;
uint8_t Num_Cnt = 0;
Num_Cnt = Divide_Dex_Hex(Value,Format);
UART_SendString(String1);
if(Format==Hex)UART_SendString("0x");//
for(i=0;i<Num_Cnt;i++)
{
UART_SendChar(Dex_Hex_Buffer[(Num_Cnt-1)-i]);
}
UART_SendString(String2);
}
復制代碼
作者:
huhui9009
時間:
2017-7-21 22:49
強烈支持一下,前來學習了
歡迎光臨 (http://www.zg4o1577.cn/bbs/)
Powered by Discuz! X3.1
主站蜘蛛池模板:
狠狠操狠狠
|
成人av免费播放
|
国产精品国产三级国产aⅴ原创
|
99久久免费精品国产男女高不卡
|
中文字幕三区
|
午夜丁香视频在线观看
|
黄色国产视频
|
亚洲91
|
亚洲综合色视频在线观看
|
91精品国产一区二区三区动漫
|
亚洲精品黄
|
成人国产精品一级毛片视频毛片
|
久久极品
|
本地毛片
|
亚洲一区二区三区四区五区中文
|
色婷婷久久综合
|
日韩在线视频播放
|
国产亚洲精品91
|
在线看av网址
|
女人毛片a毛片久久人人
|
久久久国产精品入口麻豆
|
91超碰在线
|
人成在线
|
亚洲视频在线免费观看
|
亚洲精品在线看
|
久久夜视频
|
午夜av成人
|
日本欧美国产
|
欧美一区二区三区日韩
|
欧美精品一区二区三区蜜臀
|
欧美一a一片一级一片
|
男女羞羞视频在线免费观看
|
日韩欧美国产一区二区三区
|
欧美久久久久久
|
午夜看电影在线观看
|
国产精品久久久久久久午夜
|
99久久精品国产一区二区三区
|
国产成人精品一区二区三区在线
|
毛片免费观看
|
国产日韩欧美
|
麻豆av网
|