📄 max127.lst
字号:
C51 COMPILER V6.20c MAX127 12/20/2002 10:35:48 PAGE 1
C51 COMPILER V6.20c, COMPILATION OF MODULE MAX127
OBJECT MODULE PLACED IN max127.OBJ
COMPILER INVOKED BY: C:\KEIL\C51\BIN\C51.EXE max127.c DEBUG OBJECTEXTEND
stmt level source
1 #include "intrins.h"
2 #include "At89x51.h"
3 /////////////////////////////////////
4 //采用P1口作控制
5 //11.0592的晶体
6 ////////////////////////////////////
7 //I2C总线的数据和时钟
8 #define SCL P1_7
9 #define SDA P1_6
10 //////////////////////////////////////
11 //7219的各控制线
12 #define CLK7219 P2_7
13 #define DIN7219 P2_6
14 #define CS7219 P2_5
15 ///////////////////////////////////////
16 max7219(unsigned int dat)
17 {
18 1 char i;
19 1 CS7219=0;
20 1 _nop_();
21 1
22 1 for(i=0;i<16;i++)
23 1 {
24 2 DIN7219=(dat>>(15-i))&0x1;
25 2 CLK7219=1;
26 2 _nop_();
27 2 CLK7219=0;
28 2 };
29 1
30 1 CS7219=1;
31 1 }
32 /////////////////////////////////////////////////////////
33 ///Max127 12位AD操作程序
34 /////////////////////////////////////////////////////////
35 void I2cWriteByte(unsigned char wdata)
36 {
37 1 char i;
38 1 for(i=0;i<8;i++)
39 1 {
40 2 SDA=((wdata>>(7-i))&0x1);
41 2 SCL=1;
42 2 _nop_();
43 2 SCL=0;
44 2 }
45 1 }
46 unsigned char I2cReadByte(void)
47 {
48 1 unsigned char result,i;
49 1 bit getdata;
50 1 result=0;
51 1 for(i=0;i<8;i++)
52 1 {
53 2 SDA=1;
54 2 SCL=1;
55 2 getdata=SDA;
C51 COMPILER V6.20c MAX127 12/20/2002 10:35:48 PAGE 2
56 2 SCL=0;
57 2 result|=getdata;
58 2 if(i!=7)
59 2 result<<=1;
60 2 }
61 1 return result;
62 1 }
63 //////////////////////////////////////////////
64 //address: 0 1 0 1 A2 A1 A0
65 ///ctr : Start SEL2 SEL1 SEL0 RING BIP PD1 PD0
66 //fail return 0xffff
67 unsigned int max127(unsigned char address,unsigned char ctr)
68 {
69 1 bit ack;
70 1 unsigned int result;
71 1 unsigned char hbyte,lbyte;
72 1 address<<=1;
73 1 //////////////////////////////////////////////
74 1 //开始转换
75 1 SDA=0; //启动
76 1 _nop_();
77 1 SCL=0;
78 1
79 1 I2cWriteByte(address&0xfe); //发送地址写
80 1
81 1 SDA=1;
82 1 SCL=1;
83 1 ack=SDA;
84 1 SCL=0;
85 1 if(ack) //应答slave to master
86 1 {
87 2 SDA=0;
88 2 SCL=1;
89 2 SDA=1;
90 2 result=0xffff;
91 2 return result;
92 2 }
93 1 I2cWriteByte(ctr); //发送控制字
94 1
95 1 SDA=1;
96 1 SCL=1;
97 1 ack=SDA;
98 1 SCL=0;
99 1 if(ack) //应答slave to master
100 1 {
101 2 SDA=0;
102 2 SCL=1;
103 2 SDA=1;
104 2 result=0xffff;
105 2 return result;
106 2 }
107 1
108 1 SDA=0;
109 1 SCL=1;
110 1 SDA=1; //stop
111 1
112 1 _nop_();
113 1 _nop_();
114 1 ////////////////////////////////////////////////////
115 1 ///开始读数据
116 1 SDA=0; //启动
117 1 _nop_();
C51 COMPILER V6.20c MAX127 12/20/2002 10:35:48 PAGE 3
118 1 SCL=0;
119 1
120 1 I2cWriteByte(address|0x1); //发送地址读
121 1
122 1 SDA=1;
123 1 SCL=1;
124 1 _nop_();
125 1 SCL=0;
126 1 if(ack) //应答slave to master
127 1 {
128 2 SDA=0;
129 2 SCL=1;
130 2 SDA=1;
131 2 result=0xffff;
132 2 return result;
133 2 }
134 1 hbyte=I2cReadByte();
135 1
136 1 SDA=0; //应答mater to slave
137 1 SCL=1;
138 1 _nop_();
139 1 SCL=0;
140 1
141 1 lbyte=I2cReadByte();
142 1
143 1 SDA=1; ////应答master to slave
144 1 SCL=1;
145 1 _nop_();
146 1 SCL=0;
147 1
148 1 SDA=0;
149 1 SCL=1;
150 1 SDA=1; //stop
151 1 /////////////////////////////////////
152 1 //处理数据
153 1 result=0;
154 1 result|=hbyte;
155 1 result<<=8;
156 1 result|=lbyte;
157 1 result>>=4;
158 1
159 1 return result;
160 1 }
161 main()
162 {
163 1 int i;
164 1 unsigned char j,k;
165 1 unsigned int addata,disp;
166 1
167 1 SCL=1;
168 1 SDA=1;
169 1
170 1 CLK7219=0;
171 1 for(i=0;i<31000;i++);
172 1 ///////////////////////////////////////////////////////
173 1 //7219初始化
174 1 max7219(0x0C01); //shutdown register format
175 1 max7219(0x09FF); //decode mode code B 7-0
176 1 max7219(0x0A0F); //intensity register format
177 1 max7219(0x0B07); //sacan limit register format
178 1 max7219(0x0F00); //display test register format
179 1 ////////////////////////////////////////////////////////
C51 COMPILER V6.20c MAX127 12/20/2002 10:35:48 PAGE 4
180 1 for(k=0;k<8;k++)
181 1 {
182 2 disp=k+1;
183 2 disp<<=8;
184 2 max7219(disp);
185 2
186 2 }
187 1 /////////////////////////////////////////////////
188 1 while(1)
189 1 {
190 2 for(j=0;j<8;j++)
191 2 {
192 3 disp=0x0800|(j&0xf);
193 3 max7219(disp);
194 3 //address: 0 1 0 1 A2 A1 A0
195 3 ///ctr : Start SEL2 SEL1 SEL0 RING BIP PD1 PD0
196 3 addata=max127(0x28,0x80|((j&0x7)<<4));
197 3 for(k=0;k<4;k++)
198 3 {
199 4 disp=k+1;
200 4 disp<<=8;
201 4 disp|=addata%10;
202 4 addata/=10;
203 4 max7219(disp); //转换成十进制显示
204 4 }
205 3
206 3 P1_0=~P1_0;
207 3 for(k=0;k<4;k++)
208 3 {
209 4 for(i=0;i<31000;i++);
210 4 for(i=0;i<31000;i++);
211 4 for(i=0;i<31000;i++);
212 4 }
213 3 }
214 2 }
215 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 551 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = ---- 6
IDATA SIZE = ---- ----
BIT SIZE = ---- 2
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -