📄 2402den.lst
字号:
C51 COMPILER V7.50 2402DEN 02/12/2008 16:30:31 PAGE 1
C51 COMPILER V7.50, COMPILATION OF MODULE 2402DEN
OBJECT MODULE PLACED IN 2402DEN.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE 2402DEN.c BROWSE DEBUG OBJECTEXTEND
line level source
1 /*******************************************************************************
2 * 24C02读写 8路花样跑马灯 *
3 * 将演示数据先写入24C02芯片内,再将其数据逐个读出送P0口LED显示。 *
4 *硬件连接:8路指示灯接P2,24C02控制SDAP3.7 SCLP3.6 *
5 *开机, 跑马灯 为证明2402的作用, 去掉2402连线,则无显示 *
6 ********************************************************************************
7 * 日期: 2008-2-25 *
8 * 版本: 3.0 *
9 * 作者: 深圳志博电子有限公司 专业8051单片机教学站 *
10 * 邮箱: zty0012001@163.com *
11 * 网站: http://www.elecmcu.com http://www.elecmcu.com 更多例程请登陆网站 *
12 ********************************************************************************
13 * 硬件:此程序在本公司志博电子实验仪运行通过 *
14 ********************************************************************************
15 * 【版权】 Copyright(C)深圳志博电子有限公司 www.elecmcu.com All Rights Reserved *
16 * 【声明】 此程序仅用于学习与参考,引用请注明版权和作者信息! *
17 ********************************************************************************/
18 #include <reg51.h>
19 #include <intrins.h>
20 #define uchar unsigned char
21 #define uint unsigned int
22 #define OP_WRITE 0xa0 // 器件地址以及写入操作
23 #define OP_READ 0xa1 // 器件地址以及读取操作
24 uchar code display[72]={
25 0xFE,0xFD,0xFB,0xF7,0xEF,0xDF,0xBF,0x7F,
26 0xBF,0xDF,0xEF,0xF7,0xFB,0xFD,0xFE,0xFF,
27 0xFE,0xFC,0xF8,0xF0,0xE0,0xC0,0x80,0x00,
28 0x80,0xC0,0xE0,0xF0,0xF8,0xFC,0xFE,0xFF,
29 0xFC,0xF9,0xF3,0xE7,0xCF,0x9F,0x3F,
30 0x9F,0xCF,0xE7,0xF3,0xF9,0xFC,0xFF,
31 0xE7,0xDB,0xBD,0x7E,0xBD,0xDB,0xE7,0xFF,
32 0xE7,0xC3,0x81,0x00,0x81,0xC3,0xE7,0xFF,
33 0xAA,0x55,0x18,0xFF,0xF0,0x0F,
34 0x00,0xFF,0x00,0xFF };
35 sbit SDA = P1^7;
36 sbit SCL = P1^6;
37 void start();
38 void stop();
39 uchar shin();
40 bit shout(uchar write_data);
41 void write_byte( uchar addr, uchar write_data);
42 void fill_byte(uchar fill_size,uchar fill_data);
43 void delayms(uint ms);
44 uchar read_current();
45 uchar read_random(uchar random_addr);
46 #define delayNOP(); {_nop_();_nop_();_nop_();_nop_();};
47 /**********************************************************/
48 main(void)
49 {
50 1 uchar i;
51 1 SDA = 1;
52 1 SCL = 1;
53 1 fill_byte(72,0xff); // 将前72字节填充0xff
54 1
55 1 for(i = 0 ; i < 72; i++) //写入显示代码到AT24C02
C51 COMPILER V7.50 2402DEN 02/12/2008 16:30:31 PAGE 2
56 1 {
57 2 write_byte(i,display[i]);
58 2 }
59 1 while(1)
60 1 {
61 2 for(i =0 ;i <72 ; i++) //从AT24C02移出数据送到P0口显示
62 2 {
63 3 P0 = read_random(i);
64 3 P2 = read_random(i);
65 3 delayms(350);
66 3 }
67 2 }
68 1 }
69 /**********************************************************/
70 void start()
71 //开始位
72 {
73 1 SDA = 1;
74 1 SCL = 1;
75 1 delayNOP();
76 1 SDA = 0;
77 1 delayNOP();
78 1 SCL = 0;
79 1 }
80 /**********************************************************/
81 void stop()
82 // 停止位
83 {
84 1 SDA = 0;
85 1 delayNOP();
86 1 SCL = 1;
87 1 delayNOP();
88 1 SDA = 1;
89 1 }
90 /**********************************************************/
91 uchar shin()
92 // 从AT24C02移出数据到MCU
93 {
94 1 uchar i,read_data;
95 1 for(i = 0; i < 8; i++)
96 1 {
97 2 SCL = 1;
98 2 read_data <<= 1;
99 2 // read_data |= (uchar)SDA;
100 2 read_data |= SDA;
101 2 SCL = 0;
102 2 }
103 1 return(read_data);
104 1 }
105 /**********************************************************/
106 bit shout(uchar write_data)
107 // 从MCU移出数据到AT24C02
108 {
109 1 uchar i;
110 1 bit ack_bit;
111 1 for(i = 0; i < 8; i++) // 循环移入8个位
112 1 {
113 2 SDA = (bit)(write_data & 0x80);
114 2 _nop_();
115 2 SCL = 1;
116 2 delayNOP();
117 2 SCL = 0;
C51 COMPILER V7.50 2402DEN 02/12/2008 16:30:31 PAGE 3
118 2 write_data <<= 1;
119 2 }
120 1 SDA = 1; // 读取应答
121 1 delayNOP();
122 1 SCL = 1;
123 1 delayNOP();
124 1 ack_bit = SDA;
125 1 SCL = 0;
126 1 return ack_bit; // 返回AT24C02应答位
127 1 }
128 /**********************************************************/
129 void write_byte(uchar addr, uchar write_data)
130 // 在指定地址addr处写入数据write_data
131 {
132 1 start();
133 1 shout(OP_WRITE);
134 1 shout(addr);
135 1 shout(write_data);
136 1 stop();
137 1 delayms(10); // 写入周期
138 1 }
139 /**********************************************************/
140 void fill_byte(uchar fill_size,uchar fill_data)
141 // 填充数据fill_data到EEPROM内fill_size字节
142 {
143 1 uchar i;
144 1 for(i = 0; i < fill_size; i++)
145 1 {
146 2 write_byte(i, fill_data);
147 2 }
148 1 }
149 /**********************************************************/
150 uchar read_current()
151 // 在当前地址读取
152 {
153 1 uchar read_data;
154 1 start();
155 1 shout(OP_READ);
156 1 read_data = shin();
157 1 stop();
158 1 return read_data;
159 1 }
160 /**********************************************************/
161 uchar read_random(uchar random_addr)
162 // 在指定地址读取
163 {
164 1 start();
165 1 shout(OP_WRITE);
166 1 shout(random_addr);
167 1 return(read_current());
168 1 }
169 /**********************************************************/
170 void delayms(uint ms)
171 // 延时子程序
172 {
173 1 uchar k;
174 1 while(ms--)
175 1 {
176 2 for(k = 0; k < 120; k++);
177 2 }
178 1 }
179 /**********************************************************/
C51 COMPILER V7.50 2402DEN 02/12/2008 16:30:31 PAGE 4
180
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 + -