久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 3306|回復(fù): 0
打印 上一主題 下一主題
收起左側(cè)

AVR 紅外遙控程序 不知道錯(cuò)在哪里求解

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:70636 發(fā)表于 2014-12-17 19:38 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式

      #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};
          //定義數(shù)碼管顯示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};

     //定義帶小數(shù)點(diǎn)的數(shù)碼管顯示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;
//定義用來(lái)保存零時(shí)數(shù)據(jù)和編碼的數(shù)組
uchar time[33];
uchar code[4];  //儲(chǔ)存用戶(hù)碼、用戶(hù)反碼與鍵數(shù)據(jù)碼、鍵數(shù)據(jù)反碼
                                                                                                              
//*****************延時(shí)函數(shù)ms級(jí)***************************//   
void delayms(uint ms)     
{   
  uint i,j;   
    for( i=0;i<ms;i++)   
       for(j=0;j<1141;j++); //1141是在8MHz晶振下
}
/******************延時(shí)函數(shù)us級(jí)**************************/
void delayus(uint us)     
{   
  uint i;   
    us=us*5/4;      //5/4是在8MHz晶振下  
     for( i=0;i<us;i++);  
}
/******************************************************************************/

/***********定時(shí)器中斷初始化函數(shù)***********
功能:設(shè)置定時(shí)器1中斷方式以及分頻情況
參數(shù): 8M晶振
返回值:無(wú)
******************************************/
void timer1_init()
{
    TCCR1B = 0x01;//設(shè)置外部中斷1無(wú)預(yù)分頻
    TCNT1H = 0xfd;
    TCNT1L = 0xdd;//設(shè)置定時(shí)時(shí)長(zhǎng)為100US
    SREG = 0x80;//開(kāi)啟總中斷
}
/***********外部中斷初始化函數(shù)***********
功能:設(shè)置外部中斷中斷方式以及開(kāi)啟外部中斷
參數(shù):無(wú)
返回值:無(wú)
******************************************/
void int0_init()
{
    MCUCR = 0x02;//設(shè)置外部中斷0下降沿觸發(fā)方式
    GICR = 0x40;//開(kāi)啟外部中斷0中斷
    SREG = 0x80;//開(kāi)啟總中斷
}
/***********定時(shí)器中斷服務(wù)程序***********
功能:用于定時(shí)器中斷時(shí),計(jì)時(shí)變量加1
參數(shù):無(wú)
返回值:無(wú)
******************************************/
#progma interrupt_handler timer1_isr:9
void timer1_isr()
{
    t_num++;
}
/***********外部中斷服務(wù)程序***********
功能:用于在響應(yīng)外部中斷的情況下執(zhí)行相應(yīng)操作
參數(shù):無(wú)
返回值:無(wú)
******************************************/
#progma interrupt_handler int0_isr:2
void int0_isr()
{   
    GICR = 0x00; //關(guān)閉外中斷0,不再接收二次紅外信號(hào)的中斷,只解碼當(dāng)前紅外信號(hào)
    TIMSK = 0x40;//開(kāi)啟定時(shí)器1中斷
    if(i_num==1)  //判斷是否是第二次外部中斷
   {
       if(t_num>80)//是否是引導(dǎo)碼
       {
            guide_ok=1; //是引導(dǎo)碼則標(biāo)志1  
        }
        else
       {
            guide_ok=0;//不是引導(dǎo)碼則標(biāo)志0
        }
    }
    if(guide_ok==1)    //如果是引導(dǎo)碼
    {
        time[i_num]=t_num; //將接收的各位數(shù)據(jù)保存
        t_num=0;         
        i_num++;
    }
    if(i_num==33)
    {
        i_num=0;
        guide_ok==0;    //清除引導(dǎo)碼標(biāo)志
        receive_ok=1;  //接收完成標(biāo)志
    }

   GICR = 0x40; //開(kāi)啟外中斷0
}
/***********紅外解碼函數(shù)***********
功能:將接收到的計(jì)時(shí)碼轉(zhuǎn)換為16進(jìn)制碼
參數(shù):無(wú)
返回值:無(wú)
******************************************/
void decode()
{
    uchar i,j,k=1,dat=0;
    for(i=0;i<4;i++)//循環(huán)4次取得用戶(hù)碼'用戶(hù)碼'數(shù)據(jù)碼'數(shù)據(jù)反碼
    {
        for(j=0;j<8;j++) //循環(huán)8次整合8個(gè)bit構(gòu)成一個(gè)字節(jié)
        {
            dat>>=1;
            if(time[k]>6)  //PPM方式判斷該bit是0還是1
            {
             dat=0x80;
            }
            k++;
         }
         code[i]=dat;   
     }
     k=0;
     receive_ok=0;
}
/***********主函數(shù)***********
功能:主要實(shí)現(xiàn)小車(chē)運(yùn)動(dòng)
參數(shù):無(wú)
返回值:無(wú)
******************************************/

void main()
{
    DDRA=0xFF;
    PORTA=0x00;
    timer1_init();//定時(shí)器1初始化
    int0_init();  //外部中斷0初始化
    while(1)
   {  
     if(receive_ok==1)  //判斷33位數(shù)據(jù)是否接收完成
       {
           decode();      //完成接收開(kāi)始解碼
         if(DeCode()==1)  //如果解碼完成
         {
         if (code[2]==0x09) {PORTA=0x05;} //如果按下前進(jìn)鍵,則小車(chē)前進(jìn)
         if (code[2]==0x15) {PORTA=0x0A;} //如果按下后退鍵,則小車(chē)后退
         if (code[2]==0x47) {PORTA=0x00;} //如果按下停止鍵,則小車(chē)停止
          }
       }
    }
}

不知道

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 中文字幕在线一区二区三区 | 国产分类视频 | 国产特级毛片aaaaaa | 欧美在线a | 国产成人精品一区二区三区网站观看 | 99久久精品国产毛片 | 久久精品国产v日韩v亚洲 | 欧美综合在线视频 | 亚洲精品久久久久久一区二区 | 欧美video| 一级a性色生活片久久毛片 一级特黄a大片 | 成人小视频在线观看 | 国产剧情一区二区三区 | 亚洲在线一区二区三区 | 欧美日韩综合 | 九色视频网站 | 91极品尤物在线播放国产 | 欧美aⅴ在线观看 | 国产91精品网站 | 一级黄在线观看 | 成av在线| 91 在线 | 欧美日韩在线观看视频网站 | 中文字幕视频在线观看 | 成人国产免费观看 | 久久亚洲一区二区三 | 国产在线视频网 | 欧美成人精品 | 九九热在线精品视频 | 国产精品一区二区三区在线 | 四虎影院一区二区 | 欧美日韩在线免费观看 | 91黄在线观看| 综合色久 | 99re在线视频| 国精产品一区一区三区免费完 | 久久这里只有精品首页 | 亚洲视频免费在线观看 | 日韩中文视频 | 欧美精品久久久久久久久久 | 亚洲成人午夜在线 |