📄 dengxiang.lst
字号:
C51 COMPILER V7.06 DENGXIANG 12/26/2008 20:14:01 PAGE 1
C51 COMPILER V7.06, COMPILATION OF MODULE DENGXIANG
OBJECT MODULE PLACED IN dengxiang.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE dengxiang.c BROWSE DEBUG OBJECTEXTEND
stmt level source
1 #include<stdio.h> //通用4*4小键盘程序,可以用数码管显示键值
2 #include<at89x52.h> //可用于51单片机,晶振频率11.0592MHZ
3
4 #define uchar unsigned char
5 #define uint unsigned int
6
7 int Hang;
8 int Lie;
9 int cs;
10
11 int Yuan_ma[5]={1,2,3,4,5};
12 int New_ma[5];
13 int Mazhi[4][4]={{1,2,4,3},{5,6,8,7},{9,0,11,10},{12,13,15,14}};
14 /**************************************************************/
15 // 0 1 3 2
16
17 // 1 2 3 4 .........
18 // 5 6 7 8 ......... .
19 // 9 0 . > ......... . P2接通用四乘四小键盘
20 // EXE MENU ESC < .........
21
22 // |-----|
23 // | | ........
24 // |-----| ........ .
25 // | | ........ . P3 接数码管显示
26 // |-----| . ........
27
28 // .-. .
29 // . ? . .......... P2_0接LED显示按下状态
30 // .=. .
31
32 //程序作者:王庆波,黑龙江大学电子工程学院06级,爱好者工作室,borlittle,Q:634172943
33 /*************************************************************/
34 int mz;
35 uchar code dis_7[16]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0x7F,0x88,0xc6,0xa1,0x86,0x83};
36 /*对应键值为 0 1 2 3 4 5 6 7 8 9 . A C D E B */
37 int Key_scan();
38 int Jiao_yan();
39 void Delay();
40
41 void main()
42 {
43 1 int ans;
44 1 int key;
45 1 cs=0;
46 1 //P1=0x00;
47 1 P0_0=0;
48 1 P0_1=0;
49 1 while(1)
50 1 {
51 2 key=Key_scan();
52 2 if(key==1)
53 2 {
54 3 mz=Mazhi[Lie][Hang]; //获取码值
55 3 cs++;
C51 COMPILER V7.06 DENGXIANG 12/26/2008 20:14:01 PAGE 2
56 3 switch(cs)
57 3 {
58 4 case 1:
59 4 New_ma[0]=mz;
60 4 break;
61 4 case 2:
62 4 New_ma[1]=mz;
63 4 break;
64 4 case 3:
65 4 New_ma[2]=mz;
66 4 break;
67 4 case 4:
68 4 New_ma[3]=mz;
69 4 break;
70 4 case 5:
71 4 New_ma[4]=mz;
72 4 break;
73 4 default:
74 4 break;
75 4 }
76 3
77 3 P3=dis_7[mz]; //查表输出段码
78 3
79 3 }
80 2
81 2 Delay();
82 2 //P1=0x00;
83 2 if(Yuan_ma[0]!=New_ma[0])
84 2 cs=0;
85 2 else if(mz==1)
86 2 {New_ma[0]=mz;
87 3 cs=1;}
88 2 if(cs==5)
89 2 ans=Jiao_yan();
90 2 if(ans==1)
91 2 {P0_1=1;
92 3 Delay();
93 3 P0_1=0;
94 3 ans=0;
95 3 }
96 2
97 2 }
98 1
99 1 }
100
101 void Delay() //延时子程序
102 {
103 1 long i;
104 1 for(i=5000;i>0;i--);
105 1 }
106 int Key_scan()
107 {
108 1 P2=0xF0; //行扫描
109 1 if((P2&0xF0)!=0xF0)
110 1 { Delay();
111 2
112 2 switch(P2)
113 2 {
114 3 case 0x70:
115 3 Hang=0;
116 3 break;
117 3 case 0xB0:
C51 COMPILER V7.06 DENGXIANG 12/26/2008 20:14:01 PAGE 3
118 3 Hang=1;
119 3 break;
120 3 case 0xD0:
121 3 Hang=2;
122 3 break;
123 3 case 0xE0:
124 3 Hang=3;
125 3 break;
126 3 default:
127 3 break;
128 3 }
129 2 Delay();
130 2 P2=0x0F; //列扫描
131 2 if((P2&0x0F)!=0x0F)
132 2 {
133 3 switch(P2)
134 3 {
135 4 case 0x07:
136 4 Lie=0;
137 4 break;
138 4 case 0x0B:
139 4 Lie=1;
140 4 break;
141 4 case 0x0D:
142 4 Lie=2;
143 4 break;
144 4 case 0x0E:
145 4 Lie=3;
146 4 break;
147 4 default:
148 4 break;
149 4 }
150 3 return 1;
151 3 }
152 2
153 2 }
154 1 else
155 1 {
156 2 return 0;
157 2 }
158 1
159 1 }
160 int Jiao_yan()
161 {
162 1 int k;
163 1 int g=0;
164 1 for(k=0;k<5;k++)
165 1 {
166 2 if(Yuan_ma[k]==New_ma[k])
167 2 g++;
168 2
169 2 }
170 1 cs=0;
171 1 for(k=0;k<5;k++)
172 1 { New_ma[k]=0;
173 2 }
174 1 if(g==5)
175 1 return 1;
176 1 else
177 1 return 0;
178 1
179 1 }
C51 COMPILER V7.06 DENGXIANG 12/26/2008 20:14:01 PAGE 4
180
181
182
183
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 468 ----
CONSTANT SIZE = 16 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 60 6
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 + -