📄 led.lst
字号:
C51 COMPILER V8.02 LED 02/28/2009 21:13:53 PAGE 1
C51 COMPILER V8.02, COMPILATION OF MODULE LED
OBJECT MODULE PLACED IN led.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE led.c DEBUG OBJECTEXTEND
line level source
1 #include<reg52.h>
2 #define uchar unsigned char
3 sbit sda=P3^3;
4 sbit scl=P3^2;
5 uchar a;
6 void delay2402()
7 { ;; }
8 void start() //开始信号
9 {
10 1 sda=1;
11 1 delay2402();
12 1 scl=1;
13 1 delay2402();
14 1 sda=0;
15 1 delay2402();
16 1 }
17
18 void stop() //停止 信号
19 {
20 1 sda=0;
21 1 delay2402();
22 1 scl=1;
23 1 delay2402();
24 1 sda=1;
25 1 delay2402();
26 1 }
27
28 void respons() //应答
29 {
30 1 uchar i;
31 1 scl=1;
32 1 delay2402();
33 1 while((sda==1)&&(i<250))i++; //一定时间不应答就默认2402收到了
34 1 scl=0; //第九个时钟结束
35 1 delay2402();
36 1 }
37
38 void init() //总线初始化
39 {
40 1 sda=1; //释放总线
41 1 delay2402();
42 1 scl=1;
43 1 delay2402();
44 1 }
45
46 void write_byte(uchar date) //写一字节
47 {
48 1 uchar i,temp;
49 1 temp=date; //data内放的为实参
50 1
51 1
52 1 for(i=0;i<8;i++)
53 1 {
54 2 temp=temp<<1; //从高位到地位读取先把最高位移入CY最后补零,移8次
55 2 scl=0; //拉低,只有时钟为低电平sda才允许改变
C51 COMPILER V8.02 LED 02/28/2009 21:13:53 PAGE 2
56 2 delay2402();
57 2 sda=CY; //把每次移动的CY位移入sda
58 2 delay2402();
59 2 scl=1; //拉高,只有时钟为高电平才能被读或写
60 2 delay2402();
61 2 // scl=0;
62 2 // delay2402();
63 2 }
64 1 scl=0; //释放总线,读取应答信号(因为应答信号为低电平)
65 1 delay2402();
66 1 sda=1; //应答
67 1 delay2402();
68 1 }
69
70 uchar read_byte() //读一个字节
71 {
72 1 uchar i,k;
73 1 scl=0; //拉低,只有低电平才允许改变
74 1 delay2402();
75 1 sda=1;
76 1 delay2402();
77 1 for(i=0;i<8;i++)
78 1 {
79 2 scl=1; //为一时才允许读
80 2 delay2402();
81 2 k=(k<<1)|sda; //k左移一位最低位补零,最低位再和sda相或既把一位sda数据赋给k,左移8次就送完一个字节
82 2 scl=0; //一个时钟读(或写)一位数据,读或写都要按时序
83 2 delay2402();
84 2 }
85 1 return k;
86 1 }
87
88 void delay24021(uchar x)
89 {
90 1 uchar a,b;
91 1 for(a=x;a>0;a--)
92 1 for(b=100;b>0;b--);
93 1 }
94
95 void write_add(uchar address,uchar date)
96 {
97 1 start();
98 1 write_byte(0xa0);//1010 000 0(1010为4位固定地址000为器件地址0为写命令)
99 1 respons(); //应答
100 1 write_byte(address); //写地址(2402的地址)
101 1 respons(); //应答
102 1 write_byte(date); //写数据
103 1 respons(); //应答
104 1 stop(); //停
105 1 }
106
107 uchar read_add(uchar address)
108 {
109 1 uchar date;
110 1 start();
111 1 write_byte(0xa0); //1010 000 0(1010为4位固定地址000为器件地址0为写命令)
112 1 respons();
113 1 write_byte(address);
114 1 respons();
115 1 start();
116 1 write_byte(0xa1);
117 1 respons();
C51 COMPILER V8.02 LED 02/28/2009 21:13:53 PAGE 3
118 1 date=read_byte();
119 1 stop();
120 1 return date;
121 1 }
122
123 void main()
124 {
125 1 init();
126 1 write_add(23,0xff);
127 1 delay24021(100);
128 1 P0=read_add(23);
129 1 while(1);
130 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 228 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 1 1
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 + -