C51微控制器——紅外遙控 驅動程式
C51紅外遙控驅動程式
本文為學習HC6800-EM3 V2.2開發板的學習筆記彙總,本文所用 紅外接收頭的引腳封裝如圖下:
驅動函式封裝
宣告:請自行根據晶振編寫相匹配的延時函式;
IrReceive.h檔案
#ifndef __IRRECEIVE_H__
#define __IRRECEIVE_H__
#include "delay.h"//請自行根據晶振編寫相匹配的延時函式;
typedef struct{
uchar usercode;//使用者碼
uchar cmd;//操作碼
uchar ok;//完成標誌位
uchar irtime; //時間控制
uint count_repeat;//重複碼計數器
u32 receive;//資料快取
}ir_value_t;
extern ir_value_t IrValue;//結構體宣告
void irReceiveInit(void);//初始化
void IrValueParse(u32 recv);//資料處理函式
#endif
IrReceive.c檔案
紅外接收頭的out引腳接在微控制器的P3.2口,以外部中斷0下降沿方式觸發
#include "IrReceive.h"
void irReceiveInit(void)//初始化
{
TMOD=0x02;//定時器0工作方式2,TH0是重灌值,TL0是初值
TH0=0; //過載值
TL0=0; //初始化值
ET0=1; //開中斷
TR0=1;
IT0 = 1; //指定外部中斷0下降沿觸發,INT0 (P3.2)
EX0 = 1; //使能外部中斷
EA = 1; //開總中斷
}
void IrValueParse(u32 recv)//資料處理函式
{
uchar temp1;
uchar temp2;
temp1=recv;
temp2=recv>>8;
IrValue.usercode=temp1;
if(temp1!=(uchar)(~temp2))
{
IrValue.ok=0;
return;
}
temp1=recv>>16;
temp2=recv>>24;
IrValue.cmd=temp1;
if(temp1!=(uchar)(~temp2))
{
IrValue.ok=0;
return;
}
IrValue.ok=1;
}
ir_value_t IrValue;
void timer0_isr(void) interrupt 1 //定時器0中斷服務函式
{
IrValue.irtime++;
}
void ir_ex0_interrupt() interrupt 0 //外部中斷0 下降沿觸發
{
static bit flag_start=0;
static uchar IrCountBit=0; //位計數器
if(IrValue.irtime<60&&IrValue.irtime>=40)
{
flag_start=1;引導碼 9ms+4.5ms 資料開始接收
IrCountBit=0;//開始數數
IrValue.count_repeat=0;//重發碼清零
}
if(flag_start)
{
IrValue.receive>>=1;
if(IrValue.irtime>6&&IrValue.irtime<10) //邏輯1
{
IrValue.receive|=0x80000000;
}
else if(IrValue.irtime<513&&IrValue.irtime>=268)
{
IrValue.count_repeat++;
}
IrCountBit++;
if(IrCountBit==33) //接收完成
{
IrValueParse(IrValue.receive);
}
}
IrValue.irtime=0;//清空定時器變數
}
測試實驗
為驗證驅動程式是否正確,採用紅外遙控鍵值的變化顯示到LCD1602上進行驗證;
注:LCD驅動程式碼請參看連結: LCD驅動篇.
main.c檔案
#include "IrReceive.h"
#include "lcd1602.h"
void main(void)
{
uchar buf[16];
irReceiveInit();
lcd1602Init(); //LCD初始化
lcd1602Clear(); //清屏
while(1)
{
if(IrValue.ok==1)//接收解碼完成
{
sprintf(buf,"%d",IrValue.cmd); //組包;
lcd1602WriteString(0,0,buf); //列印字串
IrValue.ok=0;//每按下一次顯示一次;
}
}
}
相關文章
- 微控制器紅外遙控格力空調
- 微控制器學習(十)紅外遙控與外部中斷
- 榮耀V20支援紅外遙控嗎?榮耀V20手機紅外遙控遙控空調的方法
- stm32與紅外遙控器(NEC協議)協議
- 小米8 SE支援NFC功能嗎?小米8 SE支援紅外遙控嗎?
- 紅米Note7支援NFC和紅外遙控功能嗎?紅米Note7刷公交地鐵的方法
- 51微控制器mcp4728驅動程式原始碼原始碼
- 小米MIX3支不支援紅外人臉識別,小米mix3支援紅外遙控功能嗎?
- 情趣震動遙控智慧情趣解決方案/手機連線遠端遙控
- 基於微控制器的無線語音遙控智慧車設計
- 基於微控制器的紅外電子密碼鎖程式設計思路密碼程式設計
- 新版本釋出,新增監控外掛與驅動
- (未完)STM32硬體開發——智慧小車(超聲波避障 紅外循跡 藍芽遙控)藍芽
- 幾種不同資料採集的概念:遙測、遙控、遙信、遙調、遙視、遙感
- 韓餐:遙控器無法控制電動門
- 簡單的51微控制器多工作業系統(C51)作業系統
- Android 觸控式螢幕驅動Android
- 51微控制器紅外接收
- 戶外怎麼安裝可以遠端遙控的智慧斷路器呢?
- 多點觸控式螢幕驅動
- 電視遙控器失靈原因和解決辦法 電視遙控器壞了怎麼辦?
- linux 觸控式螢幕驅動編寫Linux
- jz_2440_電阻屏觸控驅動
- 【Linux 中斷】紅外接收器裝置驅動Linux
- led驅動程式例項
- 動態監控程式
- 【linux】驅動-9-裝置樹外掛Linux
- Linux裝置驅動程式學習----1.裝置驅動程式簡介Linux
- J20航模遙控器開源專案系列教程(六)亞克力外殼製作
- 按鍵中斷驅動程式
- 驅動程式開發步驟
- 戲說領域驅動設計(十九)——外驗
- Linux驅動實踐:如何編寫【 GPIO 】裝置的驅動程式?Linux
- 數字成像雷達感測器先驅Uhnder採用通用晶片遙測進行深度資料監控晶片
- 使用C#實現一個PPT遙控器C#
- 自用純C語言實現任務排程(可用於STM32、C51等微控制器)C語言
- 程式設計模式-表驅動程式設計程式設計設計模式
- SQL Server驅動程式能否通用PCSQLServer