新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 復習一下PS2鍵盤解碼

        復習一下PS2鍵盤解碼

        作者: 時間:2016-12-02 來源:網絡 收藏
        #include

        #define uchar unsigned char
        #define uint unsigned int
        /**************1602部分******************/
        sbit lcden=P1^2;
        sbit lcdrs=P1^0;
        sbit lcdrw=P1^1;
        sbit psdat=P3^4;
        sbit psclk=P3^3;
        /*char code Tab[]={0,1,2,3,4,5,6,7,8,
        9,A,B,C,D,E,F};*/
        char code Tab[]="0123456789abcdef";
        uchar key[3];
        uchar numbit,keyv,keynum,m,n,o,p,q,r;
        void delay(uint z) //延時子程序
        {
        uint x,y;
        for(x=z;x>0;x--)
        for(y=110;y>0;y--);
        }

        本文引用地址:http://www.104case.com/article/201612/324697.htm

        void write_com(uchar com)//定義一個帶參數的寫命令子程序
        {
        lcdrs=0; //1602的rs為0時,接收命令,為1時接收數據
        P0=com;//把void write_com(uchar com)中的COM中的數據給P0口
        delay(2);
        lcden=1;
        delay(2);
        lcden=0;
        delay(2);
        }

        void init_1602()//定義一個初始化子程序
        {
        lcden=0;
        lcdrw=0;
        write_com(0x38);//調用 write_com子程序并把0x38賦給P0口,顯示模式打開
        write_com(0x0f);//調用 write_com子程序并把“開顯示,顯示光標,光標閃爍”指令碼賦給P0口
        write_com(0x06);//調用 write_com子程序并把“地址指針加1,整屏不移動”指令碼賦給P0口
        write_com(0x80);//數據指針初始化,讓指針指向最左端,顯示從第一行開始
        write_com(0x01);//調用 write_com子程序并把"清零指"令碼賦給P0口
        }

        void write_dat(uchar dat)//定義一個帶參數的寫數據子程序
        {
        lcdrs=1; //1602的rs為0時,接收命令,為1時接收數據
        P0=dat;//把void write_shu(uchar shu)中的COM中的數據給P0口
        delay(2);
        lcden=1;
        delay(2);
        lcden=0;
        delay(2);
        }

        /******************/

        void main()
        {
        init_1602();
        IT1=1;//接P3^3,所以用外部中斷1,用下降沿IT1=0是用低電平
        EX1=1;// 打開外部中斷1。
        EA=1;//打開總中斷
        while(1)
        {
        if(keynum==3)
        {
        keynum=0;
        m=key[0]/16;
        n=key[0]%16;
        o=key[1]/16;
        p=key[1]%16;
        q=key[2]/16;
        r=key[2]%16;
        write_com(0x80);
        write_dat(Tab[m]);
        write_dat(Tab[n]);
        write_dat(Tab[o]);
        write_dat(Tab[p]);
        write_dat(Tab[q]);
        write_dat(Tab[r]);
        }

        }
        }
        void int1() interrupt 2
        {
        if((numbit>0)&&(numbit<9))
        {
        keyv=keyv>>1;
        if(psdat)
        keyv=keyv|0x80;
        }
        numbit++;
        if(numbit>10)

        {
        numbit=0;
        key[keynum]=keyv;
        keynum++;
        }
        }



        關鍵詞: PS2鍵盤解

        評論


        技術專區

        關閉
        主站蜘蛛池模板: 新闻| 西畴县| 马关县| 农安县| 绩溪县| 泸水县| 滨州市| 志丹县| 土默特左旗| 神农架林区| 浪卡子县| 长春市| 滁州市| 南丹县| 甘洛县| 广灵县| 牡丹江市| 绥滨县| 新巴尔虎右旗| 临沂市| 伊川县| 凉城县| 玉屏| 个旧市| 东明县| 高雄县| 渝中区| 恩施市| 和硕县| 兴文县| 塔河县| 刚察县| 扶余县| 绵竹市| 且末县| 交口县| 连江县| 灵川县| 瑞丽市| 鲜城| 怀仁县|