?? 4x4.lst
字號:
C51 COMPILER V8.02 4X4 06/23/2009 00:01:31 PAGE 1
C51 COMPILER V8.02, COMPILATION OF MODULE 4X4
OBJECT MODULE PLACED IN 4x4.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE 4x4.c BROWSE DEBUG OBJECTEXTEND
line level source
1 /*行線接P1.0-P1.3,列線接P1.4-P1.7。
2
3
4 根據掃描鍵盤返回的鍵值編碼查鍵值編碼表,從而得到鍵值并送數碼管顯示。
5
6 開機時,數碼管顯示“-”。
7
8 當鍵按下時,數碼管顯示按下鍵的鍵值,蜂鳴器響一聲。*/
9
10 #include <reg52.h>
11 #include <intrins.h>
12
13 #define uchar unsigned char
14 #define uint unsigned int
15
16 sbit BEEP = P3^6; //蜂鳴器驅動線
17
18 uchar key;
19
20 unsigned char code disp_code[]={
21 0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,
22 0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e,0xbf};
23
24 unsigned char code key_code[]={
25 0xee,0xde,0xbe,0x7e,0xed,0xdd,0xbd,0x7d,
26 0xeb,0xdb,0xbb,0x7b,0xe7,0xd7,0xb7,0x77 };
27
28 /**********************************************************
29
30 延時子函數
31
32 **********************************************************/
33 void delayms(uint ms)
34 {
35 1 uchar t;
36 1 while(ms--)
37 1 {
38 2 for(t = 0; t < 120; t++);
39 2 }
40 1 }
41
42 /**********************************************************
43
44 x*0.14MS 延時子函數
45
46 **********************************************************/
47 void delay0(uchar x)
48 {
49 1 uchar i;
50 1 while(x--)
51 1 {
52 2 for (i = 0; i<13; i++) {;}
53 2 }
54 1 }
55
C51 COMPILER V8.02 4X4 06/23/2009 00:01:31 PAGE 2
56 /**********************************************************
57
58 蜂鳴器驅動子函數
59
60 **********************************************************/
61 void beep()
62 {
63 1 uchar i;
64 1 for (i=0;i<180;i++)
65 1 {
66 2 delay0(5);
67 2 BEEP=!BEEP; //BEEP取反
68 2 }
69 1 BEEP=1; //關閉蜂鳴器
70 1 delayms(250); //延時
71 1 }
72
73 /**********************************************************
74
75 鍵盤掃描子函數
76
77 **********************************************************/
78 uchar keyscan()
79 {
80 1 uchar scan1,scan2,keycode,j;
81 1
82 1 P1=0xf0;
83 1 scan1=P1;
84 1 if((scan1&0xf0)!=0xf0) //判鍵是否按下
85 1 {
86 2 delayms(30); //延時30ms
87 2 scan1=P1;
88 2 if((scan1&0xf0)!=0xf0) //二次判鍵是否按下
89 2 {
90 3 P1=0x0f;
91 3 scan2=P1;
92 3 keycode=scan1|scan2; //組合成鍵編碼
93 3
94 3 for(j=0;j<=15;j++)
95 3 {
96 4 if(keycode== key_code[j]) //查表得鍵值
97 4 {
98 5 key=j;
99 5 return(key);
100 5 }
101 4 }
102 3 }
103 2 }
104 1 else P1=0xff;
105 1
106 1 return (16);
107 1 }
108
109 /**********************************************************
110
111 判鍵是否按下子函數
112
113 **********************************************************/
114 void keydown()
115 {
116 1 P1=0xf0;
117 1 if((P1&0xf0)!=0xf0)
C51 COMPILER V8.02 4X4 06/23/2009 00:01:31 PAGE 3
118 1 {
119 2 keyscan();
120 2 P0=disp_code[key];
121 2 beep();
122 2 }
123 1 }
124
125 /**********************************************************
126
127 主函數
128
129 **********************************************************/
130 main()
131 {
132 1 P0 = 0xbf;
133 1 P2 = 0x7f; //數碼管顯示"-"
134 1 P1 = 0xff;
135 1
136 1 while(1)
137 1 {
138 2 keydown();
139 2 }
140 1 }
141
142 /*********************************************************/
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 165 ----
CONSTANT SIZE = 33 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 1 ----
IDATA SIZE = ---- ----
BIT SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -