|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
编译时这么多错误该怎么处理,我也是网上复制的,如下图:请麻烦给看看% M* E9 u2 w l2 _% h
3 w, {; v/ Z+ V
/*程序说明*/: q. L+ w# S" M& c/ g" z. Y
//P3.3-P3.5输出3路频率500hz占空比1%-99%可调方波//9 D: Q. k- U# z" W+ x7 J$ v9 @0 R
//P3.0-P3.2有3个按键单独控制3路占空比输出长按加5%
/ ^: \7 f, z7 y, H& V+ h3 x//短按加1%占空比
) O: d1 h, y% k* g#include <STC15F2K60S2.H>
; f9 r$ N1 C2 k% z2 |' Y9 l0 y#include <intrins.h> 5 H( p+ } |" C, g
#define uchar unsigned char8 i" B' f& S9 O( ]3 B" T) }6 O
#define uint unsigned int+ S; w1 T" ~* B" H9 x
sbit red=P3^3; //红色LED输出口
3 J% h) z8 S( L( t( N; O) k7 Nsbit green=P3^4; //绿色LED输出口
. O6 j, h9 H! T0 H; o, `# Z7 `sbit blue=P3^5; //蓝色LED输出口
( p3 T5 [) C' L5 J7 Q- Dsbit k1=P3^0; //红色LEDpwm控制
e% L: f( C4 A; {3 F$ ^! {* Osbit k2=P3^1; //绿色LEDpwm控制8 e' ^+ U1 f* x8 }9 Q
sbit k3=P3^2; //蓝色LEDpwm控制+ o* f: H% x: D4 }7 H5 c
uchar r_temp=1,g_temp=1,b_temp=1; //三色占空比数值缓存. a* J4 N3 k1 A! w i G4 |
uchar flag; //定时器T2定时次数标志8 N t9 F- k: i7 Z
//延时函数,大约延时10ms.) n/ u1 b4 u. h; p- z5 s% _
" ?& l8 f. D6 I
void Delay10ms() //@11.0592MHz
- r/ c8 W. D1 l# u8 E# G{
( p6 H" E o/ W7 ~ unsigned char i, j;
; l4 a8 @) T" m& v+ y% l1 b5 T' o5 K2 r( `2 [% M
i = 108;7 V0 I6 A \* m* h. I @. Y
j = 145;
% W6 A$ K3 m( @ do
( L, `& t0 \- b4 _. | { d! P" N$ o0 r$ c1 y- d! j: \
while (--j);' B+ {" L% p; w5 ?% ~4 c
} while (--i);
9 ]0 S8 g$ T6 q0 V7 p6 D* o7 w4 T}
. n! a' W& G. }+ [% O# I, w0 o. p% A4 J5 ~; u3 L2 w$ g
//按键扫描程序$ i3 i9 x4 ^, U
void key()
8 q! O+ R0 z: m{1 P5 i% j" e1 L) o: Q, a6 o) e; M' @* m
uchar num1=0,num2=0,num3=0;! Y! C, E% V5 X
if(k1==0) //按键K1处理程序& Q; o4 D1 m4 |( t* \' j: L
{! [) v. O+ z, R& C1 s& }3 P8 `
Delay10ms();
3 O2 {: _( i# Y if(k1==0), j, Z% o/ ^4 B. W) @' n8 s3 k. ]
{& [) C# p4 U4 o# s
if(r_temp<99)( q5 T7 ?; R0 B6 W. {% U6 b( _5 k1 d( y
{
, z4 [- V+ z) m- X r_temp++;
9 w0 h9 N- e0 F/ ^6 ? while(!k1) 7 [0 ?4 e" ?. }& a! T s
{8 y& L# d" l- U4 L- S2 R
num1++; //长按标志位加到10约100ms* z# }. O C! n* K
Delay10ms();. D/ O+ W- V+ \6 J( X1 v
if(num1==10&&r_temp<95)
; [( R2 M% P; m {
: c" p5 J" m8 e r_temp+=5;
; l8 t# A% z% E num1=0;
6 c4 Z) I* e1 y7 J }
4 [1 s; c8 t3 k2 H3 E9 [ if(r_temp>=95) r_temp=1;# O/ `/ [( _8 X# l2 O- D
}8 J7 Z: d( \& M1 M' P* M2 k5 W
}# d f* b- R9 Y3 a/ l9 M& _2 F" E
else r_temp=1; 7 s& ~- W; r% e0 v- m+ w4 v. R1 s" `
}) t% Z# m P* ?) T9 Z' t7 t
}
1 z/ @; U d, Q4 ^: l5 m! N$ `" |7 \2 p. I2 e6 R5 C
if(k2==0) //按键K2处理程序
4 }& M- Z* Y5 h- N% r% o8 H {
9 V+ A! L$ H' A6 G/ d8 y" B Delay10ms();6 l9 f/ d4 n2 ~; _) R
if(k2==0)
4 ?/ O. w+ y) f {
+ }$ U9 m, P7 B' g2 j. T: \1 | if(g_temp<99)8 D; t& _4 P Y3 m( L
{
, n" K6 Q8 n9 m' U, y1 r# e g_temp++;
4 N( B2 B @; ? while(!k2)
$ ^/ i3 V/ `5 e" _ {
. Q" u) u2 o7 T4 k: m. } num2++; //长按标志位加到10约100ms8 i$ ^1 Q ~0 C9 C7 Y+ G4 d
Delay10ms();: Z( Q4 e: p9 E: C! m0 _, n
if(num2==10&&g_temp<95)- c7 r5 A' A( r, S) G4 l5 Y ^* ?3 q; O
{
, R0 J2 L4 J; M0 D2 W g_temp+=5;
! t; Y; Y) {/ W5 T! U. e) N num2=0;
! n1 H* E" d' |* S! Y9 k }4 J, Q$ g2 c4 }- J) f0 D
if (g_temp>=95) g_temp=1;
: P2 e, `4 Y& ?' S- \! c }: ^5 p4 Y( s" I5 F3 t
}
8 O% X/ w4 A/ ?# _* G else g_temp =1;
% _# q. S# s+ X/ g9 v }; x2 P% \( f% B
}! ?4 @6 _ s6 c- [
if(k3==0) //按键K3处理程序; e3 _2 ~. W5 ~$ L$ k
{8 _4 i2 q% Z1 W# U2 [
Delay10ms();1 A: A5 h: }9 ~, D; F; _6 S
if(k3==0)) M' w* j3 i0 G
{
4 T. q; ]& ?- m0 G7 s( C if(b_temp<99)
3 @1 _$ v% L( l# L- s* v2 q {
# i, o' c! L J b_temp++;: x+ X" U* P9 n; B4 R* e
while(!k3)7 O/ e( Z; D2 K+ I! E
{4 l" D4 z/ E( ?3 ^
num3++; //长按标志位加到10约100ms
* ` }7 o; \) c! Q+ W Delay10ms();
. z# _3 j/ g# d& Y. x9 l, I if(num3==10&&b_temp<95)
$ y- C V, }' j9 b: _, W5 v- D3 L {0 ?8 @9 y4 A' ]- s" e9 ^
b_temp+=5;4 G" p- d& J' s' q( M, Y
num3=0;% B% e) j' R3 v2 @4 f* v
}+ H" Y( P B% {
if(b_temp>=95) b_temp=1;
2 q8 [+ M$ d( ^3 B5 l+ O }. I& H* O1 p+ d# B6 ]. m) D' E8 C
}
; g* ]8 a8 {; a$ Q$ V) }/ W else b_temp =1;4 P! F6 {: O& U) x4 v W! n
}5 x6 `8 s6 T$ `- o Y
}
! \% y+ s! P; S5 P* m# Q0 _# ^}+ J$ n6 I7 ~, Z7 {8 }
+ X: W) E7 F" q% `8 X1 M
//定时器T0 16位自动模式定时1ms 控制灯灭时间
; I8 x M- `( P- B( u8 x6 R- B7 g) k- q& r+ d. t, F
void InitTimer0() interrupt 1 // 1毫秒@11.0592MHz
( h- G/ \/ v& G$ _! |{
& o7 g; U9 x9 w+ K% _/ G% i IE2 = 0x00; //关闭定时器2中断
6 N+ h% g3 f$ R5 F AUXR=0XE4; //关闭定时器2计数
5 x3 N# ]) m/ e9 \+ e3 } TL0 = 0xCD;
" u$ [7 m' O$ f: u TH0 = 0xD4;% n( S4 C1 |* M" Z' f7 t
red=1;
1 F2 E$ k" y8 d }' } green=1;
- h8 j S$ s5 U/ k6 _% w, N blue=1;
! K0 E9 | `# M' {! Y flag=1; # J* Z) ] U( ^8 I- }
AUXR=0xF4; //开启定时器2计数 P5 m. ]4 l# g) T, _
IE2=0x04; //开启定时器2中断允许
0 q- Q0 c7 A5 \1 F' P, r( c1 m( J}
7 W0 f$ Y$ \2 ?, O) i% X//定时器T2 16位自动模式定时10us 控制等亮时间/ Z; r+ @% U4 v( G
void InitTimer2() interrupt 12 // 10微秒@11.0592MHz( g$ T7 S" h) R! G% @, i) K* l1 J
{ : n4 ]* L/ a! y
flag++;. V) g! d. `$ h, ^6 _* @, V
T2L = 0x91; //设置定时初值
& I+ S$ }; A \3 ~* k7 j4 j# o% P T2H = 0xFF; //设置定时初值
; h) b8 g3 u6 `; \* }$ X if(r_temp==flag) red=0;
. V6 t9 C/ T9 B' Q- W* I0 [) c8 z if(g_temp==flag) green=0;" v/ Z/ {9 u9 p0 T7 o; \
if(b_temp==flag) blue=0;5 G1 _6 [) V4 o+ \
}
' c5 B I$ V2 r# g5 Zvoid init()* X! ?. T _* V5 |! ^
{
8 L- f$ L7 S' a7 O AUXR =0XE4;//设置定时器0和2为1T模式
$ C' d+ W3 \6 r TMOD= 0x00;
! @5 F9 R# s' X$ A# S TL0 = 0xCD;) R, l5 H. L8 ^- \5 r2 e N9 c Q
TH0 = 0xD4;( E$ d2 l4 B7 T7 V% a: \9 D
T2L = 0x91; //设置定时初值
* a, d- N) T' l, g% h T2H = 0xFF; //设置定时初值7 W* u3 X: U E
EA = 1;# M" Y- b- V+ n1 z5 ? ^. X
ET0 = 1;3 P ^ T, K; Y) c% S* p5 y6 h. {9 a
TR0 = 1;
" L' c; @9 G9 I$ U' U; t# U} # x9 h% L, ^3 F1 p( E6 o5 E
void main()
( l! @9 }: \8 T/ j+ n! c+ m( t, K{
6 u! ?/ z% k. o$ @$ K. e" finit();& ^8 ]# X. X: w* {' h! w
while(1)
3 [. O' A; J6 V1 Y0 k {
9 a8 L* o* E! m: E+ F7 x key();
: {2 D% A. g! ^9 e' L7 w) C }& _; F9 a! n- L: v
}
8 E) c e2 O+ \- y/ v
" Z( H9 I! J' ?& R' g3 I7 X
0 E2 ^: q6 q8 E& h |
|