📄 chengxu.lst
字号:
C51 COMPILER V8.05a CHENGXU 10/12/2010 23:05:16 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 程序说明:
17
18 当IN0口与GND口接通后,对应的继电器K8吸合(即:COM7与CK接通CB断开);
19 当IN1口与GND口接通后,对应的继电器K7吸合(即:COM6与CK接通CB断开);
20 当IN2口与GND口接通后,对应的继电器K6吸合(即:COM5与CK接通CB断开);
21 当IN3口与GND口接通后,对应的继电器K5吸合(即:COM4与CK接通CB断开);
22 当IN4口与GND口接通后,对应的继电器K4吸合(即:COM3与CK接通CB断开);
23 当IN5口与GND口接通后,对应的继电器K3吸合(即:COM2与CK接通CB断开);
24 当IN6口与GND口接通后,对应的继电器K2吸合(即:COM1与CK接通CB断开);
25 当IN7口与GND口接通后,对应的继电器K1吸合(即:COM0与CK接通CB断开);
26
27 当电源断电后,或者按下复位按键后,控制板再次供电,控制板恢复断电前或者复位前状态。
28 *********************************************************************/
29 #include<reg52.h> //库文件
30 #define uchar unsigned char//宏定义无符号字符型
31 #define uint unsigned int //宏定义无符号整型
32 uchar dat; //存储数据值
33 bit write=0; //写24C08 的标志;
34 /********************************************************************
35 初始定义
36 *********************************************************************/
37
38 /*定义八位输入为单片机P1口*/
39 sbit IN0=P1^0;
40 sbit IN1=P1^1;
41 sbit IN2=P1^2;
42 sbit IN3=P1^3;
43 sbit IN4=P1^4;
44 sbit IN5=P1^5;
45 sbit IN6=P1^6;
46 sbit IN7=P1^7;
47
48 /*定义八位输出为单片机P2口*/
49 sbit K1=P2^0;
50 sbit K2=P2^1;
51 sbit K3=P2^2;
52 sbit K4=P2^3;
53 sbit K5=P2^4;
54 sbit K6=P2^5;
55 sbit K7=P2^6;
C51 COMPILER V8.05a CHENGXU 10/12/2010 23:05:16 PAGE 2
56 sbit K8=P2^7;
57 /********************************************************************
58 24C08 读写驱动程序
59 *********************************************************************/
60 sbit scl=P3^6; // 24c08 SCL
61 sbit sda=P3^7; // 24c08 SDA
62
63 void delay1(uchar x)
64 {
65 1 uint i;
66 1 for(i=0;i<x;i++);
67 1 ;
68 1 }
69 void flash(){ ; ; }
70 void x24c08_init() //24c08 初始化子程序
71 {
72 1 scl=1;
73 1 flash();
74 1 sda=1;
75 1 flash();
76 1 }
77 void start() //启动(I方C)总线
78 {
79 1 sda=1; flash(); scl=1; flash(); sda=0; flash(); scl=0; flash();
80 1 }
81 void stop() //停止(I方C)总线
82 {
83 1 sda=0; flash(); scl=1; flash(); sda=1; flash();
84 1 }
85 void writex(uchar j) //写一个字节
86 {
87 1 uchar i,temp;
88 1 temp=j;
89 1 for (i=0;i<8;i++)
90 1 {
91 2 temp=temp<<1; scl=0; flash(); sda=CY; flash(); scl=1; flash();
92 2 }
93 1 scl=0; flash(); sda=1; flash();
94 1 }
95 uchar readx() //读一个字节
96 {
97 1 uchar i,j,k=0;
98 1 scl=0; flash(); sda=1;
99 1 for (i=0;i<8;i++)
100 1 {
101 2 flash(); scl=1; flash();
102 2 if (sda==1) j=1;
103 2 else j=0;
104 2 k=(k<<1)|j;
105 2 scl=0;}
106 1 flash(); return(k);
107 1 }
108 void clock() //(I方C)线时钟
109 {
110 1 unsigned char i=0;
111 1 scl=1; flash();
112 1 while ((sda==1)&&(i<255))i++;
113 1 scl=0; flash();
114 1 }
115 /********************************************************************
116 从24c08 的地址address 中读取一个字节数据
117 *********************************************************************/
C51 COMPILER V8.05a CHENGXU 10/12/2010 23:05:16 PAGE 3
118 unsigned char x24c08_read(unsigned char address)
119 {
120 1 unsigned char i;
121 1 start(); writex(0xa0);
122 1 clock(); writex(address);
123 1 clock(); start();
124 1 writex(0xa1); clock();
125 1 i=readx(); stop();
126 1 delay1(10);
127 1 return(i);
128 1 }
129 /********************************************************************
130 向24c08 的address地址中写入一字节数据
131 *********************************************************************/
132 void x24c08_write(unsigned char address,unsigned char info)
133 {
134 1 EA=0;
135 1 start(); writex(0xa0);
136 1 clock(); writex(address);
137 1 clock(); writex(info);
138 1 clock(); stop();
139 1 EA=1;
140 1 delay1(50);
141 1 }
142 /********************************************************************
143 延时函数
144 *********************************************************************/
145 void delay(uchar t)
146 {
147 1 uchar i,j;
148 1 for(i=0;i<t;i++)
149 1 {
150 2 for(j=13;j>0;j--);
151 2 { ;
152 3 }
153 2 }
154 1 }
155 /********************************************************************
156 主函数
157 *********************************************************************/
158 void main(void)
159 {
160 1 x24c08_init(); //初始化24C08
161 1 dat=x24c08_read(2);//读出保存的数据赋于dat
162 1 P2=dat;//将存储的数据赋予P2口
163 1 while(1)
164 1 {
165 2 if(IN0==0){delay(100);while(!IN0);P2=0X7F;write=1;} //当IN0与GND接通后,P2口输出01111111,继电器K8吸合其它
-继电器断开;
166 2 if(IN1==0){delay(100);while(!IN1);P2=0XBF;write=1;} //当IN1与GND接通后,P2口输出10111111,继电器K7吸合其它
-继电器断开;
167 2 if(IN2==0){delay(100);while(!IN2);P2=0XDF;write=1;} //当IN2与GND接通后,P2口输出11011111,继电器K6吸合其它
-继电器断开;
168 2 if(IN3==0){delay(100);while(!IN3);P2=0XEF;write=1;} //当IN3与GND接通后,P2口输出11101111,继电器K5吸合其它
-继电器断开;
169 2 if(IN4==0){delay(100);while(!IN4);P2=0XF7;write=1;} //当IN4与GND接通后,P2口输出11110111,继电器K4吸合其它
-继电器断开;
170 2 if(IN5==0){delay(100);while(!IN5);P2=0XFB;write=1;} //当IN5与GND接通后,P2口输出11111011,继电器K3吸合其它
-继电器断开;
171 2 if(IN6==0){delay(100);while(!IN6);P2=0XFD;write=1;} //当IN6与GND接通后,P2口输出11111101,继电器K2吸合其它
-继电器断开;
172 2 if(IN7==0){delay(100);while(!IN7);P2=0XFE;write=1;} //当IN7与GND接通后,P2口输出11111110,继电器K1吸合其它
C51 COMPILER V8.05a CHENGXU 10/12/2010 23:05:16 PAGE 4
-继电器断开;
173 2 if(write==1) //判断计时器是否计时一秒
174 2 {
175 3 write=0; //清零
176 3 dat=P2; //将P2口的值赋予dat
177 3 x24c08_write(2,dat); //在24c08 的地址2 中写入数据dat
178 3 }
179 2 }
180 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 410 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 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 + -