新聞中心

        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鍵盤解

        評論


        技術專區

        關閉
        主站蜘蛛池模板: 瑞昌市| 明星| 通山县| 门头沟区| 安乡县| 汽车| 拉孜县| 盐边县| 新干县| 枣强县| 新津县| 鱼台县| 正镶白旗| 石渠县| 密云县| 天台县| 肃北| 巴彦淖尔市| 桦甸市| 孝昌县| 荔浦县| 思南县| 喀喇| 武邑县| 珲春市| 汝南县| 南丰县| 永康市| 青田县| 黑河市| 云林县| 玛纳斯县| 平武县| 潮安县| 商河县| 永寿县| 江山市| 绥阳县| 阳城县| 会同县| 三原县|