📄 keycheck.lst
字号:
C51 COMPILER V8.02 KEYCHECK 08/19/2008 10:15:47 PAGE 1
C51 COMPILER V8.02, COMPILATION OF MODULE KEYCHECK
OBJECT MODULE PLACED IN keycheck.OBJ
COMPILER INVOKED BY: C:\Keil\uv3\C51\BIN\C51.EXE keycheck.c BROWSE DEBUG OBJECTEXTEND
line level source
1 #include <reg52.h>
2 #define unchar unsigned char
3 unchar keystu=0xff;
4 unchar sweep[]={0xef,0xdf,0xbf,0x7f};
5 unchar seg[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};
6 bit t1s=0;
7 bit t10ms=0;
8
9 /********************T1初始化,10ms中断一次,16位重装方式****************************/
10 void initt1()
11 {
12 1 TMOD=0x1f;
13 1 TR1=1;
14 1 TL1=0x54;
15 1 TH1=0xd9;
16 1 ET1=1;
17 1 EA=1;
18 1 }
19
20 /****************键盘检测是否按下***********************/
21 unchar keyin()
22 {
23 1 unchar k_1;
24 1 k_1=(~P1)&0x0f;
25 1 if(k_1!=0)
26 1 keystu=keystu<<1;
27 1 return(keystu);
28 1 }
29
30 /****************键盘扫描哪个键按下**********************/
31 unchar keyscan()
32 {
33 1 unchar i,l,r,num; //l记录行数,r记录列数,num记录哪个键
34 1 for(i=0;i<4;i++)
35 1 {
36 2 P1=sweep[i];
37 2 num=(~P1)&0x0f;
38 2 if(num!=0)
39 2 {
40 3 r=i; //记录当前列数
41 3 switch(num)
42 3 {
43 4 case 0x01:l=0;break;
44 4 case 0x02:l=1;break;
45 4 case 0x04:l=2;break;
46 4 case 0x08:l=3;break;
47 4 default:break;
48 4 num=4*r+l;}
49 3 return(num);
50 3 }}}
51
52 /***************中断入口***************/
53 void timer1() interrupt 3
54 {
55 1 unchar t;
C51 COMPILER V8.02 KEYCHECK 08/19/2008 10:15:47 PAGE 2
56 1 TL1=0xd9;
57 1 TH1=0x54;
58 1 TF1=0;
59 1 t10ms=1;
60 1 t++;
61 1 if(t==100)
62 1 {
63 2 t=0;
64 2 t1s=1;
65 2 }
66 1 }
67
68 /**************主函数***********************/
69 void main()
70 {
71 1 unchar k,keynum;
72 1 P1=0x0f;
73 1 initt1();
74 1 while(1)
75 1 {if(t1s)
76 2 {
77 3 t1s=0;
78 3 P2=~P2;
79 3 }
80 2 if(t10ms)
81 2 {
82 3 t10ms=0;
83 3 k=keyin();
84 3 if(k<=0xfa||k==0xfc)
85 3 {
86 4 keystu=0xff;
87 4 keynum=keyscan();
88 4 switch(keynum)
89 4 {
90 5 case 0:P0=seg[0] ;break;
91 5 case 1:P0=seg[1] ;break;
92 5 case 2:P0=seg[2] ;break;
93 5 case 3:P0=seg[3] ;break;
94 5 case 4:P0=seg[4] ;break;
95 5 case 5:P0=seg[5] ;break;
96 5 case 6:P0=seg[6] ;break;
97 5 case 7:P0=seg[7] ;break;
98 5 case 8:P0=seg[8] ;break;
99 5 case 9:P0=seg[9] ;break;
100 5 case 10:P0=seg[10] ;break;
101 5 case 11:P0=seg[11];break;
102 5 case 12:P0=seg[12] ;break;
103 5 case 13:P0=seg[13] ;break;
104 5 case 14:P0=seg[14] ;break;
105 5 case 15:P0=seg[15] ;break;
106 5 default:break;}}}}}
107
108
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 300 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 21 2
IDATA SIZE = ---- ----
C51 COMPILER V8.02 KEYCHECK 08/19/2008 10:15:47 PAGE 3
BIT SIZE = 2 ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -