📄 pmpdatat.lst
字号:
C51 COMPILER V8.05a PMPDATAT 05/08/2009 01:23:26 PAGE 1
C51 COMPILER V8.05a, COMPILATION OF MODULE PMPDATAT
OBJECT MODULE PLACED IN PMPDataT.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE PMPDataT.c BROWSE DEBUG OBJECTEXTEND
line level source
1
2 #include "PMPDataT.h"
3
4 /* 延时t毫秒 */
5 void delay(uint t)
6 {
7 1 uint i;
8 1 while(t--)
9 1 {
10 2 /* 对于11.0592M时钟,约延时1ms */
11 2 for (i=0;i<125;i++)
12 2 {}
13 2 }
14 1 }
15 uchar keyscan(void)
16 {
17 1 uchar scancode,tmpcode;
18 1 P1 = 0xf0; // 发全0行扫描码
19 1 if ((P1&0xf0)!=0xf0) // 若有键按下
20 1 {
21 2 delay(10); // 延时去抖动
22 2 if ((P1&0xf0)!=0xf0) // 延时后再判断一次,去除抖动影响
23 2 {
24 3 scancode = 0xfe;
25 3 while((scancode&0x10)!=0) // 逐行扫描
26 3 {
27 4 P1 = scancode; // 输出行扫描码
28 4 if ((P1&0xf0)!=0xf0) // 本行有键按下
29 4 {
30 5 tmpcode = (P1&0xf0)|0x0f;
31 5
32 5 /* 返回特征字节码,为1的位即对应于行和列 */
33 5 return((~scancode)+(~tmpcode));
34 5 }
35 4 else scancode = (scancode<<1)|0x01; // 行扫描码左移一位
36 4 }
37 3 }
38 2 }
39 1 return(0); // 无键按下,返回值为0
40 1 }
41
42
43
44 /* 串口初始化函数 */
45 void init_serial()
46 {
47 1 TMOD = 0x20; // 定时器T1使用工作方式2
48 1 TH1 = 0xfd;
49 1 TL1 = 0xfd;
50 1 TR1 = 1; // 开始计时
51 1 PCON = 0x00; // SMOD = 1
52 1 SCON = 0xd0; // 工作方式,9位数据位,波特率9600kbit/s,允许接收
53 1 }
54 void Getkey()
55 {
C51 COMPILER V8.05a PMPDATAT 05/08/2009 01:23:26 PAGE 2
56 1 switch(get_key)
57 1 {
58 2 case 0x11: // 1行1列,数字0
59 2 key=0xc0;
60 2 break;
61 2 case 0x21: // 1行2列,数字1
62 2 key=0xf9;
63 2 break;
64 2 case 0x41: // 1行3列,数字2
65 2 key=0xa4;
66 2 break;
67 2 case 0x81: // 1行4列,数字3
68 2 key=0xb0;
69 2 break;
70 2 case 0x12: // 2行1列,数字4
71 2 key=0x99;
72 2 break;
73 2 case 0x22: // 2行2列,数字5
74 2 key=0x92;
75 2 break;
76 2 case 0x42: // 2行3列,数字6
77 2 key=0x82;
78 2 break;
79 2 case 0x82: // 2行4列,数字7
80 2 key=0xf8;
81 2 break;
82 2 case 0x14: // 3行1列,数字8
83 2 key=0x80;
84 2 break;
85 2 case 0x24: // 3行2列,数字9
86 2 key=0x90;
87 2 break;
88 2 case 0x44: // 3行3列,10
89 2 key=0x88;
90 2 break;
91 2 case 0x84: // 3行4列,11
92 2 key=0x83;
93 2 break;
94 2 case 0x18: // 4行1列,12
95 2 key=0xc6;
96 2 break;
97 2 case 0x28: // 4行2列,13
98 2 key=0xa1;
99 2 break;
100 2 case 0x48: // 4行3列,14
101 2 key=0x86;
102 2 break;
103 2 case 0x88: // 3行4列,15
104 2 key=0x8e;
105 2 break;
106 2 default:break;
107 2 }
108 1
109 1
110 1 }
111
112 /* 发送数据函数 */
113 void senddata(uchar buf)
114 {
115 1
116 1 /* 发送数据 */
117 1 TI = 0;
C51 COMPILER V8.05a PMPDATAT 05/08/2009 01:23:26 PAGE 3
118 1 TB8 = 0; // 发送数据帧
119 1 SBUF =buf;
120 1 while(!TI);
121 1 TI = 0;
122 1 }
123
124 /* 主程序 */
125 void main()
126 {
127 1 uchar i = 0;
128 1 key=0xc0;
129 1 while(1)
130 1 {
131 2 get_key = keyscan(); // 调用键盘扫描函数
132 2 Getkey();
133 2 buf=key;
134 2 P2=key;
135 2
136 2 /* 通过P0口读要访问的从机地址 */
137 2 P0 = 0xff;
138 2 addr = P0&0x0f;
139 2 init_serial(); // 串口初始化
140 2
141 2 EA = 1; // 关闭所有中断
142 2
143 2 TI = 0;
144 2 TB8 = 1; // 发送地址帧
145 2 SBUF = addr;
146 2 while(!TI);
147 2 TI = 0;
148 2 senddata(buf); // 发送数据
149 2
150 2 }
151 1
152 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 300 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 4 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 + -