📄 24c08.lst
字号:
C51 COMPILER V8.05a 24C08 11/06/2007 17:37:01 PAGE 1
C51 COMPILER V8.05a, COMPILATION OF MODULE 24C08
OBJECT MODULE PLACED IN 24c08.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE 24c08.c BROWSE DEBUG OBJECTEXTEND
line level source
1 /*==============================I2C 24C04==============================
2
3 程序名称:I2C 24C04(12864液晶并行显示) P3.3为减 P3.2为增
4
5 版 本:Agni 07-SV开发板
6
7 作 者:蓝极风电子技术
8
9 日 期:2007.10.28
10
11 注:(1):主芯片AT89S52使用11.0592M晶振
12
13 (2):Keil uV3 3.30编译运行通过
14
15 (3):本例程在 Agni 07-SV 开发板平台上成功运行通过
16
17 (4):蓝极风电子技术网版权所有,只供学习参考,不得应用于商业用途.
18
19 (5):更多学习资源浏览:(http://www.bluepw.com 或 http://www.bluepw.cn)
20
21 ============================================================================*/
22 #include<at89x52.h> //包括一个52标准内核的头文件
23 #include<24c08_lcd.h>
24 #define uchar unsigned char //定义一下方便使用
25 #define uint unsigned int
26 #define ulong unsigned long
27
28 #define WriteDeviceAddress 0xa0 //定义器件在IIC总线中的地址
29 #define ReadDviceAddress 0xa1
30 sbit SCL=P3^4;
31 sbit SDA=P3^5;
32
33 sbit K1=P3^0;
34 uchar k;
35 void keyscan(void);
36
37 //定时函数
38 void DelayMs(uint number)
39 {
40 1 uchar temp;
41 1 for(;number!=0;number--)
42 1 {
43 2 for(temp=112;temp!=0;temp--) ;
44 2 }
45 1 }
46
47 void key_delay(void) //延时
48 {
49 1 int t;
50 1 for(t=0;t<3300;t++);
51 1 }
52
53 //开始总线
54 void Start()
55 {
C51 COMPILER V8.05a 24C08 11/06/2007 17:37:01 PAGE 2
56 1 SDA=1;
57 1 SCL=1;
58 1 SDA=0;
59 1 SCL=0;
60 1 }
61
62 //结束总线
63 void Stop()
64 {
65 1 SCL=0;
66 1 SDA=0;
67 1 SCL=1;
68 1 SDA=1;
69 1 }
70
71
72 //发ACK0
73 void NoAck()
74 {
75 1 SDA=1;
76 1 SCL=1;
77 1 SCL=0;
78 1 }
79
80 //测试ACK
81 bit TestAck()
82 {
83 1 bit ErrorBit;
84 1 SDA=1;
85 1 SCL=1;
86 1 ErrorBit=SDA;
87 1 SCL=0;
88 1 return(ErrorBit);
89 1 }
90
91 //写入8个bit到24c02
92 void Write8Bit(uchar input)
93 {
94 1 uchar temp;
95 1 for(temp=8;temp!=0;temp--)
96 1 {
97 2 SDA=(bit)(input&0x80);
98 2 SCL=1;
99 2 SCL=0;
100 2 input=input<<1;
101 2 }
102 1 }
103
104 //写入一个字节到24c02中
105 void Write24c02(uchar ch,uchar address)
106 {
107 1 Start();
108 1 Write8Bit(WriteDeviceAddress);
109 1 TestAck();
110 1 Write8Bit(address);
111 1 TestAck();
112 1
113 1 Write8Bit(ch);
114 1 TestAck();
115 1
116 1 Stop();
117 1 DelayMs(10);
C51 COMPILER V8.05a 24C08 11/06/2007 17:37:01 PAGE 3
118 1 }
119
120 //从24c02中读出8个bit
121 uchar Read8Bit()
122 {
123 1 uchar temp,rbyte=0;
124 1 for(temp=8;temp!=0;temp--)
125 1 {
126 2 SCL=1;
127 2 rbyte=rbyte<<1;
128 2 rbyte=rbyte|((uchar)(SDA));
129 2 SCL=0;
130 2 }
131 1 return(rbyte);
132 1 }
133
134 //从24c02中读出1个字节
135 uchar Read24c02(uchar address)
136 {
137 1 uchar ch;
138 1
139 1 Start();
140 1 Write8Bit(WriteDeviceAddress);
141 1 TestAck();
142 1 Write8Bit(address);
143 1 TestAck();
144 1 Start();
145 1 Write8Bit(ReadDviceAddress);
146 1 TestAck();
147 1 ch=Read8Bit();
148 1 NoAck();
149 1 Stop();
150 1 return(ch);
151 1 }
152
153
154 //写入按键次数到24c02,并读出来显示在4个LED上
155 void main(void) // 主程序
156 {
157 1 uchar c1=0;
158 1 uchar m=100;
159 1 Init_lcd();
160 1 while(1)
161 1 {
162 2 m=Read24c02(0xff); //读出24c02第一个地址数据
163 2 keyscan();
164 2 switch(k)
165 2 {
166 3 case 0: m=m+1;k=8;break;
167 3 case 1: m=m-1;k=9;break;
168 3 default:break;
169 3 }
170 2 Show(0x80,16," I2C存储器测试 ");
171 2 Show(0x90,16,"基准值: 100 ");
172 2 Show(0x88,16,"增量: 1 ");
173 2 Show(0x98,16,"存储值: ");
174 2 Write24c02(m,0xff); //写入24c02
175 2 Show_dig(0x9D,m);
176 2 key_delay();key_delay();key_delay();key_delay();
177 2 }
178 1
179 1 }
C51 COMPILER V8.05a 24C08 11/06/2007 17:37:01 PAGE 4
180
181 void keyscan(void) //按键为P3.2和P3.3
182 {
183 1
184 1 key_delay();
185 1 key_delay();
186 1 if(P3_2==0) //P3.2为增
187 1 k=0;
188 1 key_delay();
189 1 key_delay();
190 1 if(P3_3==0) //P3.3为减
191 1 k=1;
192 1 key_delay();
193 1 }
194 /************************ end **********************************/
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 567 ----
CONSTANT SIZE = 79 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 1 15
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 + -