📄 main.lst
字号:
C51 COMPILER V7.07 MAIN 07/05/2006 02:58:17 PAGE 1
C51 COMPILER V7.07, COMPILATION OF MODULE MAIN
OBJECT MODULE PLACED IN main.OBJ
COMPILER INVOKED BY: c:\Keil\C51\BIN\C51.EXE main.c BROWSE DEBUG OBJECTEXTEND
stmt level source
1 #define uchar unsigned char //定义一下方便使用
2 #define uint unsigned int
3 #define ulong unsigned long
4 #include <reg52.h> //包括一个52标准内核的头文件
5
6 char code dx516[3] _at_ 0x003b;//这是为了仿真设置的
7
8 #define WriteDeviceAddress 0xa0 //定义器件在IIC总线中的地址
9 #define ReadDviceAddress 0xa1
10 sbit SCL=P2^7;
11 sbit SDA=P2^6;
12
13 sbit P10=P1^0;
14 sbit K1=P3^2;
15
16 //定时函数
17 void DelayMs(unsigned int number)
18 {
19 1 unsigned char temp;
20 1 for(;number!=0;number--)
21 1 {
22 2 for(temp=112;temp!=0;temp--) ;
23 2 }
24 1 }
25
26 //开始总线
27 void Start()
28 {
29 1 SDA=1;
30 1 SCL=1;
31 1 SDA=0;
32 1 SCL=0;
33 1 }
34
35 //结束总线
36 void Stop()
37 {
38 1 SCL=0;
39 1 SDA=0;
40 1 SCL=1;
41 1 SDA=1;
42 1 }
43
44
45 //发ACK0
46 void NoAck()
47 {
48 1 SDA=1;
49 1 SCL=1;
50 1 SCL=0;
51 1 }
52
53 //测试ACK
54 bit TestAck()
55 {
C51 COMPILER V7.07 MAIN 07/05/2006 02:58:17 PAGE 2
56 1 bit ErrorBit;
57 1 SDA=1;
58 1 SCL=1;
59 1 ErrorBit=SDA;
60 1 SCL=0;
61 1 return(ErrorBit);
62 1 }
63
64 //写入8个bit到24c02
65 Write8Bit(unsigned char input)
66 {
67 1 unsigned char temp;
68 1 for(temp=8;temp!=0;temp--)
69 1 {
70 2 SDA=(bit)(input&0x80);
71 2 SCL=1;
72 2 SCL=0;
73 2 input=input<<1;
74 2 }
75 1 }
76
77 //写入一个字节到24c02中
78 void Write24c02(uchar ch,uchar address)
79 {
80 1 Start();
81 1 Write8Bit(WriteDeviceAddress);
82 1 TestAck();
83 1 Write8Bit(address);
84 1 TestAck();
85 1
86 1 Write8Bit(ch);
87 1 TestAck();
88 1
89 1 Stop();
90 1 DelayMs(10);
91 1 }
92
93 //从24c02中读出8个bit
94 uchar Read8Bit()
95 {
96 1 unsigned char temp,rbyte=0;
97 1 for(temp=8;temp!=0;temp--)
98 1 {
99 2 SCL=1;
100 2 rbyte=rbyte<<1;
101 2 rbyte=rbyte|((unsigned char)(SDA));
102 2 SCL=0;
103 2 }
104 1 return(rbyte);
105 1 }
106
107 //从24c02中读出1个字节
108 uchar Read24c02(uchar address)
109 {
110 1 uchar ch;
111 1
112 1 Start();
113 1 Write8Bit(WriteDeviceAddress);
114 1 TestAck();
115 1 Write8Bit(address);
116 1 TestAck();
117 1 Start();
C51 COMPILER V7.07 MAIN 07/05/2006 02:58:17 PAGE 3
118 1 Write8Bit(ReadDviceAddress);
119 1 TestAck();
120 1 ch=Read8Bit();
121 1 NoAck();
122 1 Stop();
123 1 return(ch);
124 1 }
125
126 //写入按键次数到24c02,并读出来显示在4个LED上
127
128 void main(void) // 主程序
129 {
130 1 uchar c1,c2;
131 1
132 1 while(1)
133 1 {
134 2 c1=Read24c02(0x01); //读出24c02第一个地址数据
135 2 P1=c1; //显示在P1口的4个LED上
136 2
137 2 if(!K1) //按键处理
138 2 {
139 3 c1++; //值加1
140 3 Write24c02(c1,0x01); //重新写入24c02
141 3
142 3 while(!K1); //等待按键松开
143 3 for(c2=0;c2<250;c2++); //松开按键去抖
144 3 }
145 2 }
146 1 }
147
148 //提示,可以脱机运行看看掉电后的数据是否还在保存.
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 195 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = ---- ----
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 + -