📄 chengxu.lst
字号:
C51 COMPILER V8.05a CHENGXU 03/13/2011 13:06:48 PAGE 1
C51 COMPILER V8.05a, COMPILATION OF MODULE CHENGXU
OBJECT MODULE PLACED IN chengxu.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE chengxu.c BROWSE DEBUG OBJECTEXTEND
line level source
1 /********************************************************************
2 汇诚科技
3
4 实现功能:此版配套测试程序
5 使用芯片:AT89S52
6 晶振:11.0592MHZ
7 波特率:9600
8 编译环境:Keil
9 作者:zhangxinchunleo
10 网站:www.ourhc.cn
11 淘宝店:汇诚科技 http://shop36330473.taobao.com
12 【声明】此程序仅用于学习与参考,引用请注明版权和作者信息!
13
14 *********************************************************************/
15 /********************************************************************
16 单片机与PC机采用9针串口,MAX232通讯,波特率默认为9600.
17
18 单片机接收PC机发送的十六进制码表如下:
19
20 01、全开:PC发送0xFF; 单片机返回0XFF;
21 02、全关:PC发送0X00; 单片机返回0X00;
22
23 03、第一路开:PC发送0x01;单片机返回0X01;
24 04、第二路开:PC发送0x02;单片机返回0X02;
25 05、第三路开:PC发送0x03;单片机返回0X03;
26 06、第四路开:PC发送0x04;单片机返回0X04;
27 07、第五路开:PC发送0x05;单片机返回0X05;
28 08、第六路开:PC发送0x06;单片机返回0X06;
29 09、第七路开:PC发送0x07;单片机返回0X07;
30 10、第八路开:PC发送0x08;单片机返回0X08;
31
32 11、第一路关:PC发送0xFE;单片机返回0XFE;
33 12、第二路关:PC发送0xFD;单片机返回0XFD;
34 13、第三路关:PC发送0xFC;单片机返回0XFC;
35 14、第四路关:PC发送0xFB;单片机返回0XFB;
36 15、第五路关:PC发送0xFA;单片机返回0XFA;
37 16、第六路关:PC发送0xF9;单片机返回0XF9;
38 17、第七路关:PC发送0xF8;单片机返回0XF8;
39 18、第八路关:PC发送0xF7;单片机返回0XF7;
40
41 19、输入状态查询:PC发送0x55;单片机返回输出状态(返回值十六进制);
42 20、输出状态查询:PC发送0xAA;单片机返回输出状态(返回值十六进制);
43 21、输出取反指令:PC发送0X11;单片机返回0x11;
44
45 *********************************************************************/
46 #include<reg52.h>
47 #define uchar unsigned char//宏定义无符号字符型
48 #define uint unsigned int //宏定义无符号整型
49 /********************************************************************
50 初始定义
51 *********************************************************************/
52 uchar sj; //存储数据值
53 bit write=0; //写24C08 的标志;
54 uchar dat=0xee; //用于存储单片机接收发送缓冲寄存器SBUF里面的内容
55 /*定义八位出为单片机P2口*/
C51 COMPILER V8.05a CHENGXU 03/13/2011 13:06:48 PAGE 2
56 sbit K1=P2^0;
57 sbit K2=P2^1;
58 sbit K3=P2^2;
59 sbit K4=P2^3;
60 sbit K5=P2^4;
61 sbit K6=P2^5;
62 sbit K7=P2^6;
63 sbit K8=P2^7;
64
65 /*定义八位入为单片机P1口*/
66 sbit IN0=P1^0;
67 sbit IN1=P1^1;
68 sbit IN2=P1^2;
69 sbit IN3=P1^3;
70 sbit IN4=P1^4;
71 sbit IN5=P1^5;
72 sbit IN6=P1^6;
73 sbit IN7=P1^7;
74 /********************************************************************
75 24C08 读写驱动程序
76 *********************************************************************/
77 sbit scl=P3^6; // 24c08 SCL
78 sbit sda=P3^7; // 24c08 SDA
79
80 void delay1(uchar x)
81 {
82 1 uint i;
83 1 for(i=0;i<x;i++);
84 1 ;
85 1 }
86 void flash(){ ; ; }
87 void x24c08_init() //24c08 初始化子程序
88 {
89 1 scl=1;
90 1 flash();
91 1 sda=1;
92 1 flash();
93 1 }
94 void start() //启动(I方C)总线
95 {
96 1 sda=1; flash(); scl=1; flash(); sda=0; flash(); scl=0; flash();
97 1 }
98 void stop() //停止(I方C)总线
99 {
100 1 sda=0; flash(); scl=1; flash(); sda=1; flash();
101 1 }
102 void writex(uchar j) //写一个字节
103 {
104 1 uchar i,temp;
105 1 temp=j;
106 1 for (i=0;i<8;i++)
107 1 {
108 2 temp=temp<<1; scl=0; flash(); sda=CY; flash(); scl=1; flash();
109 2 }
110 1 scl=0; flash(); sda=1; flash();
111 1 }
112 uchar readx() //读一个字节
113 {
114 1 uchar i,j,k=0;
115 1 scl=0; flash(); sda=1;
116 1 for (i=0;i<8;i++)
117 1 {
C51 COMPILER V8.05a CHENGXU 03/13/2011 13:06:48 PAGE 3
118 2 flash(); scl=1; flash();
119 2 if (sda==1) j=1;
120 2 else j=0;
121 2 k=(k<<1)|j;
122 2 scl=0;}
123 1 flash(); return(k);
124 1 }
125 void clock() //(I方C)线时钟
126 {
127 1 unsigned char i=0;
128 1 scl=1; flash();
129 1 while ((sda==1)&&(i<255))i++;
130 1 scl=0; flash();
131 1 }
132 /********************************************************************
133 从24c08 的地址address 中读取一个字节数据
134 *********************************************************************/
135 unsigned char x24c08_read(unsigned char address)
136 {
137 1 unsigned char i;
138 1 start(); writex(0xa0);
139 1 clock(); writex(address);
140 1 clock(); start();
141 1 writex(0xa1); clock();
142 1 i=readx(); stop();
143 1 delay1(10);
144 1 return(i);
145 1 }
146 /********************************************************************
147 向24c08 的address地址中写入一字节数据
148 *********************************************************************/
149 void x24c08_write(unsigned char address,unsigned char info)
150 {
151 1 EA=0;
152 1 start(); writex(0xa0);
153 1 clock(); writex(address);
154 1 clock(); writex(info);
155 1 clock(); stop();
156 1 EA=1;
157 1 delay1(50);
158 1 }
159 /********************************************************************
160 延时函数
161 *********************************************************************/
162 void delay(uchar t)
163 {
164 1 uchar i,j;
165 1 for(i=0;i<t;i++)
166 1 {
167 2 for(j=13;j>0;j--);
168 2 { ;
169 3 }
170 2 }
171 1 }
172
173 /********************************************************************
174 功能:串口初始化,波特率9600,方式1
175 *********************************************************************/
176 void Init_Com(void)
177 {
178 1 TMOD = 0x20;
179 1 PCON = 0x00;
C51 COMPILER V8.05a CHENGXU 03/13/2011 13:06:48 PAGE 4
180 1 SCON = 0x50;
181 1 TH1 = 0xFd;
182 1 TL1 = 0xFd;
183 1 TR1 = 1;
184 1 }
185
186 /********************************************************************
187 接收数据判断函数
188 *********************************************************************/
189 chuankou()
190 {
191 1 switch(dat) //接收数据判断
192 1 {
193 2 uchar k;
194 2 k=10;
195 2 case 0xff: P2=0X00;delay(k);SBUF = dat;dat=0xee;write=1;break; // 全开
196 2 case 0x00: P2=0XFF;delay(k);SBUF = dat;dat=0xee;write=1;break; // 全关
197 2
198 2 case 0x01: K1=0;delay(k);SBUF = dat;dat=0xee;write=1;break; // 第一路开
199 2 case 0x02: K2=0;delay(k);SBUF = dat;dat=0xee;write=1;break; // 第二路开
200 2 case 0x03: K3=0;delay(k);SBUF = dat;dat=0xee;write=1;break; // 第三路开
201 2 case 0x04: K4=0;delay(k);SBUF = dat;dat=0xee;write=1;break; // 第四路开
202 2 case 0x05: K5=0;delay(k);SBUF = dat;dat=0xee;write=1;break; // 第五路开
203 2 case 0x06: K6=0;delay(k);SBUF = dat;dat=0xee;write=1;break; // 第六路开
204 2 case 0x07: K7=0;delay(k);SBUF = dat;dat=0xee;write=1;break; // 第七路开
205 2 case 0x08: K8=0;delay(k);SBUF = dat;dat=0xee;write=1;break; // 第八路开
206 2
207 2 case 0xFE: K1=1;delay(k);SBUF = dat;dat=0xee;write=1;break; // 第一路关
208 2 case 0xFD: K2=1;delay(k);SBUF = dat;dat=0xee;write=1;break; // 第二路关
209 2 case 0xFC: K3=1;delay(k);SBUF = dat;dat=0xee;write=1;break; // 第三路关
210 2 case 0xFB: K4=1;delay(k);SBUF = dat;dat=0xee;write=1;break; // 第四路关
211 2 case 0xFA: K5=1;delay(k);SBUF = dat;dat=0xee;write=1;break; // 第五路关
212 2 case 0xF9: K6=1;delay(k);SBUF = dat;dat=0xee;write=1;break; // 第六路关
213 2 case 0xF8: K7=1;delay(k);SBUF = dat;dat=0xee;write=1;break; // 第七路关
214 2 case 0xF7: K8=1;delay(k);SBUF = dat;dat=0xee;write=1;break; // 第八路关
215 2
216 2 case 0x55: SBUF = P1;delay(k);dat=0xee;break; // 读输入口状态
217 2 case 0xAA: SBUF = P2;delay(k);dat=0xee;write=1;break; // 读输出口状态
218 2
219 2 case 0x11: P2=~P2;delay(k);SBUF = dat;dat=0xee;write=1;break; // 输出口取反
220 2
221 2 default:break; // 跳出
222 2 }
223 1 }
224 /********************************************************************
225 按键函数
226 *********************************************************************/
227 KEY()
228 {
229 1 uchar k;
230 1 k=200;
231 1 if(IN0==0){delay(k);if(IN0==0){delay(k);K8=!K8;while(!IN0);delay(k);write=1;}}
232 1 if(IN1==0){delay(k);if(IN1==0){delay(k);K7=!K7;while(!IN1);delay(k);write=1;}}
233 1 if(IN2==0){delay(k);if(IN2==0){delay(k);K6=!K6;while(!IN2);delay(k);write=1;}}
234 1 if(IN3==0){delay(k);if(IN3==0){delay(k);K5=!K5;while(!IN3);delay(k);write=1;}}
235 1 if(IN4==0){delay(k);if(IN4==0){delay(k);K4=!K4;while(!IN4);delay(k);write=1;}}
236 1 if(IN5==0){delay(k);if(IN5==0){delay(k);K3=!K3;while(!IN5);delay(k);write=1;}}
237 1 if(IN6==0){delay(k);if(IN6==0){delay(k);K2=!K2;while(!IN6);delay(k);write=1;}}
238 1 if(IN7==0){delay(k);if(IN7==0){delay(k);K1=!K1;while(!IN7);delay(k);write=1;}}
239 1 }
240 /********************************************************************
241 主函数
C51 COMPILER V8.05a CHENGXU 03/13/2011 13:06:48 PAGE 5
242 *********************************************************************/
243 void main()
244 {
245 1 Init_Com();//串口初始化
246 1 x24c08_init(); //初始化24C08
247 1 sj=x24c08_read(2);//读出保存的数据赋于dat
248 1 P2=sj;//将存储的数据赋予P2口
249 1 while(1)
250 1 {
251 2 chuankou(); // 接收数据判断函数
252 2
253 2 if ( RI ) //扫描判断是否接收到数据,
254 2 {
255 3 dat = SBUF; //接收数据SBUF赋与dat
256 3 RI=0; //RI 清零。
257 3 }
258 2 KEY(); //调用按键函数
259 2 if(write==1) //判断计时器是否计时一秒
260 2 {
261 3 write=0; //清零
262 3 sj=P2; //将P2口的值赋予dat
263 3 x24c08_write(2,sj); //在24c08 的地址2 中写入数据dat
264 3 }
265 2 }
266 1 }
267
268 /********************************************************************
269 结束
270 *********************************************************************/
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 709 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 2 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 + -