📄 liguolin.lst
字号:
C51 COMPILER V7.50 LIGUOLIN 11/09/2006 17:22:55 PAGE 1
C51 COMPILER V7.50, COMPILATION OF MODULE LIGUOLIN
OBJECT MODULE PLACED IN liguolin.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE liguolin.c BROWSE DEBUG OBJECTEXTEND
line level source
1 //************************************
2 //**** 李国林变色灯,按键停止
3 //**** pcb:mdx-48 mcu:89c2051 2004-08-23
4 //************************************
5 #include <reg51.h>
6 #include <stdio.h>//一般I/O函数
7 #include <stdlib.h>//标准函数
8 #include <absacc.h>//绝对地址
9 #include <intrins.h>//内部函数
10 #include <setjmp.h>
11 #define uchar unsigned char
12 #define uint unsigned int
13 #define Byte unsigned char
14 #define Word unsigned int
15 #define ulong unsigned long
16 #define bool bit
17 #define true 1
18 #define false 0
19 #define V_TH0 0xfb /* 时间常数高8位 (65536-500)/256 */
20 #define V_TL0 0x00 /* 时间常数低8位 (65536-500)%256 11.0592*/
21 #define ADD 2
22 #define reg01 XBYTE[0xc000]
23 #define reg02 XBYTE[0xc001] //控制寄存器
24 #define WriteDeviceAddress 0xa0
25 #define ReadDviceAddress 0xa1
26
27 //*****************************************
28 uchar rbuf,gbuf,bbuf;
29 uchar bdata flag;
30 sbit sw=flag^0;
31 sbit keyin=P1^4;
32 sbit roe=P0^7;// roe=P1^7;
33 sbit goe=P0^6;// goe=P1^6;
34 sbit boe=P0^5;// boe=P1^5;
35 sbit SCL=P3^0;
36 sbit SDA=P3^1;
37 /***************************************************************************/
38 void I2cDelay(unsigned int number) {
39 1 unsigned char temp;
40 1 for(;number!=0;number--) {
41 2 for(temp=112;temp!=0;temp--) {
42 3 }
43 2 }
44 1 }
45
46 /***************************************************************************/
47 void Start() {
48 1 SDA=1;
49 1 SCL=1;
50 1 SDA=0;
51 1 SCL=0;
52 1 }
53
54 /***************************************************************************/
55 void Stop() {
C51 COMPILER V7.50 LIGUOLIN 11/09/2006 17:22:55 PAGE 2
56 1 SCL=0;
57 1 SDA=0;
58 1 SCL=1;
59 1 SDA=1;
60 1 }
61
62 /***************************************************************************/
63 void Ack() {
64 1 SDA=0;
65 1 SCL=1;
66 1 SCL=0;
67 1 SDA=1;
68 1 }
69
70 /***************************************************************************/
71 void NoAck() {
72 1 SDA=1;
73 1 SCL=1;
74 1 SCL=0;
75 1 }
76
77 /***************************************************************************/
78 bit TestAck() {
79 1 bit ErrorBit;
80 1 SDA=1;
81 1 SCL=1;
82 1 ErrorBit=SDA;
83 1 SCL=0;
84 1 return(ErrorBit);
85 1 }
86
87 /***************************************************************************/
88 Write8Bit(unsigned char input)
89 {
90 1 unsigned char temp;
91 1 for(temp=8;temp!=0;temp--) {
92 2 SDA=(bit)(input&0x80);
93 2 SCL=1;
94 2 SCL=0;
95 2 input=input<<1;
96 2 }
97 1 }
98
99 /***************************************************************************/
100 void Write24c02(unsigned char *Wdata,unsigned char RomAddress,unsigned char number) {
101 1 Start();
102 1 Write8Bit(WriteDeviceAddress);
103 1 TestAck();
104 1 Write8Bit(RomAddress);
105 1 TestAck();
106 1 for(;number!=0;number--) {
107 2 Write8Bit(*Wdata);
108 2 TestAck();
109 2 Wdata++;
110 2 }
111 1 Stop();
112 1 I2cDelay(10);
113 1 }
114
115 /***************************************************************************/
116 unsigned char Read8Bit() {
117 1 unsigned char temp,rbyte=0;
C51 COMPILER V7.50 LIGUOLIN 11/09/2006 17:22:55 PAGE 3
118 1 for(temp=8;temp!=0;temp--) {
119 2 SCL=1;
120 2 rbyte=rbyte<<1;
121 2 rbyte=rbyte|((unsigned char)(SDA));
122 2 SCL=0;
123 2 }
124 1 return(rbyte);
125 1 }
126
127 /***************************************************************************/
128 void Read24c02(unsigned char *RamAddress,unsigned char RomAddress,unsigned char bytes) {
129 1 // unsigned char temp,rbyte;
130 1 Start();
131 1 Write8Bit(WriteDeviceAddress);
132 1 TestAck();
133 1 Write8Bit(RomAddress);
134 1 TestAck();
135 1 Start();
136 1 Write8Bit(ReadDviceAddress);
137 1 TestAck();
138 1 while(bytes!=1) {
139 2 *RamAddress=Read8Bit();
140 2 Ack();
141 2 RamAddress++;
142 2 bytes--;
143 2 }
144 1 *RamAddress=Read8Bit();
145 1 NoAck();
146 1 Stop();
147 1 }
148
149 //***************************************
150 void pwm_oe(uchar r,g,b)
151 {
152 1 uchar i;
153 1 for(i=1;i<255;i++)
154 1 {
155 2 roe=(r<i)?1:0;
156 2 goe=(g<i)?1:0;
157 2 boe=(b<i)?1:0;
158 2 }
159 1 }
160 //*********************************
161 bit key (void)
162 {
163 1 uchar *p;
164 1 uchar temp[5];
165 1 p=&temp[0];
166 1 keyin=1;
167 1 if(!keyin)
168 1 {
169 2 pwm_oe(rbuf,gbuf,bbuf);
170 2 if(keyin)return(sw);
171 2 while(!keyin)pwm_oe(rbuf,gbuf,bbuf);
172 2 pwm_oe(rbuf,gbuf,bbuf);
173 2 sw=!sw;
174 2 temp[0]=0x55;
175 2 temp[1]=rbuf;
176 2 temp[2]=gbuf;
177 2 temp[3]=bbuf;
178 2 Write24c02(p,0,5);
179 2 }
C51 COMPILER V7.50 LIGUOLIN 11/09/2006 17:22:55 PAGE 4
180 1 return(sw);
181 1 }
182 //**********************
183 void delay(void)
184 {
185 1 do
186 1 pwm_oe(rbuf,gbuf,bbuf);
187 1 while(key());
188 1 }
189 //**********************************
190
191
192
193 //******************************
194 void color(void)
195 {
196 1 uchar i;
197 1 for(gbuf=255;gbuf>0;gbuf--)
198 1 {bbuf=gbuf;pwm_oe(rbuf,gbuf,bbuf);delay();}//r
199 1 rbuf=255;gbuf=0;bbuf=0;
200 1 for(i=0;i<250;i++){pwm_oe(rbuf,gbuf,bbuf);delay();}
201 1 for(gbuf=1;gbuf>0;gbuf++)
202 1 {pwm_oe(rbuf,gbuf,bbuf);delay();}//y
203 1 gbuf=255;
204 1 for(i=0;i<250;i++){pwm_oe(rbuf,gbuf,bbuf);delay();}
205 1 for(rbuf=255;rbuf>0;rbuf--)
206 1 {pwm_oe(rbuf,gbuf,bbuf);delay();}//g
207 1 rbuf=0;
208 1 for(i=0;i<250;i++){pwm_oe(rbuf,gbuf,bbuf);delay();}
209 1 for(bbuf=1;bbuf>0;bbuf++)
210 1 {pwm_oe(rbuf,gbuf,bbuf);delay();}//q
211 1 bbuf=255;
212 1 for(i=0;i<250;i++){pwm_oe(rbuf,gbuf,bbuf);delay();}
213 1 for(gbuf=255;gbuf>0;gbuf--)
214 1 {pwm_oe(rbuf,gbuf,bbuf);delay();}//b
215 1 gbuf=0;
216 1 for(i=0;i<250;i++){pwm_oe(rbuf,gbuf,bbuf);delay();}
217 1 for(rbuf=1;rbuf>0;rbuf++)
218 1 {pwm_oe(rbuf,gbuf,bbuf);delay();}//z
219 1 rbuf=255;
220 1 for(i=0;i<250;i++){pwm_oe(rbuf,gbuf,bbuf);delay();}
221 1 for(gbuf=1;gbuf>0;gbuf++)
222 1 {pwm_oe(rbuf,gbuf,bbuf);delay();}//w
223 1 gbuf=255;
224 1 for(i=0;i<250;i++){pwm_oe(rbuf,gbuf,bbuf);delay();}
225 1
226 1
227 1
228 1 }
229 //************************
230 main()
231 {
232 1 uchar *p;
233 1 uchar temp[5];
234 1 p=&temp[0];
235 1 Read24c02(p,0,5);
236 1 if(temp[0]==0x55)
237 1 {sw=1;
238 2 rbuf=temp[1];
239 2 gbuf=temp[2];
240 2 bbuf=temp[3];
241 2 delay();
C51 COMPILER V7.50 LIGUOLIN 11/09/2006 17:22:55 PAGE 5
242 2 }
243 1 else
244 1 {sw=0;
245 2 rbuf=gbuf=bbuf=255;
246 2 }
247 1 while(1)
248 1 color();
249 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 694 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 4 24
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 + -