📄 24c02.lst
字号:
C51 COMPILER V7.06 24C02 07/26/2007 14:08:17 PAGE 1
C51 COMPILER V7.06, COMPILATION OF MODULE 24C02
OBJECT MODULE PLACED IN 24c02.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE 24c02.c BROWSE DEBUG OBJECTEXTEND
stmt level source
1 #include<reg52.h>
2 #include <stdio.h>
3 #include <intrins.h>
4 #include <absacc.h>
5 sbit RS=P1^0; //设置连接线
6 sbit RW=P1^1;
7 sbit E=P1^2;
8 sbit D7=P2^7;
9 sbit scl=P3^2; //24c02 SCL时钟线
10 sbit sda=P3^3; //24c02 SDA数据线
11
12 #define uchar unsigned char
13 #define uint unsigned int
14 unsigned char sec; //定义计数值,每过1 秒,sec 加1
15 unsigned int tcnt; //
16
17 uchar x24c02_read(uchar address); //从24c02的地址address中读取一个字节数据
18 void x24c02_write(uchar address,uchar info);//向24c02的address地址中写入一字节数据inf
19 void x24c02_init(); //24c02初始化子程序
20 void delay1(uchar x);
21 void flash();
22 void x24c01_init();
23 void start();
24 void stop();
25 void writex(uchar j);
26 uchar readx();
27 void clock();
28 /*******************************
29 以下为LCD1602的驱动程序
30 ************************************/
31 busy() //系统忙检测函数
32 {
33 1 do {P2=0xff;
34 2 RS=0;
35 2 RW=1;
36 2 E=0;
37 2 _nop_();
38 2 E=1;
39 2 }while (D7);
40 1 }
41
42 write_com(char commend)//写命令函数
43 {
44 1 P2=commend;
45 1 RS=0;
46 1 RW=0;
47 1 E=0;
48 1 busy();
49 1 E=1;
50 1 }
51
52 i_lcd()//初始化函数
53 {
54 1 write_com(0x01);//清屏
55 1 write_com(0x38);//置功能
C51 COMPILER V7.06 24C02 07/26/2007 14:08:17 PAGE 2
56 1 write_com(0x0c);//显示开
57 1 write_com(0x06);//输入模式
58 1 write_com(0x80);//显示位置
59 1 }
60
61
62 write_char(char lcddata)//写数据函数
63 {
64 1 P2=lcddata;
65 1 RS=1;
66 1 RW=0;
67 1 E=0;
68 1 busy();
69 1 E=1;
70 1 }
71 /*******************************
72 写一串数据
73 ************************************/
74
75 write_string(char * s)
76 {
77 1 while (*s!=0x00)
78 1 write_char(*s++);
79 1 }
80 /*******************************
81 以上为LCD1602的驱动程序
82 ************************************/
83 void delay1(uchar j)
84 {
85 1 uint i;
86 1 for(i=0;i<j;i++);
87 1 ;
88 1 }
89 /*******************************
90 以下为24C02的驱动程序
91 ************************************/
92 void flash()////延时
93 {;;
94 1 }
95 ///////初始化
96 void x24c02_init()
97 {
98 1 scl=1; flash(); sda=1; flash();
99 1 }
100 /*******************************
101 以下为24C02的开始信号SCL为高电平时,SDA由高电平向低电平跳变,开始传送数据。
102 ************************************/
103
104 void start()
105 {
106 1 sda=1; flash(); scl=1; flash(); sda=0; flash(); scl=0; flash();
107 1 }
108 /*******************************
109 以下为24C02的结束信号//SCL为高电平时?,SDA由低电平向高电平跳变,结束传送数据。。
110 ************************************/
111 void stop()
112 {
113 1 sda=0; flash(); scl=1; flash(); sda=1; flash();
114 1 }
115 /*******************************
116 以下为24C02的写一个字节
117 ************************************/
C51 COMPILER V7.06 24C02 07/26/2007 14:08:17 PAGE 3
118 void writex(uchar j)
119 {
120 1 uchar i,temp;
121 1 temp=j;
122 1 for (i=0;i<8;i++)
123 1 {
124 2 temp=temp<<1; scl=0; flash(); sda=CY; flash(); scl=1; flash();
125 2 }
126 1
127 1 scl=0; flash(); sda=1; flash();
128 1 }
129 /*******************************************
130 也可以这样写数据
131 for (i=0;i<8;i++)
132 {scl=0;flash();
133 if(temp<<i&0x80) sda=1;else sda=0;scl=1; flash();
134 ****************************************************************************
135 以下为24C02的读一个字节
136 ************************************/
137 uchar readx()
138 {
139 1 uchar i,j,k=0;
140 1 scl=0; flash(); sda=1;///数据线为输入状态
141 1 for (i=0;i<8;i++){
142 2 flash(); scl=1; flash();
143 2 if (sda==1) j=1;
144 2 else j=0;
145 2 k=(k<<1)|j; scl=0; ///////读数据 8位先传高位
146 2 }
147 1 flash(); return(k);
148 1 }
149 /*************************************
150 每次响应,保持SDA高电平///这里写法个人认为可以不同,SDA也可以是低电瓶///其次考虑建立时间
151 ********************/
152 void clock() ///时钟
153 {
154 1 uchar i=0;
155 1 scl=1; flash();
156 1 while ((sda==1)&&(i<255))i++;
157 1 scl=0; flash();
158 1 }
159 uchar x24c02_read(uchar address)
160 {
161 1 uchar i;
162 1 start(); writex(0xa0);///写操作
163 1 clock();
164 1 writex(address);
165 1 clock();
166 1 start();
167 1 writex(0xa1); clock();//读操作
168 1 i=readx(); stop();
169 1 delay1(10);
170 1 return(i);
171 1 }
172 /*****************************
173 在起始条件之后,必须是器件的控制字节,其中高四位为器件类型识别符(不同的芯片类型有不同的定义,EEPROM一般应
-为1010)
174 接着三位为片选,最后一位为读写位,当为1时为读操作,为0时为写操作。
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -