久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费
標題:
AVR 紅外遙控程序 不知道錯在哪里求解
[打印本頁]
作者:
458533149
時間:
2014-12-17 19:38
標題:
AVR 紅外遙控程序 不知道錯在哪里求解
#define uchar unsigned char
#define uint unsigned int
#include <iom16v.h>
#include <macros.h>
#define Set_Bit(val, bitn) (val |=(1<<(bitn)))
#define Clr_Bit(val, bitn) (val&=~(1<<(bitn)))
#define Get_Bit(val, bitn) (val &(1<<(bitn)) )
//uchar disbuf[4]={2,4,6,8};
//定義數碼管顯示0~9及a~f,全滅,全亮的字型碼,使用unsigned code定義
uchar discode[18]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e,0x00,0xff};
//定義帶小數點的數碼管顯示0~9及a~f,全滅,全亮的字型碼,使用unsigned code定義
uchar disbuf[18]={0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10,0x08,0x03,0x46,0x21,0x06,0x0e,0x00,0xff};
uchar disbit[4]={0xFE,0xFD,0xFB,0xF7}; //選通值
//定義全局變量
uchar t_num=0,i_num=0,guide_ok=0,receive_ok=0;
//定義用來保存零時數據和編碼的數組
uchar time[33];
uchar code[4]; //儲存用戶碼、用戶反碼與鍵數據碼、鍵數據反碼
//*****************延時函數ms級***************************//
void delayms(uint ms)
{
uint i,j;
for( i=0;i<ms;i++)
for(j=0;j<1141;j++); //1141是在8MHz晶振下
}
/******************延時函數us級**************************/
void delayus(uint us)
{
uint i;
us=us*5/4; //5/4是在8MHz晶振下
for( i=0;i<us;i++);
}
/******************************************************************************/
/***********定時器中斷初始化函數***********
功能:設置定時器1中斷方式以及分頻情況
參數: 8M晶振
返回值:無
******************************************/
void timer1_init()
{
TCCR1B = 0x01;//設置外部中斷1無預分頻
TCNT1H = 0xfd;
TCNT1L = 0xdd;//設置定時時長為100US
SREG = 0x80;//開啟總中斷
}
/***********外部中斷初始化函數***********
功能:設置外部中斷中斷方式以及開啟外部中斷
參數:無
返回值:無
******************************************/
void int0_init()
{
MCUCR = 0x02;//設置外部中斷0下降沿觸發方式
GICR = 0x40;//開啟外部中斷0中斷
SREG = 0x80;//開啟總中斷
}
/***********定時器中斷服務程序***********
功能:用于定時器中斷時,計時變量加1
參數:無
返回值:無
******************************************/
#progma interrupt_handler timer1_isr:9
void timer1_isr()
{
t_num++;
}
/***********外部中斷服務程序***********
功能:用于在響應外部中斷的情況下執行相應操作
參數:無
返回值:無
******************************************/
#progma interrupt_handler int0_isr:2
void int0_isr()
{
GICR = 0x00; //關閉外中斷0,不再接收二次紅外信號的中斷,只解碼當前紅外信號
TIMSK = 0x40;//開啟定時器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; //接收完成標志
}
GICR = 0x40; //開啟外中斷0
}
/***********紅外解碼函數***********
功能:將接收到的計時碼轉換為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]>6) //PPM方式判斷該bit是0還是1
{
dat=0x80;
}
k++;
}
code[i]=dat;
}
k=0;
receive_ok=0;
}
/***********主函數***********
功能:主要實現小車運動
參數:無
返回值:無
******************************************/
void main()
{
DDRA=0xFF;
PORTA=0x00;
timer1_init();//定時器1初始化
int0_init(); //外部中斷0初始化
while(1)
{
if(receive_ok==1) //判斷33位數據是否接收完成
{
decode(); //完成接收開始解碼
if(DeCode()==1) //如果解碼完成
{
if (code[2]==0x09) {PORTA=0x05;} //如果按下前進鍵,則小車前進
if (code[2]==0x15) {PORTA=0x0A;} //如果按下后退鍵,則小車后退
if (code[2]==0x47) {PORTA=0x00;} //如果按下停止鍵,則小車停止
}
}
}
}
不知道
歡迎光臨 (http://m.zg4o1577.cn/bbs/)
Powered by Discuz! X3.1
主站蜘蛛池模板:
久久都是精品
|
欧美精品一区二区在线观看
|
成人在线一区二区
|
国产福利网
|
天堂在线视频
|
午夜激情网站
|
午夜精品999
|
国产三级午夜理伦三级
|
国产免费成人
|
久热在线视频
|
国产欧美在线
|
www.久久精品
|
av在线免费网站
|
性色在线
|
一级片在线视频
|
69av在线
|
亚洲三级小说
|
福利网站在线观看
|
亚洲成人福利
|
国产精品国产精品国产专区不片
|
国产午夜精品一区二区三区视频
|
男女视频免费
|
又大又黄又爽
|
日韩a在线观看
|
三上悠亚一区二区
|
国产精品免费一区
|
精品免费国产一区二区三区四区
|
日日操夜夜干
|
日韩在线视频免费
|
国产无限资源
|
美国特色黄a大片
|
欧美在线一区二区三区
|
日韩精品一区二区视频
|
日韩一区在线视频
|
国产精品久久久久久99
|
综合在线视频
|
欧美午夜精品一区二区三区
|
亚洲三级在线
|
午夜免费视频
|
日韩特级
|
亚洲第一伊人
|