📄 24c02-shumaguan-play.lst
字号:
C51 COMPILER V7.08 24C02_SHUMAGUAN_PLAY 12/20/2006 21:42:45 PAGE 1
C51 COMPILER V7.08, COMPILATION OF MODULE 24C02_SHUMAGUAN_PLAY
OBJECT MODULE PLACED IN 24c02-shumaguan-play.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE 24c02-shumaguan-play.C BROWSE DEBUG OBJECTEXTEND
line level source
1 /*******************************************************************/
2 /* */
3 /* ME500单片机开发系统演示程序 - 24C04读写 */
4 /* */
5 /* 8位数码管显示 */
6 /* */
7 /* 将0-7显示数据先写入24C04芯片,再将其数据逐个读出送数码管显示。 */
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_READ 0xa1 // 器件地址以及读取操作
26 #define OP_WRITE 0xa0 // 器件地址以及写入操作
27
28 uchar code discode[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};
29
30 uchar data display[]={0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0};
31
32 sbit SDA = P3^5; //ME500
33 sbit SCL = P3^4;
34
35
36 unsigned char shift ;
37 unsigned char count=0 ;
38
39 #define delayNOP(); {_nop_();_nop_();_nop_();_nop_();};
40
41 /**********************************************************
42 延时子程序
43 **********************************************************/
44 void delayms(uint ms)
45
46 {
47 1 uchar k;
48 1 while(ms--)
49 1 {
50 2 for(k = 0; k < 120; k++);
51 2 }
52 1 }
53
54 /**********************************************************
55 开始位
C51 COMPILER V7.08 24C02_SHUMAGUAN_PLAY 12/20/2006 21:42:45 PAGE 2
56 **********************************************************/
57 void start()
58
59 {
60 1 SDA = 1;
61 1 SCL = 1;
62 1 delayNOP();
63 1 SDA = 0;
64 1 delayNOP();
65 1 SCL = 0;
66 1 }
67
68 /**********************************************************
69 停止位
70 **********************************************************/
71 void stop()
72
73 {
74 1 SDA = 0;
75 1 delayNOP();
76 1 SCL = 1;
77 1 delayNOP();
78 1 SDA = 1;
79 1 }
80
81 /**********************************************************
82 从AT24C02移出数据到MCU
83 **********************************************************/
84 uchar shin()
85 {
86 1 uchar i,read_data;
87 1 for(i = 0; i < 8; i++)
88 1 {
89 2 SCL = 1;
90 2 read_data <<= 1;
91 2 read_data |= SDA;
92 2 SCL = 0;
93 2 }
94 1 return(read_data);
95 1 }
96
97 /**********************************************************
98 从MCU移出数据到AT24C02
99 **********************************************************/
100 bit shout(uchar write_data)
101 {
102 1 uchar i;
103 1 bit ack_bit;
104 1 for(i = 0; i < 8; i++) // 循环移入8个位
105 1 {
106 2 SDA = (bit)(write_data & 0x80);
107 2 _nop_();
108 2 SCL = 1;
109 2 delayNOP();
110 2 SCL = 0;
111 2 write_data <<= 1;
112 2 }
113 1 SDA = 1; // 读取应答
114 1 delayNOP();
115 1 SCL = 1;
116 1 delayNOP();
117 1 ack_bit = SDA;
C51 COMPILER V7.08 24C02_SHUMAGUAN_PLAY 12/20/2006 21:42:45 PAGE 3
118 1 SCL = 0;
119 1 return ack_bit; // 返回AT24C02应答位
120 1 }
121
122 /**********************************************************
123 在指定地址addr处写入数据write_data
124 **********************************************************/
125 void write_byte(uchar addr, uchar write_data)
126 {
127 1 start();
128 1 shout(OP_WRITE);
129 1 shout(addr);
130 1 shout(write_data);
131 1 stop();
132 1 delayms(10); // 写入周期
133 1 }
134
135 /**********************************************************
136 在当前地址读取
137 **********************************************************/
138 uchar read_current()
139 {
140 1 uchar read_data;
141 1 start();
142 1 shout(OP_READ);
143 1 read_data = shin();
144 1 stop();
145 1 return read_data;
146 1 }
147
148 /**********************************************************
149 在指定地址读取
150 **********************************************************/
151 uchar read_random(uchar random_addr)
152
153 {
154 1 start();
155 1 shout(OP_WRITE);
156 1 shout(random_addr);
157 1 return(read_current());
158 1 }
159
160 /**********************************************************
161
162 **********************************************************/
163 main(void)
164 {
165 1 uchar k;
166 1
167 1 SDA = 1;
168 1 SCL = 1;
169 1
170 1 for(k=0; k<8; k++) //写入显示代码到AT24C02
171 1 write_byte(k, discode[k]);
172 1
173 1 delayms(100);
174 1
175 1 for(k=0; k<8; k++)
176 1 display[k]=read_random(k); //从AT24C02读出显示代码
177 1
178 1 while(1)
179 1 {
C51 COMPILER V7.08 24C02_SHUMAGUAN_PLAY 12/20/2006 21:42:45 PAGE 4
180 2 shift=0xfe;
181 2 P2=0xff ;
182 2 for(k=0; k<8; k++)
183 2 {
184 3 P0=display[k];
185 3 P2=shift;
186 3 shift=_crol_(shift,1);
187 3 delayms(1);
188 3 }
189 2
190 2 }
191 1 }
192
193 /**********************************************************/
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 272 ----
CONSTANT SIZE = 10 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 10 ----
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 + -