資源簡介
STC8G1K08A紅外遙控點燈
代碼片段和文件信息
*****************************************************************/
#include “STC8.h“
#include??“intrins.h“
/************************常用數據類型定義*************************/
#define?u8??uint8_t
#define?u16?uint16_t
#define?u32?uint32_t
typedef?unsigned?char????uint8_t;
typedef?unsigned?int?????uint16_t;
typedef?unsigned?long????uint32_t;
/************************端口/引腳定義區域************************/
sbit?LED1=P3^3;
sbit?LED2=P5^4;
//----------------------------------------------------------------
//sbit?KEY=P3^2;
sbit?KEY=P5^5; ??
/************************用戶自定義數據區域***********************/
bit?IR_KEY=0;
bit?IR_Flag=0;
u8?IR_time=0;
u8?IR_code[4];
u8?IR_data[33];
/**************************函數聲明區域***************************/
void?delay(u16?Count);
void?Time0_init(void);
void?Int0_init(void);
void?IR_decode(void);
void?IR_control(void);
/***************************主函數區域****************************/
void?main(void)
{
P3M0|=0x08; //P3.3引腳為推挽輸出模式
P3M1&=0xF7; //P3.3引腳為推挽輸出模式
RSTCFG&=0xEF; //復位引腳P5.4當做普通I/O引腳
P5M0|=0x10; //P5.4引腳為推挽輸出模式
P5M1&=0xEF; //P5.4引腳為推挽輸出模式
P5M0&=0xDF; //P5.5引腳為準雙向口模式
P5M1&=0xDF; //P5.5引腳為準雙向口模式
Time0_init(); //定時計數器0初始化函數
Int0_init(); //外部中斷0初始化函數
delay(100); //等待配置穩定
LED1=LED2=1; //上電后兩個LED都保持熄滅狀態
while(1)
{
if(IR_Flag) //如果有紅外數據傳入并接收完成
{
IR_decode(); //調用紅外解碼函數(用于得到鍵值)
IR_Flag=0; //清除紅外數據接收完成標志位
}
if(IR_KEY) //如果紅外解析成功,認定按鍵按下
{
IR_control(); //調用紅外控制函數(用戶控制LED燈)
}
}
}
/****************************************************************/
//延時函數delay(),有形參Count無返回值
/****************************************************************/
void?delay(u16?Count)
{
while(Count--)
{
_nop_();
}
}
/****************************************************************/
//定時計數器0初始化函數Time0_init(),無形參,無返回值
/****************************************************************/
void?Time0_init(void) //278微秒@11.0592MHz
{
AUXR?&=?0x7F; //定時器時鐘12T模式
TMOD?&=?0xF0; //T0工作在工作方式2,8位自動重裝載模式
TMOD?|=?0x02; //T0工作在工作方式2,8位自動重裝載模式
TL0?=?0x00; //定時初值為0,則T0定時時間達到最大(約0.278ms)
TH0?=?0x00; //定時初值為0,則T0定時時間達到最大(約0.278ms)
TF0?=?0; //清除TF0標志
ET0=1; //使能T0的溢出中斷
TR0=1; //開啟T0運行控制位,允許T0開始計數
//定時時間計算:t=256*12/11.0592=277.77us
}
/****************************************************************/
//外部中斷0初始化函數Int0_init(),無形參,無返回值
/****************************************************************/
void?Int0_init(void)
{
IT0=1; //配置外部中斷0信號觸發方式為邊沿觸發(下降沿有效)
EX0=1; //使能INT0中斷
EA=1; //打開單片機總中斷開關EA
}
/****************************************************************/
//紅外解碼函數IR_decode(),用于得到鍵值,無形參,無返回值
/****************************************************************/
void?IR_decode(void)
{
u8?ijk;
//變量i控制循環次數,用于最終得到4個字節數據(2個用戶碼+2個數據碼)
//變量j控制循環次數,通過循環和時長判斷把8個時間間隔分析為“0碼”
//和“1碼”,然后最終通過按位或運算及右移運算得到紅外數據,變量k用
//于控制IR_data[]數組的下標變化。
u8?Timer_ValueIR_Value;
//變量Timer_Value用于從IR
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件???????6699??2020-10-14?16:29??紅外遙控點燈\main.c
?????文件??????12185??2020-06-07?00:11??紅外遙控點燈\main.LST
?????文件??????24559??2020-06-07?00:11??紅外遙控點燈\main.OBJ
?????文件??????18957??2020-06-06?22:29??紅外遙控點燈\STC8.H
?????文件??????23524??2020-06-07?00:11??紅外遙控點燈\test
?????文件???????1563??2020-06-07?00:11??紅外遙控點燈\test.hex
?????文件?????????40??2020-06-07?00:11??紅外遙控點燈\test.lnp
?????文件??????10118??2020-06-07?00:11??紅外遙控點燈\test.M51
?????文件????????263??2020-07-18?18:08??紅外遙控點燈\test.plg
?????文件??????71558??2020-07-18?18:08??紅外遙控點燈\test.uvgui.Administrator
?????文件??????71557??2020-07-18?17:57??紅外遙控點燈\test.uvgui_Administrator.bak
?????文件???????5042??2020-07-18?18:08??紅外遙控點燈\test.uvopt
?????文件??????13424??2018-07-30?22:37??紅外遙控點燈\test.uvproj
?????目錄??????????0??2020-10-14?16:27??紅外遙控點燈
-----------?---------??----------?-----??----
???????????????259489????????????????????14
- 上一篇:基于STM32的嵌入式flash讀寫控制
- 下一篇:LVGL 7.0 開發手冊
評論
共有 條評論