?? 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 + -