久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费
標題:
請教如何把89c52單片機紅外解碼程序移植到15W408中
[打印本頁]
作者:
芙蓉焊料
時間:
2023-12-16 11:49
標題:
請教如何把89c52單片機紅外解碼程序移植到15W408中
初次接觸1T的stc15W408as單片機,不清楚哪些程序要改動?
請教如何把89c52單片機紅外解碼程序移植到15W408中運行?
#include <REGX52.H>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
uchar code tab[] = {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0X88,0X83,0XC6,0XA1,0X86,0X8E,0xFF};
sbit IR = P3^2; //紅外接收端
uchar N[4]; //識別碼,操作碼存放
uchar sj=0;
void XSQ(void);
void YS(uchar time);
/****************** 主函數 *******************/
void main(void)
{
IT0 = 1;
EX0 = 1;
EA = 1;
while(1)
{
XSQ();
}
}
/**********************數碼管顯示函數************************/
void XSQ(void)
{
P0=tab[X3];
P2_6=0;
YS(1); //操作碼
P2_6=1;
P0=tab[X4];
P2_7=0;
YS(1);
P2_7=1;
}
/********************** 外部中斷函數************************/
void exint0() interrupt 0
{
uint cnt;
uchar i;
EX0 = 0;
cnt = 0;
while(!IR) cnt++; //記錄引導碼時間
if(cnt < 1000){EX0=1;return;} //9ms的計數值(12MHz:1000< cnt <1500)
cnt = 0;
while(IR) if(cnt++ > 400){EX0=1;return;} //防卡死,超時保護(12MHz: > 300)
if(cnt < 200){EX0=1;return;} //(12MHz不分頻: <260)
for(i=0; i<32; i++) //讀取32位位碼
{
cnt = 0;
while(!IR);
while(IR) if(cnt++ > 200){EX0=1;return;} //超時保護(12MHz:>=200)
N[i/8] >>= 1;
if(cnt>60) N[i/8] |= 0x80; //0和1的計數界線(12MHz:< 109)
}
if(N[0] == ~N[1] && N[2] == ~N[3]) //校驗識別碼,操作碼
{
X1 = N[0]/16;
X2 = N[0]%16;
X3 = N[2]/16;
X4 = N[2]%16;
}
EX0 = 1;
}
/***************************************************************
函數功能:按鍵消抖 延時程序
入口參數:1ms×time (晶振=12MHz)
***************************************************************/
void YS(uchar time)
{
uchar i,j;
for(i=0; i<time; i++)
for(j=0; j<247; j++)
_nop_();
}
作者:
yhfgdgr
時間:
2023-12-16 17:14
這兩個單片機的指令周期是不一樣的,計算時間的部分需要修改下。別的地方應該不用怎么改
作者:
yhfgdgr
時間:
2023-12-16 17:15
這兩個單片機的指令周期不一樣 ,你把計算時間的部分修改下就好啦
作者:
lkc8210
時間:
2023-12-16 23:24
這種在中斷中死等的代碼
還是不要學比較好
作者:
lkc8210
時間:
2023-12-16 23:28
stc15W408as有定時器2
可以直接用我的例程
http://www.zg4o1577.cn/bbs/dpj-225989-1.html
作者:
芙蓉焊料
時間:
2023-12-17 11:21
lkc8210 發表于 2023-12-16 23:28
stc15W408as有定時器2
可以直接用我的例程
http://www.zg4o1577.cn/bbs/dpj-225989-1.html
學習了,謝謝!
作者:
man1234567
時間:
2023-12-18 09:30
這兩個單片機的速度是不一樣的,調適就好。
作者:
wufa1986
時間:
2023-12-18 11:00
這程序你真的敢用嗎,在中斷寫一大堆功能,還有while
作者:
18680365301
時間:
2023-12-18 11:56
#include "IR.h"
/*
紅外5104
引導碼 4.5ms 高電平
Logic '0' 1.48ms 高電平
Logic '1' 2.43ms 高電平
*/
#define IR_STATUS_LOCK 0X01 //紅外鎖定
#define IR_STATUS_RECEIVE_OK 0X02 //紅外接收完成
#define IR_STATUS_KEY_UP 0X04 //紅外釋放
#define IR_STATUS_RECEIVE1_OK 0X08 //數據1接收完成
#define IR_STATUS_RECEIVE2_OK 0x10 //數據2接收完成
#define IR_STATUS_RECEIVE1_EN 0X20 //數據1接收允許
#define IR_STATUS_RECEIVE2_EN 0X40 //數據2接收允許
/************************************************變量聲明********************************************/
idata u8 Ir_Status; //紅外狀態
idata u8 Ir_Receive_Bit_Count; //紅外接收位計數
idata u8 Ir_H_Time; //紅外高電平計數
idata u8 Ir_L_Time; //紅外高電平計數
idata u16 Ir_Map; //紅外映射
idata u16 Ir_Receive_Data0;
idata u16 Ir_Receive_Data1;
idata u16 Ir_Receive_Data2;
idata u16 Ir_Receive_Data3;
/**********************************************變量聲明結束******************************************/
/************************************************函數聲明********************************************/
void IR_Receive();
void IR_Key_Handle();
/**********************************************函數聲明結束******************************************/
/************************************************函數功能實現********************************************/
//功能:紅外解碼
//調用方式:125us中斷
void IR_Receive()
{
if(IR_RECEIVE_IO)
{
if(Ir_H_Time < 0xff)
{
Ir_H_Time++;
if((Ir_Status & IR_STATUS_LOCK) && (Ir_H_Time > 80))
{
Ir_Status &= ~(IR_STATUS_LOCK | IR_STATUS_RECEIVE1_OK | IR_STATUS_RECEIVE2_OK);
Ir_Status |= IR_STATUS_KEY_UP;
}
}
if(Ir_L_Time)
{
if(Ir_L_Time >= 15)
{
Ir_L_Time = 0;
return ;
}
//接收第一個16位數據
if(Ir_Status & IR_STATUS_RECEIVE1_EN)
{
Ir_Receive_Data0 <<= 1;
if(Ir_L_Time > 5)
{
Ir_Receive_Data0 |= 0x01;
}
Ir_Receive_Bit_Count++;
if(Ir_Receive_Bit_Count >= 12)
{
Ir_Status &= ~IR_STATUS_RECEIVE1_EN;
Ir_Status |= IR_STATUS_RECEIVE1_OK;
}
}
//接收第二個16位數據
if(Ir_Status & IR_STATUS_RECEIVE2_EN)
{
Ir_Receive_Data1 <<= 1;
if(Ir_L_Time > 5)
{
Ir_Receive_Data1 |= 0x01;
}
Ir_Receive_Bit_Count++;
if(Ir_Receive_Bit_Count >= 12)
{
Ir_Status &= ~IR_STATUS_RECEIVE2_EN;
if(Ir_Receive_Data0 == Ir_Receive_Data1)
{
Ir_Receive_Data2 = Ir_Receive_Data0;
Ir_Receive_Data3 = Ir_Receive_Data1;
Ir_Status |= IR_STATUS_LOCK | IR_STATUS_RECEIVE_OK | IR_STATUS_RECEIVE2_OK;
Ir_Map = 0;//快速響應
}
else
{
//接收錯誤重接收
Ir_Status &= ~(IR_STATUS_LOCK | IR_STATUS_RECEIVE1_OK | IR_STATUS_RECEIVE2_OK);
}
}
}
}
Ir_L_Time = 0;
}
else
{
Ir_L_Time++;
if(Ir_H_Time > 12)//12 * 125 = 1500us
{
if((Ir_Status & IR_STATUS_RECEIVE1_OK) == 0)
{
Ir_Receive_Data0 = 0;
Ir_Status |= IR_STATUS_RECEIVE1_EN;
}
else if((Ir_Status & IR_STATUS_RECEIVE2_OK) == 0)
{
Ir_Receive_Data1 = 0;
Ir_Status |= IR_STATUS_RECEIVE2_EN;
}
Ir_Receive_Bit_Count = 0;
}
Ir_H_Time = 0;
}
}
//功能:紅外按鍵碼的功能處理
//調用方式:建議Main中10毫秒處理一次
void IR_Key_Handle()
{
//紅外按鍵單次處理
if(Ir_Status & IR_STATUS_RECEIVE_OK)
{
Ir_Status &= ~IR_STATUS_RECEIVE_OK; //清除IR接收成功標志
if(Ir_Receive_Data2 != Ir_Receive_Data3)
{
//兩次接收數據不相同不執行按鍵處理
return ;
}
//紅外按鍵映射到觸摸按鍵處理上
switch(Ir_Receive_Data2)
{
case 0X0D81://開關
Ir_Map |= KEY_POWER;
break;
case 0X0D90://擋位
Ir_Map |= KEY_LEVEL;
break;
case 0X0D84://溫度
Ir_Map |= KEY_TEMP;
break;
case 0X0D88://定時
Ir_Map |= KEY_TIMING;
break;
case 0X0D82://童鎖
Ir_Map |= KEY_IR_CHIP;
break;
default:
Ir_Status &= ~(IR_STATUS_LOCK | IR_STATUS_RECEIVE1_OK | IR_STATUS_RECEIVE2_OK);
break;
}
}
//紅外按鍵釋放
if(Ir_Status & IR_STATUS_KEY_UP)
{
Ir_Status &= ~IR_STATUS_KEY_UP;
Ir_Map = 0;
}
}
/**********************************************函數功能實現結束******************************************/
歡迎光臨 (http://www.zg4o1577.cn/bbs/)
Powered by Discuz! X3.1
主站蜘蛛池模板:
欧美一区二区三区免费在线观看
|
h视频在线看
|
久久aⅴ乱码一区二区三区 亚洲国产成人精品久久久国产成人一区
|
成人h电影在线观看
|
日本午夜精品
|
国产午夜精品福利
|
一区二区亚洲
|
中文字幕在线不卡
|
日韩精品一区二区三区中文字幕
|
欧美日本免费
|
亚洲 精品 综合 精品 自拍
|
精品中文字幕一区
|
久久国产成人午夜av影院武则天
|
日韩中文字幕在线观看
|
免费看的黄网站
|
欧美一区二区在线观看视频
|
在线成人av
|
亚洲成人自拍
|
成人精品国产免费网站
|
亚洲小视频在线观看
|
日本精品久久久一区二区三区
|
91传媒在线观看
|
久久69精品久久久久久久电影好
|
国产精品美女久久久
|
成人夜晚看av
|
日韩精品不卡
|
av毛片
|
欧美成人精品一区二区男人看
|
成人免费小视频
|
欧美国产精品
|
91夜色在线观看
|
国产美女自拍视频
|
午夜伦4480yy私人影院
|
国产精品视频一二三区
|
av一级
|
日韩免费看视频
|
国产精品18久久久
|
天堂一区二区三区四区
|
免费黄色网址视频
|
国产精品一区二区av
|
日韩视频在线免费观看
|