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

標題: 關于紅外遙控控制問題 [打印本頁]

作者: wonderfulxsj    時間: 2018-7-27 09:52
標題: 關于紅外遙控控制問題
我想實現按一下遙控器,在16×16點陣上顯示一個字,但是我得按很久才按出字來,按出字后一切正常(按一下顯示一個字)。
代碼如下:
#include<reg51.h>
#include<intrins.h>
sbit SIGNAL=P3^2;                                           //控制遙控接收數據信號
sbit SRCLK=P3^6;                                           //74HC595模擬SRCLK管腳
sbit RCLK=P3^5;                                                   //74HC595模擬RCK管腳
sbit SER=P3^4;                                                   //74HC595模擬SER管腳
#define uchar unsigned char
#define uint unsigned int
#define A 3000
uchar p=0;                                                           //先把p賦值為0
uchar value[6];                                                   //用以紅外接收用戶碼數據碼數組
uchar time;                                                           //時間變量用以紅外接收
void delay10us(void)   // 10us
{
    unsigned char a,b;
    for(b=1;b>0;b--)
        for(a=2;a>0;a--);
}
void delay100us(void)   // 100us
{
    unsigned char a,b;
    for(b=1;b>0;b--)
        for(a=47;a>0;a--);
}
void delay7ms(void)   // 7ms
{
    unsigned char a,b,c;
    for(c=1;c>0;c--)
        for(b=26;b>0;b--)
            for(a=133;a>0;a--);
}
void delay(uchar i)
{
        while(i--);       
}
uchar code tablewei[]=                                  //16×16點陣位選
{
  0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80
};
uchar code tableduan1[]={                          //16×16點陣段選
/*--  文字:  祝  --*/
/*--  宋體12;  此字體下對應的點陣為:寬x高=16x16   --*/
0x08,0x08,0x89,0xEE,0x98,0x00,0x7E,0x42,0xC2,0x42,0x42,0xC2,0x42,0x7E,0x00,0x00,
0x02,0x01,0x00,0xFF,0x80,0x43,0x20,0x18,0x07,0x00,0x00,0x3F,0x40,0x40,0x78,0x00,


};
uchar code tableduan2[]={
/*--  文字:  你  --*/
/*--  宋體12;  此字體下對應的點陣為:寬x高=16x16   --*/
0x00,0x80,0x60,0xF8,0x07,0x40,0x20,0x18,0x0F,0x08,0xC8,0x08,0x08,0x28,0x18,0x00,
0x01,0x00,0x00,0xFF,0x00,0x10,0x0C,0x03,0x40,0x80,0x7F,0x00,0x01,0x06,0x18,0x00,



};
uchar code tableduan3[]={
/*--  文字:  生  --*/
/*--  宋體12;  此字體下對應的點陣為:寬x高=16x16   --*/
0x80,0x40,0x30,0x1E,0x10,0x10,0x10,0xFF,0x10,0x10,0x10,0x10,0x10,0x10,0x00,0x00,
0x40,0x40,0x42,0x42,0x42,0x42,0x42,0x7F,0x42,0x42,0x42,0x42,0x42,0x40,0x40,0x00,



};
uchar code tableduan4[]={
/*--  文字:  日  --*/
/*--  宋體12;  此字體下對應的點陣為:寬x高=16x16   --*/
0x00,0x00,0x00,0xFE,0x82,0x82,0x82,0x82,0x82,0x82,0x82,0xFE,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0xFF,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0xFF,0x00,0x00,0x00,0x00,


};
uchar code tableduan5[]={
/*--  文字:  快  --*/
/*--  宋體12;  此字體下對應的點陣為:寬x高=16x16   --*/
0x00,0xE0,0x00,0xFF,0x10,0x20,0x08,0x08,0x08,0xFF,0x08,0x08,0xF8,0x00,0x00,0x00,
0x01,0x00,0x00,0xFF,0x00,0x81,0x41,0x31,0x0D,0x03,0x0D,0x31,0x41,0x81,0x81,0x00,

};
uchar code tableduan6[]={
/*--  文字:  樂  --*/
/*--  宋體12;  此字體下對應的點陣為:寬x高=16x16   --*/
0x00,0x00,0xE0,0x9C,0x84,0x84,0x84,0xF4,0x82,0x82,0x83,0x82,0x80,0x80,0x00,0x00,
0x00,0x20,0x10,0x08,0x06,0x40,0x80,0x7F,0x00,0x00,0x02,0x04,0x08,0x30,0x00,0x00,


};

void Hc595SendByte(uchar dat1,uchar dat2,uchar dat3,uchar dat4)                        //74HC595芯片擴展顯示漢字函數
{
        uchar a;

        SRCLK = 1;
        RCLK = 1;

        for(a=0;a<8;a++)                 //發送8位數
        {
                SER = dat1 >> 7;                 //從最高位開始發送
                dat1 <<= 1;

                SRCLK = 0;                         //發送時序
                _nop_();
                _nop_();
                SRCLK = 1;       
        }

        for(a=0;a<8;a++)                 //發送8位數
        {
                SER = dat2 >> 7;                 //從最高位開始發送
                dat2 <<= 1;

                SRCLK = 0;                         //發送時序
                _nop_();
                _nop_();
                SRCLK = 1;       
        }


        for(a=0;a<8;a++)                 //發送8位數
        {
                SER = dat3 >> 7;                 //從最高位開始發送
                dat3 <<= 1;

                SRCLK = 0;                         //發送時序
                _nop_();
                _nop_();
                SRCLK = 1;       
        }

        for(a=0;a<8;a++)                 //發送8位數
        {
                SER = dat4 >> 7;                 //從最高位開始發送
                dat4 <<= 1;

                SRCLK = 0;                         //發送時序
                _nop_();
                _nop_();
                SRCLK = 1;       
        }


        RCLK = 0;
        _nop_();
        _nop_();
        RCLK = 1;
}


void init()                         //為紅外遙控初始化
{
  IT0=1;
  EX0=1;
  EA=1;

  SIGNAL=1;
}

void main()
{
  uchar i;                        //動態顯示16×16點陣顯示漢字
  init();

  while(p==5)                //按下遙控按鈕觸發p+=5
  {
   for(i=0;i<16;i++)
   {
   Hc595SendByte(~tablewei[i+16],~tablewei[i],tableduan1[16+i],tableduan1[i]);                   //顯示'祝'
   delay(10);
   }

  }
  while(p==10)
  {
   delay(A);

   for(i=0;i<16;i++)
   {
   Hc595SendByte(~tablewei[i+16],~tablewei[i],tableduan2[16+i],tableduan2[i]);
   delay(10);
   }

  }
  while(p==15)
  {

   for(i=0;i<16;i++)
   {
   Hc595SendByte(~tablewei[i+16],~tablewei[i],tableduan3[16+i],tableduan3[i]);
   delay(10);
   }

  }
  while(p==20)
  {

   for(i=0;i<16;i++)
   {
   Hc595SendByte(~tablewei[i+16],~tablewei[i],tableduan4[16+i],tableduan4[i]);
   delay(10);
   }

  }
  while(p==25)
  {
   delay(A);

   for(i=0;i<16;i++)
   {
   Hc595SendByte(~tablewei[i+16],~tablewei[i],tableduan5[16+i],tableduan5[i]);
   delay(10);
   }

  }
  while(p==30)
  {  
   for(i=0;i<16;i++)
   {
   Hc595SendByte(~tablewei[i+16],~tablewei[i],tableduan6[16+i],tableduan6[i]);
   delay(10);
   }

  }



}


void Read_Signal() interrupt 0                  //外部中斷函數用以接收遙控數據
{
  uchar i,j;
  uint count;
  time=0;
  delay7ms();
  if(SIGNAL==0)
  {

    count =1000;
    while((SIGNAL==0)&&(count>0))         //>9ms
        {
          delay10us();
          count--;
        }
        if(SIGNAL==1)
        {
        count=500;
        while((SIGNAL==1)&&(count>0))          //>4.5ms
        {
          delay10us();
          count--;

        }
                  for(j=0;j<4;j++)
            {
             for(i=0;i<8;i++)
                 {
                   count=60;
                   while((SIGNAL==0)&&(count>0))
                   {
                     delay10us();
                         count--;
                   }


                   count=500;
                   while((SIGNAL==1)&&(count>0))
                   {
                   delay100us();
                   time++;
                   count--;
                   if(time>30)
                   {
                     return;
                   }
                   }
                   value[j]>>=1;
                   if(time>=8)
                   {
                   value[j]|=0x80;
                   }
                   time=0;
                  }

                 }

            }
       
        if(value[2]!=~value[3])
        {
         return;
        }
        delay(A);
        p=p+5;                                                                         /*按一下遙控觸發p+5*/
       
  }

}


作者: wonderfulxsj    時間: 2018-7-27 09:55
A是用來消抖的,我試過將A設置成(800~3000)都無法解決問題,不知道問題出在哪,求助~!




歡迎光臨 (http://www.zg4o1577.cn/bbs/) Powered by Discuz! X3.1
主站蜘蛛池模板: 久久伊人影院 | 男女午夜免费视频 | 免费观看一级特黄欧美大片 | 午夜免费福利电影 | 国内自拍真实伦在线观看 | 国产成人av免费看 | 成人在线小视频 | 91色视频在线观看 | 91免费在线| 久久国产秒 | 亚洲精品一区二区三区免 | 精品免费视频 | 日韩在线小视频 | 亚洲一区av| 午夜一区二区三区在线观看 | 国产玖玖 | 国产精品18久久久久久白浆动漫 | 日韩在线一区二区三区 | www日韩欧美| 在线色网 | 狠狠做六月爱婷婷综合aⅴ 国产精品视频网 | 久久99精品久久 | www.youjizz.com日韩| 久久国产精品一区二区三区 | 操久久 | 成人av电影免费在线观看 | 亚洲成av人片在线观看 | 久久一及片 | 成人免费看黄 | 亚洲免费视频网址 | 亚洲国产欧美一区二区三区久久 | 日韩欧美精品一区 | 久久久综合网 | 成人高清视频在线观看 | 亚洲天堂影院 | 国产精品国产三级国产aⅴ入口 | 久久精品91久久久久久再现 | 午夜在线观看免费 | 午夜精品影院 | 欧美黑人又粗大 | 精品国产91乱码一区二区三区 |