久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费
標題:
昨晚上寫的AVR紅外遙控解碼代碼
[打印本頁]
作者:
xiaojuan
時間:
2014-10-13 14:54
標題:
昨晚上寫的AVR紅外遙控解碼代碼
/******************紅外遙控器解碼源代碼****************
編譯環境:ICCAVR
編譯人員:RJW
編譯時間:2013_01_10 06:36
代碼功能:實現紅外遙控器解碼,數碼管顯示用戶碼和數據碼
*******************************************************/
#include<iom16v.h>
#include<macros.h>
#define uchar unsigned char
#define uint unsigned int
//定義外部中斷和定時器中斷
#progma interrupt_handler timer1:9
#progma interrupt_handler int0:2
//573使能端宏定義
#define DUAN PA3
#define WEI PA4
#define DUAN_OUT DDRA |= BIT(DUAN)
#define DUAN_SET PORTA |= BIT(DUAN)
#define DUAN_CLR PORTA &= ~BIT(DUAN)
#define WEI_OUT DDRA |= BIT(WEI)
#define WEI_SET PORTA |= BIT(WEI)
#define WEI_CLR PORTA &= ~BIT(WEI)
#progma data:code
const uchar duan[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x76};
#progma data:code
const uchar wei[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf};
//定義全局變量
uchar t_num=0,i_num=0,guide_ok=0,receive_ok=0;
//定義用來保存零時數據和編碼的數組
uchar time[33];
uchar code[4]={0x40,0x40,0x040,0x40};
/***********1us延時子函數***********
功能:用于延時1us
參數:無
返回值:無
******************************************/
void delay_1us()
{
unsigned char a,b;
for(b=1;b>0;b--)
for(a=3;a>0;a--);
}
/***********nus延時子函數***********
功能:用于延時nus
參數:z:代表延時時長,即本函數可延時范圍為:(0~65535us)
返回值:無
******************************************/
void delay_nus(int z)
{
int i;
for(i=z;i>0;i--)
delay_1us();
}
/***********定時器中斷初始化函數***********
功能:設置定時器1中斷方式以及分頻情況
參數:無
返回值:無
******************************************/
void timer1_init()
{
TCCR1B = 0x01;//設置外部中斷1無預分頻
TCNT1H = 0xfb;
TCNT1L = 0x4f;//設置定時時長為100US
SREG |= BIT(7);//開啟總中斷
}
/***********外部中斷初始化函數***********
功能:設置外部中斷中斷方式以及開啟外部中斷
參數:無
返回值:無
******************************************/
void int0_init()
{
MCUCR = 0x02;//設置外部中斷0下降沿觸發方式
GICR = 0x40;//開啟外部中斷0中斷
SREG |= BIT(7);//開啟總中斷
}
/***********定時器中斷服務程序***********
功能:用于定時器中斷時,計時變量加1
參數:無
返回值:無
******************************************/
void timer1()
{
t_num++;
}
/***********外部中斷服務程序***********
功能:用于在響應外部中斷的情況下執行相應操作
參數:無
返回值:無
******************************************/
void int0()
{
TIMSK |= BIT(2);//開啟定時器1中斷
if(i_num==1) //判斷是否是第二次外部中斷
{
if(t_num>80)//是否是引導碼
{
guide_ok=1; //是引導碼則標志1
}
else
{
guide_ok=0;//不是引導碼則標志0
}
}
if(guide_ok==1) //如果是引導碼
{
time[i_num]=t_num; //將接收的各位數據保存
t_num=0;
i_num++;
}
if(i_num==33)
{
i_num=0;
guide_ok==0; //清楚引導碼標志
receive_ok=1; //接收完成標志
}
}
/***********紅外解碼函數***********
功能:將接收到的計時碼轉換為16進制碼
參數:無
返回值:無
******************************************/
void decode()
{
uchar i,j,k=1,dat=0;
for(i=0;i<4;i++)//循環4次取得用戶碼'用戶碼'數據碼'數據反碼
{
for(j=0;j<8;j++) //循環8次整合8個bit構成一個字節
{
dat>>=1;
if(time[k]>17) //PPM方式判斷該bit是0還是1
{
dat|=0x80;
}
k++;
}
code[i]=dat;
}
k=0;
receive_ok=0;
}
/***********數碼管顯示初始化函數***********
功能:設置數碼管段選位選為輸出模式
參數:無
返回值:無
******************************************/
void smg_init()
{
DUAN_OUT; //設置段選端為輸出模式
WEI_OUT; //設置位選端為輸出模式
DDRB = 0xff;//設置數據端為輸出模式
}
/***********數碼管顯示函數***********
功能:用于顯示用戶碼和數據碼
參數:無
返回值:無
******************************************/
void smg_display()
{
uchar i,k=0;
for(i=1;i<4;i++)
{
DUAN_SET;
PORTB = duan[code[i]/10]; //將每個碼字節的數據高4位送入
DUAN_CLR;
WEI_SET;
PORTB = wei[k];
WEI_CLR;
delay_nus(500); //顯示駐留500us
DUAN_SET;
PORTB = duan[code[i]%10]; //將每個碼字節的數據低4位送入
DUAN_CLR;
WEI_SET;
PORTB = wei[k+1];
WEI_CLR;
k=k+2;
delay_nus(500); //顯示駐留500us
}
k=0;
}
void main()
{
smg_init(); //數碼管初始化
timer1_init();//定時器1初始化
int0_init(); //外部中斷0初始化
while(1)
{
if(receive_ok==1) //判斷33位數據是否接收完成
{
decode(); //完成接收開始解碼
}
smg_display(); //顯示
}
}
作者:
taiwan3c
時間:
2014-10-14 13:56
謝謝樓主
作者:
小泡泡
時間:
2015-1-27 10:57
樓主你也沒說你的avr是什么型號啊,晶振多少的,還有你的數碼管是怎么回事,一個數字9的十六進制還要高四位第四位讀寫嗎?
作者:
小泡泡
時間:
2015-1-27 11:00
小泡泡 發表于 2015-1-27 10:57
樓主你也沒說你的avr是什么型號啊,晶振多少的,還有你的數碼管是怎么回事,一個數字9的十六進制還要高四位 ...
還有你的I_time++,在int0的中斷服務程序中何時才能為1,沒看到呢
作者:
caodemin
時間:
2015-3-28 19:36
好人!受教了!
作者:
開心暑假
時間:
2015-8-3 14:53
樓主好人,一生平安
作者:
cqgdlq
時間:
2018-6-2 18:20
正需要,好人呀!
作者:
avt7382
時間:
2018-6-8 09:58
謝謝摟主無私奉獻!
作者:
cr8526
時間:
2018-7-21 17:00
控制什么的啊 ??樓主
歡迎光臨 (http://m.zg4o1577.cn/bbs/)
Powered by Discuz! X3.1
主站蜘蛛池模板:
日韩色在线
|
亚洲毛片在线
|
国产欧美一区二区在线观看
|
色秀网站
|
91精品中文字幕一区二区三区
|
久久久综合色
|
亚洲一区二区免费电影
|
国产精品视频播放
|
精品一区二区久久久久久久网站
|
天天操天天天干
|
国产精品久久久久久久久图文区
|
91极品视频
|
亚洲精品久久久久久久久久久
|
伊人网站在线观看
|
国产欧美日韩综合精品一
|
日韩日韩日韩日韩日韩日韩日韩
|
日韩精品在线看
|
成人免费视频观看视频
|
日韩在线中文字幕
|
亚洲人成网站777色婷婷
|
啪视频在线
|
国产一区二区影院
|
狠狠狠色丁香婷婷综合久久五月
|
亚洲综合色视频在线观看
|
久久综合久久久
|
成人在线免费视频
|
在线观看国产
|
四虎影院在线观看av
|
成人国产精品免费观看
|
九九九久久国产免费
|
国产露脸对白88av
|
久久国产欧美日韩精品
|
国产91av视频
|
日韩精品一区二区三区中文字幕
|
欧美成人一区二区三区
|
国产午夜精品一区二区三区嫩草
|
特黄毛片
|
精品无码久久久久久国产
|
中文字幕乱码一区二区三区
|
亚洲自拍偷拍视频
|
亚洲网站免费看
|