原创 4*4键盘扫描 [原创 2007-04-29 15:06:40 ] 发表者: cbqcgq

2007-6-1 09:59 1481 6 7 分类: MCU/ 嵌入式

#include<reg52.h><?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />


#include<intrins.h>


 


#define display  P1


#define keyboardCode  P2


#define uint  unsigned int


#define uchar unsigned char


 


uchar code initialKeyboardCode[] = { 0xef, 0xdf, 0xbf, 0x<?xml:namespace prefix = st1 ns = "urn:schemas-microsoft-com:office:smarttags" />7f };                   //Set the initial keyboard code.


uchar code getKeyboardCode[] = { 0xee, 0xed, 0xeb, 0xe7, 0xde, 0xdd, 0xdb, 0xd7,  //When the keyboard pressed


0xbe, 0xbd, 0xbb, 0xb7, 0x7e, 0x7d, 0x7b, 0x77 }; // down ,the mcu will get one of them.


uchar code theActionCode[] = { 0xf7, 0xf4, 0xf1, 0xf0, 0xf8, 0xf5, 0xf2, 0xf0,  //The display code, you can rewrite


0xf9, 0xf6, 0xf3, 0xf0, 0xf8, 0xf5, 0xf2, 0xf0 }; // them if you want . But the code you rewrite must correspondence


// with the ”getkeyboardCode”.


 


void KeyboardScan(void)


{


    uchar sender = 0x00;


    uchar counterOne = 0x00;


       uchar counterTwo = 0x00;


 


       for(counterOne=0x00; counterOne<4; counterOne++)


       {


              keyboardCode = initialKeyboardCode[counterOne]; //Load the initialKeyboardCode


              sender = keyboardCode;                          //Get the keyboardCode when the keyboard press down


            //perhaps a delay here.


                     for(counterTwo=0x00; counterTwo<16; counterTwo++)


                     {


                            if(sender==getKeyboardCode[counterTwo]) //When a geyKeyboardCode equal to the sender ,


                            {                                    


                                   display = theActionCode[counterTwo];//Then load the display code from the theActioncode


                    //You can write you control functions here too.


                }                          


                     }                                                    


        }   


}


 


//The test main function.


void main(void)


{


    display = 0x00;


       while(1)


       {


              KeyboardScan();


       }


}

文章评论1条评论)

登录后参与讨论

用户1154069 2007-6-1 11:54

我是搞PCB的,没看懂,要学一点才好。

相关推荐阅读
用户41648 2008-11-13 09:16
步进电机。。(转载)
虽然步进电机已被广泛地应用,但步进电机并不能象普通的直流电机,交流电机在常规下使用。它必须由双环形脉冲信号、功率驱动电路等组成控制系统方可使用。因此用好步进电机却非易事,它涉及到机械、电机、电子及计算...
用户41648 2008-07-22 14:17
转载 3V与5V混合系统中逻辑器接口问题
3V与5V混合系统中逻辑器接口问题  3V与5V混合系统中逻辑器接口问题1 引言近年来,随着便携式数字电子产品棗笔记本计算机、数字式移动电话、寻呼机、手持式测试仪表等的迅速发展,要求使用体积小、功耗低...
用户41648 2008-07-03 15:16
GB ma
GB码 GB 即"国标"的汉语拼音缩写,为中华人民共和国国家标准的意思. 国标编码就是中华人民共和国信息交换汉字编码标准(GB2312-80), 在此标准中制定了每一个汉字及非汉字符号的编码。规定将汉...
用户41648 2008-06-30 14:21
俄文866编码及其与ANSI编码的转换
АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЫЬЭЮЯабвгдежзийклмнопрстуфхцчшщыьэюяёъ(俄文866编码,用一个字节表示,在WORD中用西里尔文(DOS))80...
用户41648 2008-05-07 16:15
液晶扫描一帧的行数N的倒数叫占空比,半选择点和选择点的电压比叫偏压。
液晶扫描一帧的行数N的倒数叫占空比,半选择点和选择点的电压比叫偏压。很抽象?具体的说液晶是n行的(com端的数目),占空比就是1/n,在电压一定的情况下,行数的增加意味着占空比下降,使液晶的显示质量下...
用户41648 2008-03-21 09:30
区位码和国标码转换
国标与机内码的转换   国标码并不等于区位码,它是由区位码稍作转换得到,其转换方法为:先将十进制区码和位码转换为十六进制的区码和位码,;这样就得了一个与国标码有一个相对位置差的代码,;再将这个代码的第...
我要评论
1
6
关闭 站长推荐上一条 /2 下一条