亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? my89c52.c

?? 我編寫的一個單片機串口通訊加接收遙控的代碼,接收完的遙控代碼可通過串口傳到計算機上,可做為一個測碼程序
?? C
字號:
/****************************************************************************************************************
* 本程序完成前面板的LED顯示及接收遙控器,通過串行口與主cpu通訊
*
* 2002/12/12   修改定時器1中斷與外部中斷,指定寄存器數組以減少指令
               遙控器的循環左移改用_crol_函數以減少指令
			   LED顯示函數的循環右移改為_cror函數,而不是用語句<<
*2003/03/20 修改程序以適合大顯前面板
*2006/06/16 修改遙控器放在中斷1 的放口上,串口輸出的碼改為10個字節
****************************************************************************************************************/
#include <reg52.h>    //跟據型號自己改 PHILIPS
#include <intrins.h>

unsigned char data  int_timer=0, INT_TIMES=0 ; //中斷時間間隔與中斷次數
unsigned char data LED_TIMES=0;
unsigned char data Remote_data[4];  //含客戶碼1,客戶碼2,遙控碼1,遙控碼2
unsigned char data  CUSTOM_CODE, POWER_KEY;

unsigned char data Repeate_key=0;
unsigned char data repeate_time=0; //計算repeate與head間的時間間隔

unsigned char bdata  Remote_flag=0 ;
sbit Head_ok=Remote_flag^7; //遙控器頭部是否正確,1----正確,0----不正確
sbit Remote_OK= Remote_flag^6; //遙控器是否完成的判斷
sbit Temp_data=Remote_flag^0;  //臨時存放一位數據
//sbit Stand_by=Remote_flag^5; //Sdand_by狀態標志位
sbit Close_Clock=Remote_flag^4 ; //0---顯示過時間,1---第一次顯示時間
sbit  outbuf_flag=Remote_flag^3;     //輸出緩沖區非空標志   有=1              
sbit  inbuf_flag=Remote_flag^2;      //接收緩沖區非空標志   有=1
sbit Boot_flag=Remote_flag^1; //啟動標志
//sbit RepT_over=Remote_flag^4 ; //repeate_time溢出標志

unsigned char data uart_tx_data[10];
unsigned char data uart_rx_data[8];
unsigned char uart_tx_p=0;
unsigned char uart_rx_p=0;

void send_remote(void);
void remote_wrong(void);
unsigned char mrab1(unsigned char *init);  //取1---15間的隨機數
void timer_init();
void serial_init ();
void send_key(unsigned char kye_board);
void Keyboard_deay(void);
void head_wait(void);
void send_repeat(void);

void main(void) 
{
  //unsigned char  i;
 
  Boot_flag=0; //表示正地啟動
  outbuf_flag=0;
  
  timer_init();
  serial_init ();
  
  //EX0=1;    //允許外部中斷
  //IT0=1;   //中斷0為低電平 
  EX1=1;    //允許外部中斷
  IT1=1;   //中斷1為低電平 
  ES=1;     //允許串口中斷
  EA=1; 

  P0=0x00;
  P0=0xFF;   
  while(Boot_flag)  
 {

/* 向5518發送一個查詢客戶碼的命令,同時也告知5518自己準備好了*/
   uart_tx_data[0]=0x5A;
   uart_tx_data[1]=0x5A;   
   uart_tx_data[2]=0x08;    //四號命令  
   uart_tx_data[3]=0x00;
   uart_tx_data[4]=0x00;
   uart_tx_data[5]=0x00;
   uart_tx_data[6]=0x00;
   uart_tx_data[7]=0x00;
   uart_tx_data[8]=0x00;
   uart_tx_data[9]=0x00; 

    uart_tx_p=0;
   //uart_tx_data[7]=mrab1(&RAB_INIT);
   // for(i=0;i<7;i++) uart_tx_data[i]=uart_tx_data[i]^led_table[uart_tx_data[7]];  
   
   SBUF= uart_tx_data[uart_tx_p];
   uart_tx_p++;
//   if(uart_tx_p>7) uart_tx_p=0;
   Keyboard_deay();
 }
  
  while(1)
  {   
#if 0
	 switch(P2)
   	 {
	   	  case 0xDF:  //right
   	  	    Keyboard_deay();
   	  	    if(P2==0xDF) send_key(0xDF);    //send_key(0xDF);
	   	  	break;
	   	  case 0xEF: //left
   	  	    Keyboard_deay();
   	  	    if(P2==0xEF) send_key(0xEF);    //send_key(0xEF);
	   	  	break;
	   	  case 0xF7: //up
   	  	    Keyboard_deay();
   	  	    if(P2==0xF7) send_key(0xF7);   //send_key(0xF7);
	   	  	break;
	   	  case 0xFB: //down
   	  	    Keyboard_deay();
   	  	    if(P2==0xFB) send_key(0xFB);  //send_key(0xFB);
	   	  	break;   	   
	   	  case 0xFD: //menu
   	  	    Keyboard_deay();
   	  	    if(P2==0xFD) send_key(0xFD);  //send_key(0xFD);
	   	  	break;   
	   	  case 0xFE:  //OK
   	  	    Keyboard_deay();
   	  	    if(P2==0xFE) send_key(0xFE);  //send_key(0xFE);
	   	  	break;   	   	   	  		   
	 } 
#endif
  }
}


void Keyboard_deay(void)
{
  unsigned short i=0;
  for(i=0;i<0xCFFF;i++){}
}
void timer_init()
{
  TMOD = 0x12;    /* 定時器0工作在模式1---0001,16位的定時器,定時器工作在方式2*/
 /* 定時器0,0.1mS中斷一次,這里單片機晶體振蕩頻率為27MHZ*/
  TH0=0x1E;    //0xE9;
  TL0=0x1E;    // 0xE9;
 /* 定時器1, 4mS中斷一次,這里單片機晶體振蕩頻率為27MH*/
 TH1=0xDC;     /* (65536-TH1TL1)*12/27MHz  */
 TL1=0xD7;
/* 定時器2, 用做串行口的婆特率發生器,9600*/
//  T2CON=0x30;
//  RCAP2H=0xFF;
//  RCAP2L=0x7A;

  ET0=1;         //定時器0中斷允許
  //TR0=1;         //定時器0開始工作   
  ET1=1;         //定時器1中斷允許
  TR1=1;         //定時器1禁止開始工作     
//  ET2=1;         //定時器2中斷允許
//  TR2=1;         //定時器2開始工作     
}


void timer1(void) interrupt 3 using 2  //定時器1 中斷程序
{
    LED_TIMES++;  // 4ms
    repeate_time++; // 4ms
    if(LED_TIMES==250)
     {
  	  // seconde++;   // 1秒鐘 
  	  if(outbuf_flag)
	  	{
	  	  outbuf_flag=0;
	  	  P0=0xFF;
  	  	}
	  else{
	  	  outbuf_flag=1;
	  	  P0=0x00;
	  	}
	  
  	  LED_TIMES=0;
  	}    
  TH1=0xDC;
  TL1=0xD7;
  TF1=0;       //清除定時器中斷標志  
}
void timer0(void) interrupt 1   //定時器0 TH 中斷程序
{
  TF0=0;       //清除定時器中斷標志
 /* 定時器1, 0.1mS中斷一次,這里單片機晶體振蕩頻率為27MHZ */
  int_timer++;   // 0.1ms, 100uS  
}

void Remote(void) interrupt 2 using 1  //遙控接收程序
{
  INT_TIMES++;     //中斷次數加一次,以控制數據的位數
  if(Head_ok)       //判斷9mS的頭碼是否通過?通過則解碼
  {
     if(INT_TIMES>=33)  send_remote();  //一個遙控中斷總數為34次完成
     else{
        if(int_timer<=4) remote_wrong();
     	  if((int_timer>4)&&(int_timer<13)) Temp_data=0;
     	  if((int_timer>=13)&&(int_timer<=20)) remote_wrong();
     	  if((int_timer>20)&&(int_timer<24)) Temp_data=1;
     	  if(int_timer>=24) remote_wrong();
         if((int_timer>118)&&(int_timer<=138)) head_wait();

     Remote_data[(INT_TIMES-1)/8]=_crol_(Remote_data[(INT_TIMES-1)/8],1);
     if(Temp_data) Remote_data[(INT_TIMES-1)/8]=Remote_data[(INT_TIMES-1)/8]|Temp_data;
         int_timer=0;              
    }
  }
  else{   //判斷頭碼
      if((int_timer>100)&&(int_timer<=112))
     {
        if(Repeate_key==0)
       {
         if((repeate_time>24)&&(repeate_time<30))       
         {
            Repeate_key++;           
          }
        }
        if(Repeate_key>0)
        {
           if((repeate_time>24)&&(repeate_time<32))
          	{
          	   Repeate_key++;
          	   if(Repeate_key==3) //重復5次算一次
               	{
               	  send_repeat();  //11.2mS, reapter
               	  Repeate_key=0;
               	} 
          	}          	
  	   }
        repeate_time=0;
       }
          if((int_timer>118)&&(int_timer<=138))  //9ms+4.5ms=13.5mS
           	{
                 Remote_data[0]=0x00;
                 Remote_data[1]=0x00;
                 Remote_data[2]=0x00;
                 Remote_data[3]=0x00;                 
           	   Head_ok=1;
           	   int_timer=0;
               INT_TIMES=0;
               repeate_time=0; 
           	}
          if(int_timer<89) //  next interrupt
          {
             int_timer=0;
             INT_TIMES=0;
             //Repeate_key=0;
             TR0=1;            
           }
           else remote_wrong();           
   }
}

void remote_wrong(void)
{
    int_timer=0;
    INT_TIMES=0;
    Head_ok=0;
}

void head_wait(void)
{
    int_timer=0;
    INT_TIMES=0;
    Head_ok=1;
    repeate_time=0; 
    Repeate_key=0;
}

void send_repeat(void)
{
   Head_ok=0;
   repeate_time=0; 
   int_timer=0;
   
   uart_tx_data[0]=0xA5;
   uart_tx_data[1]=0x08;   
   uart_tx_data[2]=Remote_data[0];
   uart_tx_data[3]=Remote_data[1];
   uart_tx_data[4]=Remote_data[2];
   uart_tx_data[5]=Remote_data[3];
   uart_tx_data[6]=0x00;
   uart_tx_data[7]=0x00;
   uart_tx_data[8]=0x00;
   uart_tx_data[9]=0x00; 
   uart_tx_p=0;
   SBUF= uart_tx_data[uart_tx_p];
   uart_tx_p++;

    INT_TIMES=0;
   TR0=0;
}

void send_remote(void)
{
  //unsigned char i;
   Head_ok=0;
   repeate_time=0; 
   Repeate_key=0;

      	
	   uart_tx_data[0]=0xA5;
	   uart_tx_data[1]=0x08;   
	   uart_tx_data[2]=Remote_data[0];
	   uart_tx_data[3]=Remote_data[1];
	   uart_tx_data[4]=Remote_data[2];
	   uart_tx_data[5]=Remote_data[3];
	   uart_tx_data[6]=0x00;
       uart_tx_data[7]=0x00;
       uart_tx_data[8]=0x00;
       uart_tx_data[9]=0x00;                   
	  // uart_tx_data[7]=mrab1(&RAB_INIT);
	  // for(i=0;i<7;i++) uart_tx_data[i]=uart_tx_data[i]^led_table[uart_tx_data[7]];  

	   uart_tx_p=0;
	   SBUF= uart_tx_data[uart_tx_p];
	   uart_tx_p++;

    INT_TIMES=0;
   int_timer=0;
   TR0=0;
}

/**************************************************************************************************************************************************************************
** 2002.12.02用此設置計算機接收到9600的數據
**************************************************************************************************************************************************************************/
void serial_init ()     //串口初始化   0xfd=19200,0xfa=9600,0xf4=4800,0xe8=2400,0xd0=1200
{
  SCON  = 0x50;                      /* mode 1: 8-bit UART, enable receiver   */
  PCON |= 0x00; 
  ES=1;    //串行中斷允許
   /*定時器2工作在模式2用來產生波特率,不產生中斷,12M頻率,則TH1=0xFA SMOD=1*/
  // TH2=RCAP2H=0xFF; //27MHz,9600bps下的時鐘
  // TL2=RCAP2L=0xA8;  //27MHz,9600bps下的時鐘

    TH2=RCAP2H=0xFF; //27MHz,38400bps下的時鐘  
    TL2=RCAP2L=0xEB;  //27MHz,38400bps下的時鐘 
  
  ET2=0;            //定時器2的中斷是被禁止的
  T2CON=0x34;   //0011,0100, 設為波特率發生器,并啟動定時器2
}

serial () interrupt 4       //串口中斷處理
{  

   if (TI ) 
    {
      TI = 0;  
    	if (uart_tx_p<10)              
    	{
    	   SBUF= uart_tx_data[uart_tx_p];   //未發送完繼續發送
    	   uart_tx_p++;             //最后傳出去的字節位置加一
     	} 
    }
    else if (RI)  
    {
       RI = 0;	
    	if(uart_rx_p<7)
    	{
         uart_rx_data[uart_rx_p]= SBUF;            //放入數據            
         uart_rx_p++;                    //最后放入的位置加一 
        }
    	else{  //接收完8個數據
         //  uart_rx_data[0]=uart_rx_data[0]^led_table[uart_rx_data[7]];
         //  uart_rx_data[1]=uart_rx_data[1]^led_table[uart_rx_data[7]];
            uart_rx_p=0;
           if((uart_rx_data[0]==0x5A)&&(uart_rx_data[1]==0x5A))
           	{
           	switch(uart_rx_data[2])
           		{
           		   case 0x01:    //節目號
           		   	break;
           		   case 0x02:   //時間
           		   	break;
           		   case 0x03:
           		   	break;
           		   case 0x04:
           		   	break;           		   	
           		   case 0x05: //回傳數據
           		   	break;
           		   default:
           		   	break;
           		}
           	}
    	}
     }
}

void send_key(unsigned char kye_board)    //發送按鍵
{
    //unsigned char i;

	   uart_tx_data[0]=0xA5;
	   uart_tx_data[1]=0x08;   
	   uart_tx_data[2]=kye_board;      
	   uart_tx_data[3]=0x00;
	   uart_tx_data[4]=0xFF;
 	   uart_tx_data[5]=0x00; 
	   uart_tx_data[6]=0x00;
       uart_tx_data[7]=0x00;  
       uart_tx_data[8]=0x00;  
       uart_tx_data[9]=0x00;  
                
	   uart_tx_p=0;
	   SBUF= uart_tx_data[uart_tx_p];
	   uart_tx_p++;
}












?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
97超碰欧美中文字幕| 亚洲国产美女搞黄色| 国内精品伊人久久久久av一坑| 在线观看亚洲一区| 亚洲成人av一区二区三区| 欧美日韩在线观看一区二区 | av高清不卡在线| 亚洲人精品一区| 欧美亚洲国产怡红院影院| 亚洲gay无套男同| 在线成人小视频| 精品无人码麻豆乱码1区2区| 久久婷婷综合激情| 99久久精品久久久久久清纯| 亚洲一区二区欧美激情| 日韩一区二区三区视频| 国产精品1024| 一区二区在线观看视频| 欧美一区二区在线免费播放| 国产一区 二区| 亚洲精品乱码久久久久久| 欧美高清激情brazzers| 激情综合色播五月| 综合久久久久久久| 在线成人免费观看| 国产成人精品免费| 一区二区三区在线视频观看58| 欧美一区二区三区免费在线看| 色婷婷av久久久久久久| 日韩成人午夜电影| 国产精品网站导航| 91精品国模一区二区三区| 国产黄人亚洲片| 亚洲成人av福利| 国产日韩欧美在线一区| 欧美午夜电影网| 国产91清纯白嫩初高中在线观看 | 国内外精品视频| 亚洲精品视频在线观看网站| 日韩三级av在线播放| 91亚洲男人天堂| 狠狠v欧美v日韩v亚洲ⅴ| 亚洲日本免费电影| 久久综合五月天婷婷伊人| 91国内精品野花午夜精品| 九九**精品视频免费播放| 亚洲精品老司机| 日本一区二区高清| 日韩精品一区二区三区视频在线观看| 色综合色综合色综合| 国产精品一二三区| 日本亚洲三级在线| 亚洲一级二级在线| 国产精品美女久久久久久| 精品久久久久香蕉网| 欧美久久久久久久久| 91色在线porny| 国产v综合v亚洲欧| 精彩视频一区二区三区| 日本成人在线一区| 亚洲午夜久久久久久久久电影网 | 欧美一级理论片| 欧美性色欧美a在线播放| 97久久超碰国产精品| 国产丶欧美丶日本不卡视频| 久久se这里有精品| 日韩福利视频导航| 日韩黄色免费网站| 亚洲成人激情自拍| 亚洲二区视频在线| 亚洲成人综合网站| 亚洲成人你懂的| 亚洲国产日韩一级| 亚洲成人av在线电影| 亚洲国产视频一区二区| 一级精品视频在线观看宜春院 | 麻豆一区二区三区| 亚洲成a人v欧美综合天堂下载| 一区二区三区久久久| 亚洲激情在线激情| 亚洲三级视频在线观看| 亚洲欧洲精品成人久久奇米网 | 椎名由奈av一区二区三区| 国产精品久久久久久久第一福利| 亚洲国产精品传媒在线观看| 日本一区二区三区免费乱视频| 国产午夜精品久久| 国产精品美女久久久久久2018 | 久久se精品一区二区| 久久97超碰国产精品超碰| 国产真实乱子伦精品视频| 国产69精品久久99不卡| 99久久婷婷国产| 在线观看不卡一区| 91精品福利在线一区二区三区| 日韩区在线观看| 国产女同互慰高潮91漫画| 日本一区二区高清| 亚洲综合无码一区二区| 天天操天天干天天综合网| 美女视频黄频大全不卡视频在线播放 | 色婷婷久久99综合精品jk白丝| 色综合久久久久综合| 欧美日韩视频在线观看一区二区三区| 欧美丰满一区二区免费视频| 精品国产1区二区| 亚洲欧洲日韩女同| 肉肉av福利一精品导航| 国产米奇在线777精品观看| 成人中文字幕合集| 欧美视频在线不卡| 2022国产精品视频| 亚洲精品中文字幕在线观看| 日本aⅴ精品一区二区三区| 国产91露脸合集magnet| 在线精品观看国产| 久久久久久久网| 夜夜操天天操亚洲| 国产麻豆精品一区二区| 在线中文字幕一区二区| 精品国产成人在线影院| 亚洲男人天堂一区| 国内精品视频666| 欧美在线不卡一区| 国产人久久人人人人爽| 亚洲综合精品久久| 国产成人精品一区二| 欧美日韩国产在线观看| 国产亚洲欧美激情| 日本午夜精品一区二区三区电影| 国产一区二区伦理| 3d动漫精品啪啪一区二区竹菊| 欧美国产日本韩| 蜜臀av性久久久久蜜臀aⅴ四虎| 99国内精品久久| 日韩一区二区在线看片| 一区二区三区中文字幕| 国产激情视频一区二区在线观看| 在线成人免费观看| 一区二区三区免费在线观看| 国产成人精品免费网站| 91精品国产91热久久久做人人| 亚洲综合色网站| 99久久精品国产导航| 国产日产精品一区| 国产一区二区三区综合| 日韩午夜中文字幕| 亚洲成人一区二区| 在线观看欧美黄色| 亚洲欧美一区二区三区极速播放 | 国产精品毛片a∨一区二区三区| 免费xxxx性欧美18vr| 欧美剧情电影在线观看完整版免费励志电影 | 亚洲欧美在线aaa| 丁香啪啪综合成人亚洲小说| 精品久久久久久久久久久院品网| 午夜私人影院久久久久| 91精品办公室少妇高潮对白| 国产精品视频免费| 高清国产一区二区| 国产日韩欧美亚洲| 国产91丝袜在线18| 国产精品午夜免费| 高清国产一区二区| 国产精品久久免费看| 懂色av一区二区在线播放| 国产人妖乱国产精品人妖| 国产精品综合视频| 欧美国产视频在线| 成人av综合在线| 17c精品麻豆一区二区免费| 成人性生交大片免费看中文| 国产精品久久久久久久久晋中| 成人黄色大片在线观看| 亚洲色图在线视频| 色婷婷综合久久久中文一区二区| 亚洲精品久久嫩草网站秘色| 在线视频欧美精品| 五月天国产精品| 欧美一级国产精品| 国产综合成人久久大片91| 久久久午夜电影| 成人黄色综合网站| 亚洲色图一区二区| 欧美日韩国产综合视频在线观看| 婷婷中文字幕综合| 精品久久99ma| 国产成人日日夜夜| 亚洲狼人国产精品| 777欧美精品| 国产乱码精品一区二区三区忘忧草| 国产婷婷色一区二区三区在线| 99久久久精品| 五月婷婷色综合| 久久影院视频免费| 色婷婷av一区二区三区大白胸| 五月激情综合色| 久久久久久电影| 欧美在线观看视频在线| 蜜桃av一区二区在线观看|