📄 键盘实验.lst
字号:
C51 COMPILER V8.05a 键盘实验 05/05/2009 13:34:41 PAGE 1
C51 COMPILER V8.05a, COMPILATION OF MODULE 键盘实验
OBJECT MODULE PLACED IN 键盘实验.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE 键盘实验.c BROWSE DEBUG OBJECTEXTEND
line level source
1 #include <reg52.h>
2 #include <intrins.h>
3 sbit key_data=P3^1;
4 sbit key_clk=P3^2; //定义键盘接口的时钟脚
5 //sbit RELAY=P1^0; //继电器
6 sbit RELAY=P1^1;
7 bit BF=0;
8 unsigned char code table[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0x88,0x83,0xC6,0xA1,0x86,0x8
-E};
9 unsigned char keyv=0; //变量为常量的索引
10 unsigned int intNum=0; //计数接收个数
11 unsigned char key_up=1; //检测按键按下否
12
13 void ldedata(unsigned char scandata);//数据处理
14
15 void main(void) //入口函数
16 {
17 1
18 1
19 1 EA=1; //首先开启总中断
20 1 EX0=1; //开启外部中断 0
21 1 IT0=1; // 设置成 下降沿触发方式
22 1 P2=0;
23 1 do{ //循环
24 2 if(BF)
25 2 ldedata(keyv);
26 2 else
27 2 EA=1;
28 2 }
29 1 while(1);
30 1 }
31
32 void key_scan() interrupt 0
33 { //外部中断 0
34 1 if((intNum>0)&&(intNum<9)){
35 2 keyv=keyv>>1;
36 2 if(key_data)
37 2 keyv=keyv|0x80;
38 2 }
39 1 intNum++;
40 1 while(!key_clk);
41 1 if(intNum>10){
42 2 intNum=0;
43 2 BF=1;
44 2 EA=0; //等待处理完键值再开启
45 2 }
46 1
47 1
48 1 }
49
50 void ldedata(unsigned char scandata)
51 {
52 1
53 1 if(!key_up) //键盘松开时
54 1 {
C51 COMPILER V8.05a 键盘实验 05/05/2009 13:34:41 PAGE 2
55 2
56 2 switch(scandata){
57 3 case 0x66:
58 3 key_up=1;
59 3 break;
60 3 case 0x69:
61 3 P0=table[1];
62 3 break;
63 3 case 0x72:
64 3 P0=table[2];
65 3 break;
66 3 case 0x7a:
67 3 P0=table[3];
68 3
69 3 break;
70 3 case 0x7d:
71 3 P0=table[9];
72 3
73 3 break;
74 3
75 3 case 0x73:
76 3 P0=table[5];
77 3 break;
78 3 case 0x74:
79 3 P0=table[6];
80 3
81 3 break;
82 3 case 0x7b:
83 3 P0=table[10];
84 3
85 3 break;
86 3 case 0x79:
87 3 P0=table[11];
88 3
89 3 break;
90 3
91 3 default:
92 3
93 3
94 3 if(scandata==0x6c)
95 3 P0=table[7];
96 3 if(scandata==0x75){
97 4 P0=table[8];
98 4 }
99 3 if(scandata==0x6b)
100 3 RELAY=0;
101 3 if(scandata==0xe0, 0x5a, 0xe0)
102 3
103 3 RELAY=1;
104 3 }
105 2 }
106 1
107 1
108 1 else{
109 2 key_up=0;
110 2 switch(scandata){
111 3 case 0x12:
112 3
113 3 break;
114 3 case 0x59:
115 3
116 3 break;
C51 COMPILER V8.05a 键盘实验 05/05/2009 13:34:41 PAGE 3
117 3 }
118 2 }
119 1 BF=0;
120 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 233 ----
CONSTANT SIZE = 16 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 4 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 + -