📄 key_ch451.lst
字号:
C51 COMPILER V7.00 KEY_CH451 04/13/2006 09:51:47 PAGE 1
C51 COMPILER V7.00, COMPILATION OF MODULE KEY_CH451
OBJECT MODULE PLACED IN KEY_CH451.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE KEY_CH451.C BROWSE DEBUG OBJECTEXTEND
stmt level source
1
2 #include "config.h"
3
4 sbit KeyCom =P1^0;
5 sbit clk = P1^2; // clk 连接于 P3.5
6 sbit dat = P1^1; // dat 连接于 P3.7
7 sbit keyout = P3^2; // key 连接于 P3.3(INT0)
8 unsigned char KeyValue;
9 uint keyint;//key time
10 sbit bee =P1^7;
11
12 //-----------------------------------------------------系统时钟
13 void Int1_systick(void) interrupt 1 //
14 {
15 1 uchar buf;
16 1 // TH0 = 0x8a; //32ms初值装载
17 1 // TL0 = 0x44;
18 1 TH0 = 0xFF; //32ms初值装载
19 1 TL0 = 0x44;
20 1 //-------------------------
21 1 buf=GetKeyvalue();
22 1 keyint++;
23 1 if(buf!=KeyValue)
24 1 {
25 2 ET0=0;
26 2 EX0=1;
27 2 keyint=0;
28 2 }
29 1 }
30
31 void Int0_key(void) interrupt 0 //
32 {
33 1 KeyValue=GetKeyvalue();
34 1 ET0=1;
35 1 EX0=0;
36 1 nop;
37 1
38 1 }
39 //-----------------------------------------------------------
40 void KeyInit(void) // 键盘初始化
41 {
42 1 TMOD=0x21 ;TH0=0;TL0=0;TR0=1;ET0=0; //T0作为系统时钟
43 1 IT0=0;EX0=1; //外部中断0 电平触发方式 用于键盘中断
44 1 Sendkeycom(0x04,0x02); //仅键盘使能
45 1 }
46
47 void Sendkeycom(unsigned char syscom,unsigned char sysdat)
48 {
49 1 uchar i;
50 1 clk=0;
51 1 KeyCom=0; //时钟线置0
52 1 for(i=0;i<8;i++)
53 1 {
54 2 if(sysdat&1) {dat=1;} else {dat=0;}
55 2 sysdat>>=1; clk=1; clk=0;
C51 COMPILER V7.00 KEY_CH451 04/13/2006 09:51:47 PAGE 2
56 2 }
57 1 for(i=0;i<4;i++)
58 1 {
59 2 if(syscom&1) {dat=1;} else {dat=0;}
60 2 syscom>>=1; clk=1; clk=0;
61 2 }
62 1 dat=1;
63 1 KeyCom=1;
64 1
65 1 }
66
67 unsigned char GetKeyvalue(void)
68 {
69 1 uchar i, Keybuf=7;
70 1 clk=0;
71 1 KeyCom=0; //发出一 clk 脉冲
72 1 for(i=0;i<4;i++) //发送读键命令
73 1 {
74 2 if(Keybuf&1) {dat=1;} else {dat=0;}
75 2 Keybuf>>=1; clk=1; clk=0;
76 2 }
77 1 KeyCom=1;
78 1 Keybuf=0;
79 1 for(i=0;i<7;i++) //接收7位数据
80 1 {
81 2 clk=1; Keybuf<<=1;
82 2 if(keyout) { Keybuf=Keybuf|0x01;} // bit0=1
83 2 clk=0; // 输出一 clk 脉冲
84 2 }
85 1
86 1 return(Keybuf);
87 1 }
88
89 /****************************************************************************
90 * 名称:WaitKey()
91 * 功能:等待一个有效按键,并返回按键值。本函数有去抖功能。
92 * 入口参数:无
93 * 出口参数:返回按键盘值。
94 ****************************************************************************/
95 uchar WaitKey(void)
96 { // uchar k;
97 1 KeyValue = 0;
98 1 while(!KeyValue); //接收一个键值
99 1 // k=KeyValue;
100 1 // while(KeyValue!=k);
101 1 while(keyint!=0);
102 1 return(KeyValue);
103 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 311 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 3 ----
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 + -