📄 pcf8574.lst
字号:
C51 COMPILER V7.50 PCF8574 12/23/2008 16:42:24 PAGE 1
C51 COMPILER V7.50, COMPILATION OF MODULE PCF8574
OBJECT MODULE PLACED IN PCF8574.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE PCF8574.c BROWSE DEBUG OBJECTEXTEND
line level source
1 #include <reg52.h>
2
3 #define SETBIT(VAR,Place) (VAR|=(1<<Place))
4 #define CLRBIT(VAR,Place) (VAR&=((1<<Place)^255))
5
6 #define UCHAR unsigned char
7 #define UINT unsigned int
8
9 sbit IC_SCL=P3^7;
10 sbit IC_SDA=P3^6;
11
12 unsigned char IC_Re_Time;
13 unsigned char IC_Err_Flag;
14
15 void Delay(void)
16 {
17 1 unsigned char i;
18 1 for(i=0;i<=10;i++)
19 1 ;
20 1 }
21
22 void delay1 (UINT ms)
23 {
24 1 UINT i,j;
25 1 for(i=0;i<ms;i++)
26 1 {
27 2 for(j=0;j<10000;j++)
28 2 ;
29 2 }
30 1 }
31
32 UCHAR VALBIT(UINT Val,UCHAR Bit)
33 {
34 1 UINT Buf;
35 1 Buf=0x0001;
36 1 if(Bit)
37 1 Buf<<=Bit;
38 1 Val&=Buf;
39 1 if(Val)
40 1 return(0xff);
41 1 else
42 1 return(0x00);
43 1 }
44
45 /**********************************************
46 下面是PCF8574的操作程序
47 1.通信方式:I2C
48 2.通信端口:IC_SCL(P3.6),IC_SDA(P3.7)
49 3.通信地址:0x0101000x
50 ***********************************************/
51 void IC_Start(void) //启动IC通信
52 {
53 1 IC_SDA=1;
54 1 Delay();
55 1 IC_SCL=1;
C51 COMPILER V7.50 PCF8574 12/23/2008 16:42:24 PAGE 2
56 1 Delay();
57 1 IC_SDA=0;
58 1 Delay();
59 1 IC_SCL=0;
60 1 Delay();
61 1 }
62
63 void IC_Stop(void) //停止IC通信
64 {
65 1 IC_SDA=0;
66 1 Delay();
67 1 IC_SCL=1;
68 1 Delay();
69 1 IC_SDA=1;
70 1 Delay();
71 1 }
72
73 void IC_Receive_Ack(void) //接受ACK
74 {
75 1 IC_SDA=1;
76 1 IC_SCL=1;
77 1 Delay();
78 1 IC_Re_Time=0;
79 1 while(IC_Re_Time<=30)
80 1 {
81 2 if(IC_SDA==0)
82 2 {
83 3 IC_Err_Flag=0;
84 3 break;
85 3 }
86 2 else
87 2 {
88 3 IC_Err_Flag=1;
89 3 }
90 2 }
91 1 IC_SCL=0;
92 1 Delay();
93 1 }
94
95 void IC_Send_NAck(void) //发送NACK
96 {
97 1 IC_SDA=1;
98 1 Delay();
99 1 IC_SCL=1;
100 1 Delay();
101 1 IC_SCL=0;
102 1 Delay();
103 1 }
104
105 void IC_Write_Byte(unsigned char Data) //写数据到8574
106 {
107 1 UCHAR i;
108 1 for(i=0;i<=7;i++)
109 1 {
110 2 if(VALBIT(Data,(7-i))) //data out msb
111 2 IC_SDA=1;
112 2 else
113 2 IC_SDA=0;
114 2 IC_SCL=1;
115 2 Delay();
116 2 IC_SCL=0;
117 2 Delay();
C51 COMPILER V7.50 PCF8574 12/23/2008 16:42:24 PAGE 3
118 2 }
119 1 }
120
121 UCHAR IC_Read_Byte(void) //从8574读取一个数据
122 {
123 1 UCHAR i,Data;
124 1 for(i=0;i<=7;i++)
125 1 {
126 2 IC_SCL=1;
127 2 Delay();
128 2 IC_SDA=1;
129 2 Delay();
130 2 if(IC_SDA)
131 2 SETBIT(Data,(7-i)); //data in msb too
132 2 else
133 2 CLRBIT(Data,(7-i));
134 2 IC_SCL=0;
135 2 Delay();
136 2 }
137 1 return(Data);
138 1 }
139
140 void IC_Write_Data(UCHAR Data)
141 {
142 1 UCHAR write_time,write_data;
143 1 write_data=Data;
144 1 for(write_time=0;write_time<=2;write_time++)
145 1 {
146 2 IC_Start();
147 2 IC_Write_Byte(0x40);
148 2 IC_Receive_Ack();
149 2 IC_Write_Byte(write_data);
150 2 IC_Receive_Ack();
151 2 IC_Stop();
152 2 if(IC_Err_Flag==0)
153 2 break;
154 2 }
155 1 }
156
157 UCHAR IC_Read_Data(void)
158 {
159 1 UCHAR Return_Data,read_time;
160 1 for(read_time=0;read_time<=2;read_time++)
161 1 {
162 2 IC_Start();
163 2 IC_Write_Byte(0x41);
164 2 IC_Receive_Ack();
165 2 Return_Data=IC_Read_Byte();
166 2 IC_Send_NAck();
167 2 IC_Stop();
168 2 if(IC_Err_Flag==0)
169 2 {
170 3 return(Return_Data);
171 3 break;
172 3 }
173 2 }
174 1 }
175
176 void PCF8574_Init(void)
177 {
178 1 IC_Write_Data(0xf0); //输入状态的必须开始的时候置为1,输出为0
179 1 }
C51 COMPILER V7.50 PCF8574 12/23/2008 16:42:24 PAGE 4
180
181 void main(void)
182 {
183 1 unsigned char temp3;
184 1 //PCF8574_Init();
185 1 /* IC_Write_Data(0xF1);
186 1 delay1(10);
187 1 IC_Write_Data(0xF2);
188 1 delay1(10);
189 1 IC_Write_Data(0xF4);
190 1 delay1(10);
191 1 IC_Write_Data(0xF8);
192 1 delay1(20);
193 1 IC_Write_Data(0xF4);
194 1 delay1(10);
195 1 IC_Write_Data(0xF2);
196 1 delay1(10);
197 1 IC_Write_Data(0xF1);
198 1 delay1(10);
199 1 IC_Write_Data(0xFF);*/
200 1 while(1)
201 1 {
202 2 //temp3=IC_Read_Data();
203 2 temp3=0x20;
204 2 temp3=temp3>>4;
205 2 //IC_Write_Data(temp3&0x0F);
206 2 delay1(10);
207 2 }
208 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 360 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 2 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 + -