?? keyscan.lst
字號:
C51 COMPILER V7.08 KEYSCAN 05/12/2007 17:30:02 PAGE 1
C51 COMPILER V7.08, COMPILATION OF MODULE KEYSCAN
OBJECT MODULE PLACED IN keyscan.OBJ
COMPILER INVOKED BY: D:\工具安裝目錄二\Keil C51\C51\BIN\C51.EXE keyscan.c BROWSE DEBUG OBJECTEXTEND
line level source
1 #include <reg52.h>
2 //#include <at89x52.h>
3 //unsigned char code BCD[]={0x3f,0x06,0x5b,0x4f, //此處是將0-F轉換成相應的BCD碼
4 // 0x66,0x6d,0x7d,0x07,
5 // 0x7f,0x6f,0x77,0x7c,
6 // 0x39,0x5e,0x79,0x71};
7 //unsigned char code KEY[]={0x00,0x00,0x01,0x02,0x03,//此處是為使程序通用,當鍵值不是按
8 // 0x04,0x05,0x06,0x07,//這個排列時,把此表更改即可
9 // 0x08,0x09,0x0a,0x0b,//最前面的那個0x00是為了查表方便,
10 // 0x0c,0x0d,0x0e,0x0f};//因為鍵值是從1開始的
11
12 sfr key_port=0x90; //定義P1口為鍵盤掃描口
13 bit key_ok=0; //有鍵按下的標志
14
15 /*************延時子程序*************
16 ****調用一次用時18微秒,t每加1,用時增加6微秒*/
17 void delay(unsigned char t)
18 {
19 1 while(t--);
20 1 }
21
22
23 unsigned char r_left(unsigned char x)//循環左移一位
24 {
25 1 x<<=1;
26 1 x++;
27 1 return(x);
28 1 }
29
30 /*************粗判有無鍵按下**********
31 ****有鍵按下則將key_ok置1************/
32 void scan_full(void)
33 {
34 1 unsigned char temp;
35 1 key_port=0xf0; //低半字節為行線,高半字節為列線
36 1 temp=P1;
37 1 if(temp!=0xf0)
38 1 key_ok=1;
39 1 else key_ok=0;
40 1 }
41 /************鍵盤掃描程序*************************
42 ****功能:返回鍵值,當無鍵按下時,返回0*************/
43 unsigned char key_scan(void)
44 {
45 1 unsigned char temp,count=0x01,key_value;//按鍵返回值
46 1 unsigned char x_scan=0xfe,y_scan=0xef;//行、列掃描碼
47 1 unsigned char i,j,y; //行數和列數
48 1 while(1)
49 1 {
50 2 scan_full(); //粗判是否有鍵按下
51 2 if(key_ok==1)
52 2 {
53 3 key_ok=0;
54 3 delay(200); //延時去抖動
55 3 scan_full(); //再次粗判是否有鍵按下
C51 COMPILER V7.08 KEYSCAN 05/12/2007 17:30:02 PAGE 2
56 3 if(key_ok==1)
57 3 {
58 4 for(i=0;i<4;i++) //掃描4行
59 4 {
60 5 key_port=x_scan;
61 5 for(j=0;j<4;j++) //每行4列
62 5 {
63 6 temp=key_port;
64 6 temp=temp&0xf0;
65 6 y=y_scan&0xf0;
66 6 if(temp==y)
67 6 {
68 7 while(key_ok!=0)//等待按鍵松開
69 7 {
70 8 scan_full();
71 8 }
72 7 key_value=count;
73 7 return(key_value);//找到鍵值,馬上返回
74 7 }
75 6 else
76 6 {
77 7 count++;
78 7 y_scan=r_left(y_scan);
79 7 }
80 6 }
81 5 y_scan=0xef; //掃描完一列,重新對列掃描量賦初值
82 5 x_scan=r_left(x_scan);//行掃描碼左移一位,掃描下一行
83 5 }
84 4 }
85 3 }
86 2 return(key_value);//沒鍵按下,返回0
87 2 }
88 1 }
89
90 //unsigned char key(void)
91 //{
92 // unsigned char x;
93 // unsigned char y;
94 // x=key_scan();
95 // return(x);
96 //y=KEY[x];
97 //return y;
98 //}
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 114 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = ---- 1
IDATA SIZE = ---- ----
BIT SIZE = 1 ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -