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