📄 stc_pwm.lst
字号:
C51 COMPILER V7.50 STC_PWM 02/18/2008 17:14:14 PAGE 1
C51 COMPILER V7.50, COMPILATION OF MODULE STC_PWM
OBJECT MODULE PLACED IN stc_pwm.OBJ
COMPILER INVOKED BY: d:\Keil\C51\BIN\C51.EXE stc_pwm.c BROWSE DEBUG OBJECTEXTEND
line level source
1 //用PWM0模式控制OE(P3.7&P1.2),达到的效果是红渐亮到最亮,再渐暗到黑,然后是绿色、蓝色、白色。
2
3 #include <REGX55.H>
4 #include "stc12c.h"
5 #include "b2x.h"
6
7 #define u8 unsigned char
8 #define u16 unsigned int
9 #define STIME 2000 //定时器时间 32ms
10 sbit OE =P1^2;
11 sbit STB=P1^3;
12
13 bit flag_pwm;
14 bit flag_dir;
15
16 void time0(void) interrupt 1 using 1
17 {
18 1 TH0=-(STIME/256);
19 1 TL0=-(STIME%256);
20 1 flag_pwm=1;
21 1 }
22 void main(void)
23 {
24 1 u8 i,j;
25 1 u8 liangdu,color_state;
26 1 //ini
27 1 ///////////////////////////////io
28 1 //P1.2 P3.7为开漏输出,P3.2 P3.3 P3.4 P3.5 为输入 其他默认
29 1 P1M0=b00000100;
30 1 P1M1=b00000000;
31 1 P3M0=b00111100;
32 1 P3M1=b00000000;
33 1 OE=1;
34 1 ///////////////////////////////spi
35 1 SPCTL =b11010000;
36 1 SPSTAT =b11000000;
37 1 //////////////////////////////pwm
38 1 CMOD=0x02;
39 1 CL=0x00;
40 1 CH=0x00;
41 1 CCAPOL=0xC0;
42 1 CCAPOH=0xC0; //占空比设置
43 1 CCAPM0=0x42;
44 1 /////////////////////////////
45 1 color_state=0x22;
46 1 for(i=0;i<20;i++)
47 1 {
48 2 SPDAT=color_state;
49 2 while(!(SPSTAT&0x80));
50 2 SPSTAT=0x80;
51 2 }
52 1 OE=1;
53 1 for(j=0;j<2;j++);
54 1 STB=1;
55 1 for(j=0;j<2;j++);
C51 COMPILER V7.50 STC_PWM 02/18/2008 17:14:14 PAGE 2
56 1 STB=0;
57 1 for(j=0;j<2;j++);
58 1 OE=0;
59 1 for(j=0;j<2;j++);
60 1 flag_pwm=0;
61 1 //////////////////////////////time0
62 1 TMOD=b00000001;
63 1 TH0=-(STIME/256);
64 1 TL0=-(STIME%256);
65 1 ET0=1;
66 1 TR0=1;
67 1 ///////////////////////////////start
68 1 OE=1;
69 1 CR=1;
70 1 flag_dir=0;
71 1 liangdu=2;
72 1 EA=1;
73 1 while(1)
74 1 {
75 2 if(flag_pwm==1)
76 2 {
77 3 if(flag_dir==0)
78 3 {
79 4 //CCAPOH=liangdu;
80 4 CCAPOH=(liangdu/8)*8;
81 4 liangdu++;
82 4 if(liangdu==0)
83 4 {
84 5 liangdu=255;
85 5 flag_dir=1;
86 5 }
87 4 }
88 3 else
89 3 {
90 4 //CCAPOH=liangdu;
91 4 CCAPOH=(liangdu/8)*8;
92 4 liangdu--;
93 4 if(liangdu==0)
94 4 {
95 5 switch(color_state)
96 5 {
97 6 case(0x22):
98 6 {
99 7 color_state=0x44;
100 7 for(i=0;i<20;i++)
101 7 {
102 8 SPDAT=color_state;
103 8 while(!(SPSTAT&0x80));
104 8 SPSTAT=0x80;
105 8 }
106 7 OE=1;
107 7 for(j=0;j<2;j++);
108 7 STB=1;
109 7 for(j=0;j<2;j++);
110 7 STB=0;
111 7 for(j=0;j<2;j++);
112 7 OE=0;
113 7 for(j=0;j<2;j++);
114 7 liangdu=1;
115 7 break;
116 7 }
117 6 case(0x44):
C51 COMPILER V7.50 STC_PWM 02/18/2008 17:14:14 PAGE 3
118 6 {
119 7 color_state=0x88;
120 7 for(i=0;i<20;i++)
121 7 {
122 8 SPDAT=color_state;
123 8 while(!(SPSTAT&0x80));
124 8 SPSTAT=0x80;
125 8 }
126 7 OE=1;
127 7 for(j=0;j<2;j++);
128 7 STB=1;
129 7 for(j=0;j<2;j++);
130 7 STB=0;
131 7 for(j=0;j<2;j++);
132 7 OE=0;
133 7 for(j=0;j<2;j++);
134 7 liangdu=1;
135 7 break;
136 7 }
137 6 case(0x88):
138 6 {
139 7 color_state=0xee;
140 7 for(i=0;i<20;i++)
141 7 {
142 8 SPDAT=color_state;
143 8 while(!(SPSTAT&0x80));
144 8 SPSTAT=0x80;
145 8 }
146 7 OE=1;
147 7 for(j=0;j<2;j++);
148 7 STB=1;
149 7 for(j=0;j<2;j++);
150 7 STB=0;
151 7 for(j=0;j<2;j++);
152 7 OE=0;
153 7 for(j=0;j<2;j++);
154 7 liangdu=1;
155 7 break;
156 7 }
157 6 case(0xee):
158 6 {
159 7 color_state=0x22;
160 7 for(i=0;i<20;i++)
161 7 {
162 8 SPDAT=color_state;
163 8 while(!(SPSTAT&0x80));
164 8 SPSTAT=0x80;
165 8 }
166 7 OE=1;
167 7 for(j=0;j<2;j++);
168 7 STB=1;
169 7 for(j=0;j<2;j++);
170 7 STB=0;
171 7 for(j=0;j<2;j++);
172 7 OE=0;
173 7 for(j=0;j<2;j++);
174 7 liangdu=1;
175 7 break;
176 7 }
177 6 default:
178 6 {
179 7 break;
C51 COMPILER V7.50 STC_PWM 02/18/2008 17:14:14 PAGE 4
180 7 }
181 6 }
182 5 flag_dir=0;
183 5 }
184 4 }
185 3 flag_pwm=0;
186 3 }
187 2 }
188 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 451 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = ---- 3
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 + -