📄 24c02-count-shuma-me500-c51.lst
字号:
C51 COMPILER V7.08 24C02_COUNT_SHUMA_ME500_C51 12/20/2006 21:36:15 PAGE 1
C51 COMPILER V7.08, COMPILATION OF MODULE 24C02_COUNT_SHUMA_ME500_C51
OBJECT MODULE PLACED IN 24c02-count-shuma-ME500-C51.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE 24c02-count-shuma-ME500-C51.C BROWSE DEBUG OBJECTEXTEND
line level source
1 /*******************************************************************/
2 /* */
3 /* ME500单片机开发系统演示程序 - 计开机次数 */
4 /* */
5 /* 3位数码管显示显示 */
6 /* */
7 /* */
8 /* 版本: V1.0 (2006/11/20) */
9 /* 作者: gguoqing (Email: gguoqing@willar.com) */
10 /* 网站: www.willar.com(伟纳电子) www.mcusj.com(伟纳单片机世界) */
11 /* 时间: 2006/11/20 */
12 /* */
13 /*【版权】Copyright(C)伟纳电子 www.willar.com All Rights Reserved */
14 /*【声明】此程序仅用于学习与参考,引用请注明版权和作者信息! */
15 /* */
16 /*******************************************************************/
17
18 #include <reg51.h>
19 #include <intrins.h>
20
21 #define uchar unsigned char
22 #define uint unsigned int
23
24 #define OP_WRITE 0xa0 // 器件地址以及写入操作
25 #define OP_READ 0xa1 // 器件地址以及读取操作
26
27 sbit SDA = P3^5; //ME500
28 sbit SCL = P3^4;
29
30 uchar code ledcode[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0xff};
31 uchar data display[]={0x00,0x00,0x00};
32 uchar temp,temp1;
33
34 #define delayNOP(); {_nop_();_nop_();_nop_();_nop_();};
35
36 /**********************************************************
37 延时子程序
38 **********************************************************/
39 void delayms(uint ms)
40
41 {
42 1 uchar k;
43 1 while(ms--)
44 1 {
45 2 for(k = 0; k < 120; k++);
46 2 }
47 1 }
48
49 /**********************************************************
50 数据转换与显示函数
51 **********************************************************/
52 void ledplay()
53 {
54 1 display[2]=temp1/100;
55 1 display[0]=temp1%100;
C51 COMPILER V7.08 24C02_COUNT_SHUMA_ME500_C51 12/20/2006 21:36:15 PAGE 2
56 1 display[1]=display[0]/10;
57 1 display[0]=display[0]%10;
58 1
59 1 if(display[2]==0)
60 1 {
61 2 display[2]=0x0a;
62 2 if(display[1]==0)
63 2 display[1]=0x0a;
64 2 }
65 1
66 1 P0 = ledcode[display[0]]; //显示
67 1 P2 = 0x7f;
68 1 delayms(3);
69 1
70 1 P0 = ledcode[display[1]]; //显示
71 1 P2 = 0xbf;
72 1 delayms(3);
73 1
74 1 P0 = ledcode[display[2]] ; //显示小数位
75 1 P2 = 0xdf;
76 1 delayms(3);
77 1 }
78
79
80 /**********************************************************
81 开始位
82 **********************************************************/
83 void start()
84
85 {
86 1 SDA = 1;
87 1 SCL = 1;
88 1 delayNOP();
89 1 SDA = 0;
90 1 delayNOP();
91 1 SCL = 0;
92 1 }
93
94 /**********************************************************
95 停止位
96 **********************************************************/
97 void stop()
98
99 {
100 1 SDA = 0;
101 1 delayNOP();
102 1 SCL = 1;
103 1 delayNOP();
104 1 SDA = 1;
105 1 }
106
107 /**********************************************************
108 从AT24C02移出数据到MCU
109 **********************************************************/
110 uchar shin()
111 {
112 1 uchar i,read_data;
113 1 for(i = 0; i < 8; i++)
114 1 {
115 2 SCL = 1;
116 2 read_data <<= 1;
117 2 // read_data |= (uchar)SDA;
C51 COMPILER V7.08 24C02_COUNT_SHUMA_ME500_C51 12/20/2006 21:36:15 PAGE 3
118 2 read_data |= SDA;
119 2 SCL = 0;
120 2 }
121 1 return(read_data);
122 1 }
123
124 /**********************************************************
125 从MCU移出数据到AT24C02
126 **********************************************************/
127 bit shout(uchar write_data)
128 {
129 1 uchar i;
130 1 bit ack_bit;
131 1 for(i = 0; i < 8; i++) // 循环移入8个位
132 1 {
133 2 SDA = (bit)(write_data & 0x80);
134 2 _nop_();
135 2 SCL = 1;
136 2 delayNOP();
137 2 SCL = 0;
138 2 write_data <<= 1;
139 2 }
140 1 SDA = 1; // 读取应答
141 1 delayNOP();
142 1 SCL = 1;
143 1 delayNOP();
144 1 ack_bit = SDA;
145 1 SCL = 0;
146 1 return ack_bit; // 返回AT24C02应答位
147 1 }
148
149 /**********************************************************
150 在指定地址addr处写入数据write_data
151 **********************************************************/
152 void write_byte(uchar addr, uchar write_data)
153 {
154 1 start();
155 1 shout(OP_WRITE);
156 1 shout(addr);
157 1 shout(write_data);
158 1 stop();
159 1 delayms(10); // 写入周期
160 1 }
161
162 /**********************************************************
163 在当前地址读取
164 **********************************************************/
165 uchar read_current()
166 {
167 1 uchar read_data;
168 1 start();
169 1 shout(OP_READ);
170 1 read_data = shin();
171 1 stop();
172 1 return read_data;
173 1 }
174
175 /**********************************************************
176 在指定地址读取
177 **********************************************************/
178 uchar read_random(uchar random_addr)
179
C51 COMPILER V7.08 24C02_COUNT_SHUMA_ME500_C51 12/20/2006 21:36:15 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 主函数
189 **********************************************************/
190 main(void)
191 {
192 1 SDA = 1;
193 1 SCL = 1;
194 1
195 1 temp=read_random(1); //从AT24C02读出数据
196 1 temp1=temp;
197 1 temp++;
198 1 write_byte(1,temp); //写入数据到AT24C02
199 1
200 1 while(1)
201 1 ledplay();
202 1
203 1 }
204
205 /**********************************************************/
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 307 ----
CONSTANT SIZE = 11 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 5 ----
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 + -