新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 用ARM編寫的4*4鍵盤

        用ARM編寫的4*4鍵盤

        作者: 時間:2016-11-11 來源:網絡 收藏
        //功能:用四乘四鍵盤,

        #include "config.h"
        #define KEY_COL1 1<<12
        #define KEY_COL2 1<<13
        #define KEY_COL3 1<<14
        #define KEY_COL4 1<<15

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

        #define KEY_ROW1 1<<8
        #define KEY_ROW2 1<<9
        #define KEY_ROW3 1<<10
        #define KEY_ROW4 1<<11
        #define KEYO KEY_ROW1|KEY_ROW2|KEY_ROW3|KEY_ROW4 //行,設置為輸出口
        #define KEYI KEY_COL1|KEY_COL2|KEY_COL3|KEY_COL4 //列,設置為輸入口
        //按鍵抬起,則將相應的鍵值返回
        uint16 get_key(void)
        {
        uint16 scc,re;
        IO0SET=KEYI;
        IO0CLR=KEYO;
        while((IO0PIN&0xf000)==0xf000);
        delay(10);
        if((IO0PIN&0xf000)!=0xf000)
        {
        scc=0xfe00;
        while((scc&0x1000)!=0)
        {
        IO0SET=scc;
        IO0CLR=((~scc)&0xff00);
        if((IO0PIN&0xf000)!=0xf000)
        {
        re=((IO0PIN&0xf000)|0x0fff);
        while((IO0PIN&0xf000)!=0xf000);//等待按鍵抬起,返回鍵值
        return (~(scc|0x00ff)|(~re));
        }
        else scc=(scc<<1)|0x0100;
        }

        }

        return 0;
        }
        //按鍵在LCD上顯示相應的字符


        #include "config.h"
        #define KEY_COL1 1<<12
        #define KEY_COL2 1<<13
        #define KEY_COL3 1<<14
        #define KEY_COL4 1<<15

        #define KEY_ROW1 1<<8
        #define KEY_ROW2 1<<9
        #define KEY_ROW3 1<<10
        #define KEY_ROW4 1<<11
        #define KEYO KEY_ROW1|KEY_ROW2|KEY_ROW3|KEY_ROW4 //行,設置為輸出口
        #define KEYI KEY_COL1|KEY_COL2|KEY_COL3|KEY_COL4
        #define uchar unsigned char
        #define UART0_BPS 115200
        uchar keynum;
        void uart0_int(void)
        {
        uint16 FDIV;
        U0LCR=0x83;
        FDIV=(Fpclk/16)/UART0_BPS;
        U0DLM=FDIV/256;
        U0DLL=FDIV%256;
        U0LCR=0x03;

        }
        void uart0(uchar keynum)
        {
        PINSEL0=0x05;
        uart0_int();

        U0THR=keynum;
        while(!(U0LSR&0x40));



        }
        int main()
        {


        extern uint16 get_key();
        uint16 key;
        IO0DIR|=KEYO;
        int_lcd();

        while(1)
        { PINSEL0=0;
        PINSEL1=0;
        key=get_key();
        delay(10);
        switch(key)
        {
        case 0x1100:clear();send_str("0");keynum=0; break;
        case 0x2100:clear();send_str("1");keynum=1; break;
        case 0x4100:clear();send_str("2");keynum=2; break;
        case 0x8100:clear();send_str("3");keynum=3; break;


        case 0x1200:clear();send_str("4");keynum=4; break;
        case 0x2200:clear();send_str("5");keynum=5; break;
        case 0x4200:clear();send_str("6");keynum=6; break;
        case 0x8200:clear();send_str("7");keynum=7; break;

        case 0x1400:clear();send_str("8");keynum=8; break;
        case 0x2400:clear();send_str("9");keynum=9; break;
        case 0x4400:clear();send_str("A");keynum=A; break;
        case 0x8400:clear();send_str("B");keynum=B; break;

        case 0x1800:clear();send_str("C");keynum=C; break;
        case 0x2800:clear();send_str("D");keynum=D; break;
        case 0x4800:clear();send_str("傳輸");uart0(keynum); break;
        case 0x8800:clear();send_str("轉換"); break;
        default:break;

        }

        }




        }



        關鍵詞: ARM4*4鍵

        評論


        技術專區

        關閉
        主站蜘蛛池模板: 丘北县| 乐业县| 博客| 象州县| 临高县| 开封市| 广宗县| 泾阳县| 灵寿县| 大余县| 红原县| 霍城县| 金华市| 保康县| 年辖:市辖区| 建湖县| 镇江市| 汾阳市| 六安市| 清丰县| 山东省| 河曲县| 梅河口市| 邓州市| 通州市| 阳泉市| 商都县| 西昌市| 托克托县| 德令哈市| 田林县| 富蕴县| 淮安市| 隆昌县| 襄汾县| 木兰县| 武穴市| 修文县| 潼南县| 贵德县| 杂多县|