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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 4451|回復: 1
收起左側

單片機學習筆記(八)PS/2電腦鍵盤

[復制鏈接]
ID:108531 發表于 2016-3-12 16:47 | 顯示全部樓層 |閱讀模式
PS/2鍵盤是一種編碼鍵盤,只需要一根數據線和一根時鐘線就可以完成數據的輸入。
實驗程序設計為,按鍵盤上的"J"鍵,繼電器閉合。
C語言源程序:
#include <reg52.h> //52單片機頭文件包含
#include <intrins.h>//常用移位函數頭文件包含
sbit key_data=P1^5; //定義鍵盤接口的數據腳
sbit key_clk=P3^2;//定義鍵盤接口的時鐘腳
sbit JDQ=P2^4; //定義繼電器連接引腳
bit BF=0; //定義位變量BF
unsigned char keyv=0; //定義無符號字符變量keyv并賦初值0
unsigned int intNum=0;//定義無符號整型變量intNum并賦初值0
unsigned char key_up=1;//定義無符號字符變量key_up并賦初值1
void ldedata(unsigned char scandata);//按鍵數據處理函數
void main() //主函數
{
    EA=1; //打開總中斷
    EX0=1;//打開0號中斷
    IT0=1;//中斷方式為下降沿觸發方式
    do{    //do-while循環
        if(BF)   //如果有鍵按下
            ldedata(keyv);//處理按鍵數據
        else
            EA=1;//否則打開中斷
    }while(1); //總為真不斷循環
}
void key_scan() interrupt 0  //中斷函數鍵盤輸入key_scan 中斷入口0
{
    if((intNum>0)&&(intNum<9))    //如果intNum>0并且intNum<9 就執行if里面的語句
    {
        keyv=keyv>>1;     //將字符變量keyv右移一位
        if(key_data)      //判斷key_data 是否為真 即是否有數據
            keyv=keyv|0x80;    //有就將keyv與0x80進行或運算再賦值給keyv
    }
    intNum++;//將intNum的值自加1
    while(!key_clk)//鍵值是否處理完
    if(intNum>10)//判斷intNum是否大于10
    {
        intNum=0;//將intNum賦值為0
        BF=1;//將BF賦值為1
        EA=0;//關閉總中斷
    }
}
void ldedata(unsigned char scandata) //鍵盤數據處理函數
{
    if(!key_up) //鍵盤松開時
    {
        switch(scandata){ //處理鍵盤數據
        case 0xf0://沒按下任何鍵
            key_up=1;//按下
            break;//跳出
        case 0x12://左邊SHIFT
            break;//跳出
        case 0x59://右邊SHIFT
            break;//跳出
        default://缺省處理
            P1=~scandata;//將按下的鍵碼輸出給P2口驅動燈亮,因發光二極采用共陽級,所以取反輸出
            if(scandata==0x3b)//當按下J鍵時
                JDQ=0;//打開繼電器
            if(scandata==0x29){//當按下空格鍵時
                JDQ=1;//關閉繼電器
            }
            break;//跳出
        }
    }
    else{ //否則
        key_up=0;//按鍵按下
        switch(scandata){//處理按鍵
        case 0x12://左邊SHIFT
            break;//跳出
        case 0x59://右邊SHIFT
            break;//跳出
        }    
    }
    BF=0;//標識字符表示處理完了
}
//實驗結果 按下鍵盤j鍵繼電器打開 按下空格鍵繼電器關閉

回復

使用道具 舉報

ID:184005 發表于 2019-6-29 16:35 | 顯示全部樓層
學習學習
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 成人网战 | 免费一级黄色录像 | 69国产精品 | 欧美日韩免费在线 | 欧美日韩小视频 | 成av人片一区二区三区久久 | 五月天黄色网 | 免费特级毛片 | 手机av在线免费观看 | av片在线看| 欧美三级又粗又硬 | 久久精品一区二区三区四区 | 91久久国产综合久久91精品网站 | 欧美九九九 | 狠狠做深爱婷婷综合一区 | 欧美在线视频一区 | 欧美在线观看一区 | 成人福利在线 | 免费看黄色大片 | 黄色精品网站 | 欧美视频一二三区 | 老女人性生活视频 | 亚洲欧美视频 | 国产精品日韩在线 | 日韩女优在线 | 天天干天天看 | 日韩欧美中文在线 | 97在线观看免费视频 | 国产亚洲视频在线观看 | 国产黄a三级三级三级看三级男男 | 超碰免费观看 | 亚洲国产精品久久久久久久 | 久久艹精品 | 亚洲17p | 亚洲精品乱码久久久久久动漫 | 毛片在线观看网站 | 视频一区二区在线播放 | 日韩不卡一区 | 久久免费国产 | 国产毛片毛片 | 久久久亚洲一区 |