📄 lcd1602+at24c02.lst
字号:
40 =1 void Write24C02(unchar ch,unchar address);//写入一个字到24C02中的指定地址中
41 =1 unchar Read8Bit(void); //从24C02中读出8个Bit
42 =1 unchar Read24C02(unchar address); //从24C02指定地址位置中读出1个字节
43 =1
44 =1
45 =1
46 =1 /*-----------------------------------------*/
47 =1 //延时1000us
48 =1 void delay1ms(void)
49 =1 {
50 1 =1 unsigned char i,j,k;
51 1 =1 for(i=5;i>0;i--)
52 1 =1 for(j=28;j>0;j--)
53 1 =1 for(k=2;k>0;k--);
54 1 =1 }
55 =1
56 =1
57 =1
58 =1 /*-----------------------------------------*/
59 =1 //开始总线
60 =1 void Start(void)
61 =1 {
62 1 =1 SDA=1;
63 1 =1 SCL=1;
64 1 =1 SDA=0;
65 1 =1 SCL=0;
66 1 =1 }
67 =1
68 =1
69 =1
70 =1 /*-----------------------------------------*/
71 =1 //结束总线
72 =1 void Stop(void)
73 =1 {
74 1 =1 SCL=0;
75 1 =1 SDA=0;
76 1 =1 SCL=1;
77 1 =1 SDA=1;
78 1 =1 }
79 =1
80 =1
81 =1
82 =1 /*-----------------------------------------*/
83 =1 //发送ACk0
84 =1 void NoAck(void)
85 =1 {
86 1 =1 SDA=1;
87 1 =1 SCL=1;
88 1 =1 SCL=0;
89 1 =1 }
90 =1
91 =1
92 =1
C51 COMPILER V7.50 LCD1602_AT24C02 04/24/2009 18:29:35 PAGE 5
93 =1 /*-----------------------------------------*/
94 =1 //测试ACk
95 =1 bit TestAck(void)
96 =1 {
97 1 =1 bit ErrorBit;
98 1 =1 SDA=1;
99 1 =1 SCL=1;
100 1 =1 ErrorBit=SDA;
101 1 =1 SCL=0;
102 1 =1 return (ErrorBit);
103 1 =1 }
104 =1
105 =1
106 =1
107 =1 /*-----------------------------------------*/
108 =1 //写入8个Bit 到24C02
109 =1 void Write8Bit(unchar input)
110 =1 {
111 1 =1 unchar temp;
112 1 =1 for(temp=8;temp!=0;temp--)
113 1 =1 {
114 2 =1 SDA=(bit)(input&0x80);
115 2 =1 SCL=1;
116 2 =1 SCL=0;
117 2 =1 input<<=1;
118 2 =1 }
119 1 =1 }
120 =1
121 =1
122 =1
123 =1 /*-----------------------------------------*/
124 =1 //写入一个字到24C02中的指定地址中
125 =1 void Write24C02(unchar ch,unchar address)
126 =1 {
127 1 =1 Start();
128 1 =1 Write8Bit(WriteDeviceAddress);
129 1 =1 TestAck();
130 1 =1 Write8Bit(address);
131 1 =1 TestAck();
132 1 =1 Write8Bit(ch);
133 1 =1 TestAck();
134 1 =1 Stop();
135 1 =1 delay1ms(); //延迟时间1ms!!!
136 1 =1 }
137 =1
138 =1
139 =1
140 =1 /*-----------------------------------------*/
141 =1 //从24C02中读出8个Bit
142 =1 unchar Read8Bit(void)
143 =1 {
144 1 =1 unchar temp,rbyte=0;
145 1 =1 for(temp=8;temp!=0;temp--)
146 1 =1 {
147 2 =1 SCL=1;
148 2 =1 rbyte<<=1;
149 2 =1 rbyte|=((unchar)(SDA));
150 2 =1 SCL=0;
151 2 =1 }
152 1 =1 return (rbyte);
153 1 =1 }
154 =1
C51 COMPILER V7.50 LCD1602_AT24C02 04/24/2009 18:29:35 PAGE 6
155 =1
156 =1
157 =1 /*-----------------------------------------*/
158 =1 //从24C02指定地址位置中读出1个字节
159 =1 unchar Read24C02(unchar address)
160 =1 {
161 1 =1 unchar ch;
162 1 =1 Start();
163 1 =1 Write8Bit(WriteDeviceAddress);
164 1 =1 TestAck();
165 1 =1 Write8Bit(address);
166 1 =1 TestAck();
167 1 =1 Start();
168 1 =1 Write8Bit(ReadDeviceAddress);
169 1 =1 TestAck();
170 1 =1 ch=Read8Bit();
171 1 =1 NoAck();
172 1 =1 Stop();
173 1 =1 return (ch);
174 1 =1 }
175 =1
176 =1
177 =1
178 =1 /*-----------------------------------------*/
179 =1 /*
180 =1 //应用举例
181 =1 void main(void)
182 =1 {
183 =1 unsigned char i;
184 =1 for(i=0;i<256;i++)
185 =1 {
186 =1 Write24C02(i,i);
187 =1 P1=Read24C02(i);
188 =1 delayms(1000);
189 =1 }
190 =1 while(1);
191 =1 }
192 =1 */
193 =1
194 =1
195 =1 /*-----------------------------------------*/
196 =1 #endif
197 =1
198 =1
199 =1
200 =1
201 =1
202 =1
5
6
7
8
9 //函数定义
10 void delay(unsigned char x, unsigned char y, unsigned char z)
11 {
12 1 unsigned char tempx,tempy,tempz=z;
13 1 do{tempy=y;do{tempx=x;while(--tempx);}while(--tempy);}while(--tempz);
14 1 }
15
16
17
18 void main(void)
C51 COMPILER V7.50 LCD1602_AT24C02 04/24/2009 18:29:35 PAGE 7
19 {
20 1 unsigned char i;
21 1 unsigned char temp_char;
22 1 //for(i=0;i<250;i++)Write24C02(i,i); //写入数据到AT24C02中
23 1 i=32;
24 1 lcd_init();
25 1 lcd_pos(0,0);
26 1 while(1)
27 1 {
28 2 temp_char=Read24C02(i++);
29 2 if(i==250)i=32;
30 2 printc(temp_char);
31 2 delay(20,25,150);
32 2 if(i%16==0){lcd_pos(0,1);if(i%32==0)lcd_pos(0,0);}
33 2 }
34 1 }
35
C51 COMPILATION COMPLETE. 2 WARNING(S), 7 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -