📄 0.lst
字号:
C51 COMPILER V8.02 0 07/16/2010 19:42:55 PAGE 1
C51 COMPILER V8.02, COMPILATION OF MODULE 0
OBJECT MODULE PLACED IN 0.OBJ
COMPILER INVOKED BY: D:\软件\学习软件\keil3\C51\BIN\C51.EXE 0.c BROWSE DEBUG OBJECTEXTEND
line level source
1 /***************************************************************
2 “天祥电子” 倾情奉献
3 www.txmcu.com
4 www.txmcu.cn
5 *****************************************************************
6 程序功能: 由于24c02是每个存储地址只对应8个bit的存储空间,即一个
7 存储单元所存储的数据最大为255,该例程介绍了一种当所记忆
8 数据大于255(而小于65536)的存储方法。即用两个存储单元来
9 存储一个数据。
10 下载程序后,数码管会显示所设定的num值(此处设为12345)。
11 ***************************************************************/
12
13 #include<reg51.h>
14 #include <intrins.h>
15 #define uint unsigned int
16 #define uchar unsigned char
17 uint num,num1,num2; //定义计数值,每过1秒,sec加1
18 sbit sda=P2^0; //IO口定义
19 sbit scl=P2^1;
20 sbit dula=P2^6;
21 sbit wela=P2^7;
22 sbit s1=P3^4;//计数按键
23 sbit s2=P3^5;//清零按键
24 unsigned char j,k;
25 char a,b,c,d,e;
26
27 void delay(unsigned char i) //延时程序
28 {
29 1 for(j=i;j>0;j--)
30 1 for(k=125;k>0;k--);
31 1 }
32
33 uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d, //数码管编码
34 0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
35
36 void nop()
37 {
38 1 _nop_();
39 1 _nop_();
40 1 }
41 void display(uchar a,b,c,d,e) //显示程序
42 {
43 1 dula=0;
44 1 P0=table[a]; //显示万位
45 1 dula=1;
46 1 dula=0;
47 1
48 1 wela=0;
49 1 P0=0xfe;
50 1 wela=1;
51 1 wela=0;
52 1 delay(5);
53 1
54 1 dula=0;
55 1 P0=table[b]; //显示千位
C51 COMPILER V8.02 0 07/16/2010 19:42:55 PAGE 2
56 1 dula=1;
57 1 dula=0;
58 1
59 1 wela=0;
60 1 P0=0xfd;
61 1 wela=1;
62 1 wela=0;
63 1 delay(5);
64 1
65 1 dula=0;
66 1 P0=table[c]; //显示百位
67 1 dula=1;
68 1 dula=0;
69 1
70 1 wela=0;
71 1 P0=0xfb;
72 1 wela=1;
73 1 wela=0;
74 1 delay(5);
75 1
76 1 dula=0;
77 1 P0=table[d]; //显示十位
78 1 dula=1;
79 1 dula=0;
80 1
81 1 wela=0;
82 1 P0=0xf7;
83 1 wela=1;
84 1 wela=0;
85 1 delay(5);
86 1
87 1 dula=0;
88 1 P0=table[e]; //显示个位
89 1 dula=1;
90 1 dula=0;
91 1
92 1 wela=0;
93 1 P0=0xef;
94 1 wela=1;
95 1 wela=0;
96 1 delay(5);
97 1
98 1 }
99
100 /////////24C02读写驱动程序////////////////////
101 void delay1(unsigned int m)
102 { unsigned int n;
103 1 for(n=0;n<m;n++);
104 1 }
105
106 void init() //24c02初始化子程序
107 {
108 1 scl=1;
109 1 nop();
110 1 sda=1;
111 1 nop();
112 1 }
113
114 void start() //启动I2C总线
115 {
116 1 sda=1;
117 1 nop();
C51 COMPILER V8.02 0 07/16/2010 19:42:55 PAGE 3
118 1 scl=1;
119 1 nop();
120 1 sda=0;
121 1 nop();
122 1 scl=0;
123 1 nop();
124 1 }
125
126 void stop() //停止I2C总线
127 {
128 1 sda=0;
129 1 nop();
130 1 scl=1;
131 1 nop();
132 1 sda=1;
133 1 nop();
134 1 }
135
136 void writebyte(unsigned char j) //写一个字节
137 {
138 1 unsigned char i,temp;
139 1 temp=j;
140 1 for (i=0;i<8;i++)
141 1 {
142 2 temp=temp<<1;
143 2 scl=0;
144 2 nop();
145 2 sda=CY; //temp左移时,移出的值放入了CY中
146 2 nop();
147 2 scl=1; //待sda线上的数据稳定后,将scl拉高
148 2 nop();
149 2 }
150 1 scl=0;
151 1 nop();
152 1 sda=1;
153 1 nop();
154 1 }
155
156 unsigned char readbyte() //读一个字节
157 {
158 1 unsigned char i,j,k=0;
159 1 scl=0; nop(); sda=1;
160 1 for (i=0;i<8;i++)
161 1 {
162 2 nop(); scl=1; nop();
163 2 if(sda==1)
164 2 j=1;
165 2 else
166 2 j=0;
167 2 k=(k<<1)|j;
168 2 scl=0;
169 2 }
170 1 nop();
171 1 return(k);
172 1 }
173
174 void clock() //I2C总线时钟
175 {
176 1 unsigned char i=0;
177 1 scl=1;
178 1 nop();
179 1 while((sda==1)&&(i<255))
C51 COMPILER V8.02 0 07/16/2010 19:42:55 PAGE 4
180 1 i++;
181 1 scl=0;
182 1 nop();
183 1 }
184
185 ////////从24c02的地址address中读取一个字节数据/////
186 unsigned char read24c02(unsigned char address)
187 {
188 1 unsigned char i;
189 1 start();
190 1 writebyte(0xa0);
191 1 clock();
192 1 writebyte(address);
193 1 clock();
194 1 start();
195 1 writebyte(0xa1);
196 1 clock();
197 1 i=readbyte();
198 1 stop();
199 1 delay1(100);
200 1 return(i);
201 1 }
202
203 //////向24c02的address地址中写入一字节数据info/////
204 void write24c02(unsigned char address,unsigned char info)
205 {
206 1 start();
207 1 writebyte(0xa0);
208 1 clock();
209 1 writebyte(address);
210 1 clock();
211 1 writebyte(info);
212 1 clock();
213 1 stop();
214 1 delay1(5000); //这个延时一定要足够长,否则会出错。因为24c02在从sda上取得数据后,还需要一定时间的烧录过
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -