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

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

?? ps2鍵盤設計---c51.txt

?? PS2鍵盤設計---C51程序
?? TXT
字號:
PS2鍵盤的設計---C51程序

#include <reg51.H>
#define Frequence 11   //晶振頻率單位是MHZ
#define DELAY 10*Frequence/6 //發送程序延時
#define SLEEP 8*Frequence/6  //發送程序延時
sbit KBCLK="P3"^0; //鍵盤時鐘線
sbit KBDATA="P3"^1; //鍵盤數據線

bit bat(void);  //基本保證測試無錯誤返回0,有錯返回1
unsigned char buf_length(); //返回緩沖區數據個數
bit command_s();  //鍵盤命令檢查,有命令要接受返回1
void clr_buf(void); //清鍵盤緩沖區
void del_head(); //刪除緩沖區頭
unsigned char exist(unsigned char); 
//檢查鍵盤緩沖區中是否有與參數相等數,有則返回位置,無則返回255

//bit emputy(); //檢查鍵盤緩沖區是否空,是返回1
unsigned char get_head(); //取鍵盤緩沖區頭,頭指針不變

unsigned char get_head_f();
//取緩沖區頭對應標記,標記為0表示對應鍵已經松下

bit insert(unsigned char,unsigned char);
//插入緩沖區,并設置對應標記,成功則返回1

void ini_timer01(); //定時器初始化
void receive_process(); //接收鍵盤命令并處理
void reset(); //軟件復位
unsigned char scankb(unsigned char); //掃描第N行,返回列直
void send_buf();   //發送緩沖區掃描碼

bit send_code(unsigned char _KeyNo,bit flag); 
//發送按鍵掃描碼,flag=0發送斷開碼,flag=1發送接通碼

bit send(unsigned char); //發送數據

void set_default(); //設置缺省值
void set_timer1(); //復位定時器1

void set_scan_v(unsigned char); //設置掃描速度(拍發速率、延遲時間)
void set_flag(unsigned char); //設置緩沖區對應標記
void set_led(unsigned char); //設置LED
void secret(unsigned char);
void scan(void);
unsigned char get_end();
bit emputy(void);

//-----------------------函數聲明,變量定義--------------------------------------------------------
#include <reg51.h>
#define KEY P1
unsigned char key_code;           //鍵值
unsigned char key_buf[8];         //按鍵緩沖區
unsigned char key_COUNT;          //按鍵計數器
unsigned char COUNT_TI;           //定時中斷計數
//-----------------------變量聲明---------------------------------------------------------------------
void system_init(void );         //初始化,設置定時器0的工作方式,供主程序調用
void TIMER0_SCANkey();           //定時器0中斷處理函數
bit judge_hitkey();              //判斷是否有鍵按下,有返回1,沒有返回0
unsigned char scan_key();             //掃描鍵盤,返回鍵值(高四位代表行,低四位代表列)
void key_manage(unsigned char keycode); //按鍵處理
//...........每個按鍵對應一個處理程序
//--------------------------------------------------------------------------------------------------
// 函數名稱: scan_key
// 函數功能: 掃描鍵盤,返回鍵值(高四位代表行,低四位代表列)
//            無鍵按下返回0
//--------------------------------------------------------------------------------------------------
unsigned char scan_key()              //掃描鍵盤,返回鍵值(高四位代表行,低四位代表列)
  {
   unsigned char scancode,keycode,keycode_line,keycode_row;
   scancode="0xF0";                      //列置低,行置高
   KEY="scancode";                       //輸入掃描碼,掃描行
   keycode_line=KEY;
   scancode="0xF0";                        //列置高,行置低
   KEY="scancode";                       //輸入掃描碼,掃描列
   keycode_row=KEY;
   keycode=(((keycode_line<<4)&0xF0)|(keycode_row&0x0F));
   return(keycode);
   }
//--------------------------------------------------------------------------------------------------
// 函數名稱: Timer0_init()
// 函數功能: 初始化設置
//            設定INT0的工作方式
//--------------------------------------------------------------------------------------------------
void Timer0_init(void )  
             {
              TMOD="0x20"; //定時器0工作在方式2的定時模式
              ET0=1;     //定時器0中斷允許
              TH0=0;
              TL0=0;
              TR0=1;     //定時器0開始計數
              EA="1";      //系統中斷允許
              }
//--------------------------------------------------------------------------------------------------
// 函數名稱: TIMER0_intrupt
// 函數功能: 定時器0中斷處理程序 按鍵定時查詢
//--------------------------------------------------------------------------------------------------
void TIMER0_SCANkey() interrupt 1 using 1
              {
               EA="0";                        //系統中斷禁止
      if((++COUNT_TI)%30==0)
      {
      switch(COUNT_TI/30)
      {
       case 1:if(scan_key()==0) 
               COUNT_TI=0;          //無鍵按下,計數值歸零
        break;
       case 2:break;
       case 3:if(scan_key()==0)
              COUNT_TI=0;           //無鍵按下,計數值歸零,上次按鍵未擾動
        else 
        key_code=scan_key();  //又有效建,獲取鍵值
       break;
          default:if(scan_key()==0)    //等待按鍵釋放
              key_manage(key_code);  //有一個有效按鍵,調用按鍵處理程序
        }
     }
  EA=1;
      }
//--------------------------------------------------------------------------------------------------
// 函數名稱: key_manage
// 函數功能: 有效按鍵處理
//            按鍵計數器加1,緩存區數據后移1位
//--------------------------------------------------------------------------------------------------
void key_manage(unsigned char keycode)
      {
      unsigned char i;
   for(i=7;i>=0;i--)
   {
    key_buf[i]=key_buf[i-1];       //緩沖區內數據后移1位
   }
   key_buf[0]= keycode;            //將鍵值送入緩沖區
      key_COUNT++;                   //按鍵計數器加一
   }


 

//-----------------------函數聲明,變量定義--------------------------------------------------------
#include <reg51.h>
#define KEY P1
sbit  DATA="P3"^1;       //數據線
sbit  CLK="P3"^2;        //時鐘線
unsigned char key_buf[8];         //按鍵緩沖區
unsigned char key_COUNT;          //按鍵計數器
//--------------------------------------------------------------------------------------------------
// 函數名稱: delay
// 入口參數: N
// 函數功能:延時子程序,實現(16*N+24)us的延時 
// 系統采用11.0592MHz的時鐘時,延時滿足要求,其它情況需要改動
//--------------------------------------------------------------------------------------------------
  void delay(unsigned  int N)  
  {
  int i; 
  for(i=0;i<N;i++);
  }
//--------------------------------------------------------------------------------------------------
// 函數名稱: CAL_jiaoyan
// 函數功能: 計算校驗位
//--------------------------------------------------------------------------------------------------
bit CAL_jiaoyan(unsigned char byte_data)
   {
   //
    }
//--------------------------------------------------------------------------------------------------
// 函數名稱: SEND_byte
// 函數功能: 發送一子節數據
//--------------------------------------------------------------------------------------------------
void SEND_byte(unsigned char byte_data)
      {
  unsigned char i,temp;
   if(CLK==0)             //時鐘線為低

   temp="byte"_data;
   CLK="1";
   DATA="0";
   delay(0);
   CLK="0";           //發送起始位
   for(i=0;i<8;i++)
      {
            delay(0);
         CLK="1";  
   DATA=(temp&0x01);  //發送數據
            byte_data=byte_data>>1;  
   delay(0);
   CLK=0; 
    }
      delay(0);
         CLK="1";  
   DATA=CAL_jiaoyan(byte_data); //發送校驗位
          delay(0);
   CLK=0; 
             delay(0);
         CLK="1";  
   DATA=1;                     //發送結束位
          delay(0);
   CLK=0;  
   }
//--------------------------------------------------------------------------------------------------
// 函數名稱: RECEIVE_byte
// 函數功能: 接收一子節數據
//--------------------------------------------------------------------------------------------------
unsigned char  RECEIVE_byte()
      {
     unsigned char byte_data,i;
   CLK="0";
   delay(0);
   CLK="1";                   //接收起始位,丟棄
   for(i=0;i<8;i++)
      {
            delay(0);
         CLK="0";  
   delay(0);
   CLK=1;
   byte_data=byte_data>>1;
   if(DATA=1)
            byte_data=byte_data|0x80;
   else 
   byte_data=byte_data&0x7F; //接收8位數據
     }
   for(i=0;i<2;i++)
      {
            delay(0);         //接收校驗位和結束位
         CLK="0";  
   delay(0);
   CLK=1;
   }   
   return(byte_data);
 }
//--------------------------------------------------------------------------------------------------
// 函數名稱: manage
// 函數功能: 主機命令處理函數
//--------------------------------------------------------------------------------------------------
void manage(unsigned char rec_data)
    {
 }
//--------------------------------------------------------------------------------------------------
// 函數名稱: SEND_keydata
// 函數功能: 發送按鍵值到主機
//--------------------------------------------------------------------------------------------------
void SEND_keydata()
     {
  unsigned char ASCII_code;       //
  // ASCII_code=judge_key(key_buf[key_COUNT]);  //判斷鍵值,按鍵編碼成ASCII碼
  SEND_byte(ASCII_code);
  key_COUNT--;
  }
//--------------------------------------------------------------------------------------------------
// 函數名稱: 主程序
// 函數功能: 循環查詢主機狀態
//--------------------------------------------------------------------------------------------------
void main()
    {
 unsigned char rec_data;
 while(1)
 {
 if(CLK==0&&DATA==0)
    {
 rec_data=RECEIVE_byte();       //接收主機鍵盤
    manage(rec_data);              //指令處理函數
 }
 if(key_COUNT!=0&&CLK==1)     //有按鍵等待處理
                                       //線路空閑
   SEND_keydata();
    }
 }

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲.国产.中文慕字在线| 成人av网址在线观看| 亚洲欧美国产77777| 日韩视频免费观看高清在线视频| 色呦呦国产精品| 色综合久久66| 久久欧美一区二区| 国产精品二三区| 亚洲国产精品嫩草影院| 午夜视黄欧洲亚洲| 男人操女人的视频在线观看欧美| 美腿丝袜亚洲一区| 国产乱码精品一区二区三区忘忧草| 国产在线播放一区三区四| 粉嫩13p一区二区三区| 成人免费电影视频| 91国偷自产一区二区使用方法| 欧美三级蜜桃2在线观看| 91精品国产免费| 久久久久97国产精华液好用吗| 日韩精品一二三| 国产一区二区三区在线观看免费视频| 91网站在线观看视频| 欧美日本在线一区| 精品乱人伦一区二区三区| 国产精品九色蝌蚪自拍| 国产乱码精品1区2区3区| 日韩一区二区不卡| 日本成人在线一区| 一本色道久久综合亚洲精品按摩 | 视频一区视频二区中文字幕| 成人综合婷婷国产精品久久免费| 精品卡一卡二卡三卡四在线| 麻豆91小视频| 精品国产91洋老外米糕| 亚洲免费在线观看视频| 91在线视频观看| 欧美刺激午夜性久久久久久久 | 国产精品三级久久久久三级| 亚洲国产欧美日韩另类综合| 91福利视频久久久久| 亚洲精品国产无套在线观| 亚洲欧美日韩中文播放| 色哟哟欧美精品| 亚洲一区二区欧美| 国产不卡视频一区二区三区| 国产午夜精品一区二区| 亚洲成人av在线电影| 69堂亚洲精品首页| 亚洲精品视频在线观看网站| 91成人在线免费观看| 亚洲成人综合在线| 欧美tk—视频vk| 成人爱爱电影网址| 亚洲欧美另类图片小说| 777午夜精品免费视频| 麻豆精品精品国产自在97香蕉| 亚洲精品一区二区在线观看| 风间由美一区二区三区在线观看 | 亚洲三级在线免费观看| 国产一二三精品| 中文字幕一区二区三区不卡在线| 国产成人自拍网| 精品国产91久久久久久久妲己| 国产一区二区在线看| 亚洲色图欧洲色图婷婷| 欧美日韩精品二区第二页| 精品中文av资源站在线观看| 欧美一区二区免费视频| 国产盗摄视频一区二区三区| 一区二区三区欧美激情| 91国产免费观看| 久久精品国产亚洲a| 日韩一级免费一区| 99精品偷自拍| 麻豆精品在线看| 国产精品成人午夜| 日韩欧美亚洲另类制服综合在线| 丁香一区二区三区| 蜜臀久久久99精品久久久久久| 国产亚洲精品7777| 欧美一区二区视频在线观看2022| 国产aⅴ精品一区二区三区色成熟| 伊人婷婷欧美激情| 久久免费视频色| 欧美日韩精品高清| 91免费观看在线| 国产一区二区三区最好精华液| 亚洲在线视频网站| 欧美激情在线看| 成人动漫中文字幕| 蜜臂av日日欢夜夜爽一区| 亚洲一区二区视频在线| 中文字幕巨乱亚洲| 2020国产精品久久精品美国| 国产精品一二三四五| 午夜精品福利视频网站| 亚洲人成电影网站色mp4| 欧美国产日韩亚洲一区| 欧美精品一区男女天堂| 在线播放日韩导航| 国产麻豆一精品一av一免费| 日韩在线一区二区三区| 亚洲成人黄色小说| 一区二区三区四区亚洲| 亚洲人123区| 国产精品的网站| 中文文精品字幕一区二区| 精品国产免费视频| 欧美xxxxx牲另类人与| 欧美一区二区三区免费观看视频| 91成人免费网站| 在线视频欧美区| 国产资源在线一区| 亚洲欧美另类久久久精品 | 亚洲超碰97人人做人人爱| 亚洲欧洲日韩女同| 日韩理论在线观看| 一区二区三区欧美| 亚洲福利视频三区| 蜜臀av在线播放一区二区三区| 日韩 欧美一区二区三区| 日韩国产高清影视| 久久99国产精品免费| 久久精品国产成人一区二区三区 | 夜夜精品视频一区二区| 一区二区久久久| 亚洲成人av福利| 日韩av电影免费观看高清完整版| 日日噜噜夜夜狠狠视频欧美人| 日一区二区三区| 美女性感视频久久| 国产一区二区不卡在线| 国产麻豆成人传媒免费观看| 国产成人在线免费| 99视频有精品| 久久激五月天综合精品| 九九视频精品免费| 国产成人av影院| 日本道免费精品一区二区三区| 欧美系列在线观看| 91亚洲男人天堂| 欧美日本一区二区在线观看| 日韩欧美视频在线| 国产精品久久久久影视| 亚洲一二三区视频在线观看| 视频一区视频二区中文| 久草在线在线精品观看| 国产大片一区二区| 欧美视频一区在线| 精品国产不卡一区二区三区| 欧美激情艳妇裸体舞| 亚洲国产裸拍裸体视频在线观看乱了| 欧美bbbbb| 91丨porny丨国产入口| 91精品国产综合久久久久久久| 久久亚洲一区二区三区四区| 亚洲欧美日韩在线| 看片的网站亚洲| 91无套直看片红桃| 精品国产免费一区二区三区香蕉| 亚洲欧洲精品成人久久奇米网| 日韩精品亚洲一区二区三区免费| 国产99久久久国产精品潘金| 精品视频1区2区| 国产精品久久久久影院| 男女男精品网站| 色悠悠久久综合| 日本一区二区三区视频视频| 国产精品久久久久久一区二区三区| 午夜欧美电影在线观看| 91亚洲精品一区二区乱码| 欧美不卡在线视频| 亚洲综合图片区| 成人美女在线观看| 精品欧美一区二区三区精品久久| 亚洲一级片在线观看| a级精品国产片在线观看| 久久久久97国产精华液好用吗| 婷婷久久综合九色国产成人 | 国产成人免费在线观看不卡| 欧美丰满美乳xxx高潮www| 亚洲美女偷拍久久| 99精品欧美一区二区三区小说| 久久久久久久一区| 免费在线观看不卡| 在线不卡免费欧美| 午夜精品国产更新| 欧美日韩黄视频| 亚洲图片自拍偷拍| 色婷婷亚洲综合| 亚洲欧美福利一区二区| 91视视频在线观看入口直接观看www| 国产丝袜欧美中文另类| 久久av资源网| 精品久久久久久最新网址| 蜜桃av一区二区在线观看| 欧美一区二区日韩一区二区| 丝袜诱惑制服诱惑色一区在线观看| 色综合久久中文综合久久97|