📄 lcd1602+at24c02.lst
字号:
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;
C51 COMPILER V7.06 LCD1602_AT24C02 08/01/2008 19:44:45 PAGE 7
89 1 =1 }
90 =1
91 =1
92 =1
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;
C51 COMPILER V7.06 LCD1602_AT24C02 08/01/2008 19:44:45 PAGE 8
151 2 =1 }
152 1 =1 return (rbyte);
153 1 =1 }
154 =1
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 }
C51 COMPILER V7.06 LCD1602_AT24C02 08/01/2008 19:44:45 PAGE 9
15
16
17
18 void main(void)
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 COMPILER V7.06 LCD1602_AT24C02 08/01/2008 19:44:45 PAGE 10
ASSEMBLY LISTING OF GENERATED OBJECT CODE
; FUNCTION lcd_busy (BEGIN)
; SOURCE LINE # 44
; SOURCE LINE # 45
0000 ?C0003:
; SOURCE LINE # 46
; SOURCE LINE # 47
0000 C2A2 CLR ep
; SOURCE LINE # 48
0002 C2A0 CLR rs
; SOURCE LINE # 49
0004 D2A1 SETB rw
; SOURCE LINE # 50
0006 7580FF MOV io,#0FFH
; SOURCE LINE # 51
0009 D2A2 SETB ep
; SOURCE LINE # 52
000B 00 NOP
; SOURCE LINE # 53
000C 2087F1 JB bz,?C0003
; SOURCE LINE # 54
000F C2A2 CLR ep
; SOURCE LINE # 55
0011 22 RET
; FUNCTION lcd_busy (END)
; FUNCTION _lcd_wcmd (BEGIN)
; SOURCE LINE # 62
;---- Variable 'cmd' assigned to Register 'R7' ----
; SOURCE LINE # 63
; SOURCE LINE # 64
0000 120000 R LCALL lcd_busy
; SOURCE LINE # 65
0003 C2A0 CLR rs
; SOURCE LINE # 66
0005 C2A1 CLR rw
; SOURCE LINE # 67
0007 D2A2 SETB ep
; SOURCE LINE # 68
0009 8F80 MOV P0,R7
; SOURCE LINE # 69
000B C2A2 CLR ep
; SOURCE LINE # 70
000D 22 RET
; FUNCTION _lcd_wcmd (END)
; FUNCTION _lcd_wdat (BEGIN)
; SOURCE LINE # 77
;---- Variable 'Data' assigned to Register 'R7' ----
; SOURCE LINE # 78
; SOURCE LINE # 79
0000 120000 R LCALL lcd_busy
; SOURCE LINE # 80
0003 D2A0 SETB rs
; SOURCE LINE # 81
0005 C2A1 CLR rw
; SOURCE LINE # 82
0007 D2A2 SETB ep
; SOURCE LINE # 83
0009 8F80 MOV io,R7
C51 COMPILER V7.06 LCD1602_AT24C02 08/01/2008 19:44:45 PAGE 11
; SOURCE LINE # 84
000B C2A2 CLR ep
; SOURCE LINE # 85
000D 22 RET
; FUNCTION _lcd_wdat (END)
; FUNCTION _lcd_pos (BEGIN)
; SOURCE LINE # 92
;---- Variable 'x' assigned to Register 'R6' ----
0000 AE07 MOV R6,AR7
; SOURCE LINE # 93
; SOURCE LINE # 94
0002 EE MOV A,R6
0003 300004 R JNB y,?C0007
0006 44C0 ORL A,#0C0H
0008 8002 SJMP ?C0051
000A ?C0007:
; SOURCE LINE # 95
000A 4480 ORL A,#080H
000C ?C0051:
000C FF MOV R7,A
000D 120000 R LCALL _lcd_wcmd
; SOURCE LINE # 96
0010 ?C0009:
0010 22 RET
; FUNCTION _lcd_pos (END)
; FUNCTION _printc (BEGIN)
; SOURCE LINE # 103
;---- Variable 'CHAR' assigned to Register 'R7' ----
; SOURCE LINE # 104
; SOURCE LINE # 105
0000 020000 R LJMP _lcd_wdat
; FUNCTION _printc (END)
; FUNCTION lcd_init (BEGIN)
; SOURCE LINE # 126
; SOURCE LINE # 127
; SOURCE LINE # 128
0000 7F38 MOV R7,#038H
0002 120000 R LCALL _lcd_wcmd
; SOURCE LINE # 129
0005 7F06 MOV R7,#06H
0007 120000 R LCALL _lcd_wcmd
; SOURCE LINE # 130
000A 7F0C MOV R7,#0CH
000C 120000 R LCALL _lcd_wcmd
; SOURCE LINE # 131
000F 7F01 MOV R7,#01H
0011 020000 R LJMP _lcd_wcmd
; FUNCTION lcd_init (END)
; FUNCTION delay1ms (BEGIN)
; SOURCE LINE # 48
; SOURCE LINE # 49
; SOURCE LINE # 51
;---- Variable 'i' assigned to Register 'R7' ----
0000 7F05 MOV R7,#05H
0002 ?C0012:
; SOURCE LINE # 52
;---- Variable 'j' assigned to Register 'R6' ----
0002 7E1C MOV R6,#01CH
C51 COMPILER V7.06 LCD1602_AT24C02 08/01/2008 19:44:45 PAGE 12
0004 ?C0015:
; SOURCE LINE # 53
;---- Variable 'k' assigned to Register 'R5' ----
0004 7D02 MOV R5,#02H
0006 ?C0018:
0006 DDFE DJNZ R5,?C0018
0008 ?C0017:
0008 DEFA DJNZ R6,?C0015
000A ?C0014:
000A DFF6 DJNZ R7,?C0012
; SOURCE LINE # 54
000C ?C0021:
000C 22 RET
; FUNCTION delay1ms (END)
; FUNCTION Start (BEGIN)
; SOURCE LINE # 60
; SOURCE LINE # 61
; SOURCE LINE # 62
0000 D2A4 SETB SDA
; SOURCE LINE # 63
0002 D2A3 SETB SCL
; SOURCE LINE # 64
0004 C2A4 CLR SDA
; SOURCE LINE # 65
0006 C2A3 CLR SCL
; SOURCE LINE # 66
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -