📄 24c02-led-dis.lst
字号:
C51 COMPILER V8.05a 24C02_LED_DIS 11/21/2006 21:37:00 PAGE 1
C51 COMPILER V8.05a, COMPILATION OF MODULE 24C02_LED_DIS
OBJECT MODULE PLACED IN 24c02-LED-DIS.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE 24c02-LED-DIS.C BROWSE DEBUG OBJECTEXTEND
line level source
1 /*******************************************************************/
2 /* */
3 /* ME500单片机开发系统演示程序 - 多花样流水灯 */
4 /* */
5 /* LED显示 */
6 /* */
7 /* 将演示数据先写入24C02芯片内,再将其数据逐个读出送P0口LED显示。 */
8 /* */
9 /* 版本: V1.0 (2006/11/20) */
10 /* 作者: gguoqing (Email: gguoqing@willar.com) */
11 /* 网站: www.willar.com(伟纳电子) www.mcusj.com(伟纳单片机世界) */
12 /* 时间: 2006/11/20 */
13 /* */
14 /*【版权】Copyright(C)伟纳电子 www.willar.com All Rights Reserved */
15 /*【声明】此程序仅用于学习与参考,引用请注明版权和作者信息! */
16 /* */
17 /*******************************************************************/
18
19 #include <reg51.h>
20 #include <intrins.h>
21
22 #define uchar unsigned char
23 #define uint unsigned int
24
25 #define OP_WRITE 0xa0 // 器件地址以及写入操作
26 #define OP_READ 0xa1 // 器件地址以及读取操作
27
28 uchar code display[72]={
29 0xFE,0xFD,0xFB,0xF7,0xEF,0xDF,0xBF,0x7F,
30 0xBF,0xDF,0xEF,0xF7,0xFB,0xFD,0xFE,0xFF,
31 0xFE,0xFC,0xF8,0xF0,0xE0,0xC0,0x80,0x00,
32 0x80,0xC0,0xE0,0xF0,0xF8,0xFC,0xFE,0xFF,
33 0xFC,0xF9,0xF3,0xE7,0xCF,0x9F,0x3F,
34 0x9F,0xCF,0xE7,0xF3,0xF9,0xFC,0xFF,
35 0xE7,0xDB,0xBD,0x7E,0xBD,0xDB,0xE7,0xFF,
36 0xE7,0xC3,0x81,0x00,0x81,0xC3,0xE7,0xFF,
37 0xAA,0x55,0x18,0xFF,0xF0,0x0F,
38 0x00,0xFF,0x00,0xFF };
39
40 sbit SDA = P3^5; //ME500
41 sbit SCL = P3^4;
42
43 void start();
44 void stop();
45 uchar shin();
46 bit shout(uchar write_data);
47 void write_byte( uchar addr, uchar write_data);
48 void fill_byte(uchar fill_size,uchar fill_data);
49 void delayms(uint ms);
50 uchar read_current();
51 uchar read_random(uchar random_addr);
52
53 #define delayNOP(); {_nop_();_nop_();_nop_();_nop_();};
54
55 /**********************************************************/
C51 COMPILER V8.05a 24C02_LED_DIS 11/21/2006 21:37:00 PAGE 2
56 main(void)
57 {
58 1 uchar i;
59 1 SDA = 1;
60 1 SCL = 1;
61 1 fill_byte(72,0xff); // 将前72字节填充0xff
62 1
63 1 for(i = 0 ; i < 72; i++) //写入显示代码到AT24C02
64 1 {
65 2 write_byte(i,display[i]);
66 2 }
67 1
68 1 while(1)
69 1 {
70 2 for(i =0 ;i <72 ; i++) //从AT24C02移出数据送到P0口显示
71 2 {
72 3 P0 = read_random(i);
73 3 P2 = read_random(i);
74 3 delayms(350);
75 3 }
76 2 }
77 1 }
78
79 /**********************************************************/
80 void start()
81 //开始位
82 {
83 1 SDA = 1;
84 1 SCL = 1;
85 1 delayNOP();
86 1 SDA = 0;
87 1 delayNOP();
88 1 SCL = 0;
89 1 }
90
91 /**********************************************************/
92 void stop()
93 // 停止位
94 {
95 1 SDA = 0;
96 1 delayNOP();
97 1 SCL = 1;
98 1 delayNOP();
99 1 SDA = 1;
100 1 }
101
102 /**********************************************************/
103 uchar shin()
104 // 从AT24C02移出数据到MCU
105 {
106 1 uchar i,read_data;
107 1 for(i = 0; i < 8; i++)
108 1 {
109 2 SCL = 1;
110 2 read_data <<= 1;
111 2 // read_data |= (uchar)SDA;
112 2 read_data |= SDA;
113 2 SCL = 0;
114 2 }
115 1 return(read_data);
116 1 }
117
C51 COMPILER V8.05a 24C02_LED_DIS 11/21/2006 21:37:00 PAGE 3
118 /**********************************************************/
119 bit shout(uchar write_data)
120 // 从MCU移出数据到AT24C02
121 {
122 1 uchar i;
123 1 bit ack_bit;
124 1 for(i = 0; i < 8; i++) // 循环移入8个位
125 1 {
126 2 SDA = (bit)(write_data & 0x80);
127 2 _nop_();
128 2 SCL = 1;
129 2 delayNOP();
130 2 SCL = 0;
131 2 write_data <<= 1;
132 2 }
133 1 SDA = 1; // 读取应答
134 1 delayNOP();
135 1 SCL = 1;
136 1 delayNOP();
137 1 ack_bit = SDA;
138 1 SCL = 0;
139 1 return ack_bit; // 返回AT24C02应答位
140 1 }
141
142 /**********************************************************/
143 void write_byte(uchar addr, uchar write_data)
144 // 在指定地址addr处写入数据write_data
145 {
146 1 start();
147 1 shout(OP_WRITE);
148 1 shout(addr);
149 1 shout(write_data);
150 1 stop();
151 1 delayms(10); // 写入周期
152 1 }
153
154 /**********************************************************/
155 void fill_byte(uchar fill_size,uchar fill_data)
156 // 填充数据fill_data到EEPROM内fill_size字节
157 {
158 1 uchar i;
159 1 for(i = 0; i < fill_size; i++)
160 1 {
161 2 write_byte(i, fill_data);
162 2 }
163 1 }
164
165 /**********************************************************/
166 uchar read_current()
167 // 在当前地址读取
168 {
169 1 uchar read_data;
170 1 start();
171 1 shout(OP_READ);
172 1 read_data = shin();
173 1 stop();
174 1 return read_data;
175 1 }
176
177 /**********************************************************/
178 uchar read_random(uchar random_addr)
179 // 在指定地址读取
C51 COMPILER V8.05a 24C02_LED_DIS 11/21/2006 21:37:00 PAGE 4
180 {
181 1 start();
182 1 shout(OP_WRITE);
183 1 shout(random_addr);
184 1 return(read_current());
185 1 }
186
187 /**********************************************************/
188 void delayms(uint ms)
189 // 延时子程序
190 {
191 1 uchar k;
192 1 while(ms--)
193 1 {
194 2 for(k = 0; k < 120; k++);
195 2 }
196 1 }
197
198 /**********************************************************/
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 279 ----
CONSTANT SIZE = 72 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = ---- 4
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 + -