📄 24c02.lst
字号:
C51 COMPILER V7.20 24C02 09/18/2011 12:06:24 PAGE 1
C51 COMPILER V7.20, COMPILATION OF MODULE 24C02
OBJECT MODULE PLACED IN 24c02.OBJ
COMPILER INVOKED BY: C:\keil\C51\BIN\C51.EXE 24c02.c BROWSE DEBUG OBJECTEXTEND
line level source
1 #include<reg52.h>
2 #define uint unsigned int
3 #define uchar unsigned char
4 sbit a=P1^0;
5 sbit b=P1^1;
6 sbit c=P1^2;
7 sbit clk=P3^6;
8 sbit sda=P3^7;
9 const uchar table[]={
10 0x3f,0x06,0x5b,0x4f,0x66,
11 0x6d,0x7d,0x07,0x7f,0x6f};
12 void delay_24C02()
13 { ; ; ; ; }
14 void delay(uint k)
15 {
16 1 uint i;
17 1 for(;k>0;k--)
18 1 for(i=110;i>0;i--);
19 1 }
20 void HC138(uchar i)
21 {
22 1 a=i&0x01;
23 1 b=i&0x02;
24 1 c=i&0x04;
25 1 }
26 /**************************************
27 数码管显示函数,带参数
28 要实现显示时,调用函数带一个实参即可
29 ******************************/
30 void display(uchar num)
31 {
32 1 uchar ge,shi,bai;
33 1 bai=num/100;
34 1 shi=num%100/10;
35 1 ge=num%10;
36 1 HC138(0);
37 1 P2=table[ge];
38 1 delay(2);
39 1 HC138(1);
40 1 P2=table[shi];
41 1 delay(2);
42 1 HC138(2);
43 1 P2=table[bai];
44 1 delay(2);
45 1
46 1 }
47 void init_24C02()//24C02初始化
48 {
49 1 sda=1;
50 1 delay_24C02();
51 1 clk=1;
52 1 delay_24C02();
53 1 }
54 void start()//24C02启动信号
55 {
C51 COMPILER V7.20 24C02 09/18/2011 12:06:24 PAGE 2
56 1 sda=1;delay_24C02();
57 1 clk=1;delay_24C02();
58 1 sda=0;delay_24C02();
59 1 }
60 void stop()//24C02终止信号
61 {
62 1 sda=0;delay_24C02();
63 1 clk=1;delay_24C02();
64 1 sda=1;delay_24C02();
65 1 }
66 void respons()//应答信号
67 {
68 1 uchar i=0;
69 1 clk=1;delay_24C02();
70 1 while((sda==1)&&(i<255)) i++;
71 1 clk=0;
72 1 delay_24C02();
73 1 }
74 void No_ack()
75 {
76 1 sda=1;
77 1 clk=1;
78 1 delay_24C02();
79 1 clk=0;
80 1 delay_24C02();
81 1 }
82 void write_byte(uchar date)//写一个字节,共8位
83 {
84 1 uchar i,temp;
85 1 temp=date;
86 1 for(i=0;i<8;i++)
87 1 {
88 2 clk=0;
89 2 delay_24C02();
90 2 if(temp&0x80)
91 2 sda=1;
92 2 else
93 2 sda=0;
94 2 clk=1;
95 2 delay_24C02();
96 2 temp<<=1;
97 2 }
98 1 clk=0;delay_24C02();
99 1 sda=1;delay_24C02();
100 1 }
101 uchar read_byte()//读一个字节
102 {
103 1 uchar i,k;
104 1 for(i=0;i<8;i++)
105 1 {
106 2 clk=1;
107 2 delay_24C02();
108 2 k<<=1;
109 2 if(sda)
110 2 k++;
111 2 clk=0;
112 2 delay_24C02();
113 2 }
114 1 return k;
115 1 }
116 void write_add(uchar address,uchar date)//指定地址写一个数据
117 {
C51 COMPILER V7.20 24C02 09/18/2011 12:06:24 PAGE 3
118 1 start();
119 1 write_byte(0xa0);
120 1 respons();
121 1 write_byte(address);
122 1 respons();
123 1 write_byte(date);
124 1 respons();
125 1 stop();
126 1 }
127 uchar read_add(uchar address)//读出指定地址的数据
128 {
129 1 uchar date;
130 1 start();
131 1 write_byte(0xa0);
132 1 respons();
133 1 write_byte(address);
134 1 respons();
135 1 start();
136 1 write_byte(0xa1);
137 1 respons();
138 1 date=read_byte();
139 1 No_ack();
140 1 stop();
141 1 return date;
142 1 }
143 void main()
144 {
145 1 uchar temp,i,j;
146 1 init_24C02();
147 1 for(i=0;i<40;i++)//往AT24C02地址0到20分别写入0至20数据
148 1 {
149 2 write_add(i,i+20);
150 2 delay(20);
151 2 }
152 1
153 1 delay(2000);
154 1 while(1)
155 1 {
156 2 for(i=0;i<40;i++)//分别从0至20地址读出数据进行显示
157 2 {
158 3 temp=read_add(i);
159 3 for(j=0;j<50;j++)//相当于延时,因为数码管要实现动态扫描
160 3 display(temp);
161 3 }
162 2 }
163 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 391 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 10 2
IDATA SIZE = ---- ----
BIT SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -