|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
编译时这么多错误该怎么处理,我也是网上复制的,如下图:请麻烦给看看2 Z: c2 F; K; ~1 b& A# Y
) E& p2 y8 p0 v. ~. T) X+ E/*程序说明*/
$ c! ~6 ?# c) r//P3.3-P3.5输出3路频率500hz占空比1%-99%可调方波//4 f- L- o/ |3 K4 r! J
//P3.0-P3.2有3个按键单独控制3路占空比输出长按加5%8 d; \0 l1 I2 i A. g6 N6 x
//短按加1%占空比2 p( {, Y. e8 ^- V: m: O3 Q
#include <STC15F2K60S2.H> % y- L' U1 a/ @4 _" P8 w
#include <intrins.h> 3 M4 l7 C+ n7 d" e7 u
#define uchar unsigned char
4 w- p( o& s+ t9 a#define uint unsigned int
9 b0 K* U6 T4 z( `3 l I) x+ Rsbit red=P3^3; //红色LED输出口
J) }2 t) L% e4 {. ?sbit green=P3^4; //绿色LED输出口
! `! ?- |. X1 e3 {5 l6 Zsbit blue=P3^5; //蓝色LED输出口
1 G* Z. Y0 Y( R Y9 M3 Msbit k1=P3^0; //红色LEDpwm控制
* b4 A& p2 F) D# w, b+ F% Osbit k2=P3^1; //绿色LEDpwm控制- q8 c" A' o, G* R5 |! U% B% E
sbit k3=P3^2; //蓝色LEDpwm控制: r1 U+ g+ m* u u; |& }
uchar r_temp=1,g_temp=1,b_temp=1; //三色占空比数值缓存
" p( ^/ R* i7 w: t8 p: O- xuchar flag; //定时器T2定时次数标志% ^& @( r+ X0 [' j* @! r( c
//延时函数,大约延时10ms.% Z, I$ N# {/ L6 k, b0 D
: X) Y4 }: C2 K" h7 o5 Mvoid Delay10ms() //@11.0592MHz
5 R+ R5 w! i( G5 p2 d8 ?{5 _7 G9 L* C. E. P5 @
unsigned char i, j;! p' D8 `! t: v; q! }
7 t5 b& X* ]: _& N i = 108;
7 k4 x6 d& |1 t0 Y' _1 U4 F j = 145;
; |/ U* ?& v- G7 n0 h; U% J do1 }5 r. u$ a: n2 q5 d5 M
{" _! m: @ X0 r! k4 x
while (--j);4 X0 I' s' y& r) A) g% W
} while (--i);5 i; V# m. d; x
}
" T E# G( i% @, |/ P. e5 ~2 {' U3 K1 M M0 o( |
//按键扫描程序$ L) f- E9 \8 p- j+ `- ]" W; ?
void key()
$ H k- @) c& `5 a6 s{
3 S6 ?$ k9 {7 ^4 N. i3 K" s' p uchar num1=0,num2=0,num3=0;0 T0 [ R: e* H0 ^9 c2 G% b8 l
if(k1==0) //按键K1处理程序/ F. W$ N; r E v1 p1 ^
{0 T% N/ d2 x3 [/ n7 c, v0 l- p
Delay10ms();5 V% g: z u4 y8 u3 }! j! t
if(k1==0)
+ Q4 z- x8 I$ \! I& t7 f! | {+ ~6 d; ]; h& k i; B8 I
if(r_temp<99)
* A& P3 G, p' m { : e, J8 L) H9 }. N
r_temp++;" E9 ^4 a! f0 k& l @; U" D
while(!k1) & n( @ j A5 b- m' J1 ~
{4 F: N4 ?9 Y0 l, _$ P N
num1++; //长按标志位加到10约100ms
6 |# o# K2 I- X Delay10ms();% X' b5 N; Q. P9 \! [
if(num1==10&&r_temp<95) : G3 @. G: V' x
{
# F8 u$ E( |& {5 K, v+ ~ r_temp+=5;4 v2 _4 u% K4 I0 X/ i3 e' H
num1=0;$ N) w1 ^6 ~* e8 f) t* k3 ?
}
6 u* T' t- f' B( z+ \4 D if(r_temp>=95) r_temp=1;! D F3 u& p% Q" ~
}- O$ V, q+ O1 u" @3 w
}
. U7 {& A9 h) x1 A else r_temp=1;
z: U7 |. M& J1 X5 M& V }$ j+ m& B0 N# l, Z. R
}
6 o7 J( {4 S# C1 j
+ z7 T, m i& B- Y if(k2==0) //按键K2处理程序
8 L, q; h- O+ @& ?! M/ S, w ^ {
/ H# T! o$ S2 Q$ s% Z Delay10ms();
" M% h0 [( t* L% C% D1 i if(k2==0)/ a2 J6 A) P! y# P
{6 |0 T6 }5 t7 o" ?- Y# X, r
if(g_temp<99)
3 r! M% j4 g W/ j3 E5 J9 T {! W$ a+ y4 p( h, |3 ~' ^& z+ q4 C- o
g_temp++;# T; Y6 D Z# S2 p' m( d+ R0 T
while(!k2)
/ Z* c# w0 Z1 |3 L5 Q9 u1 E5 i6 ?: Q {
- w6 Q. I7 x4 N7 G/ ]7 { num2++; //长按标志位加到10约100ms
2 i+ N) j1 I2 f Delay10ms();* j( e+ [7 W) N C1 U1 R
if(num2==10&&g_temp<95)& G9 F% W+ i/ @0 P1 w' v
{
2 G0 S. f1 k6 X8 t$ f3 Z5 N g_temp+=5;6 D9 T7 F* ]: o
num2=0;9 y( H7 f& V' b8 H9 W. e1 e/ X
}5 U+ F9 w" R, |8 j( ~/ L6 B
if (g_temp>=95) g_temp=1;
9 j7 C: q: H8 o& o8 P) r0 x9 x+ y; v$ b }: j! f B/ c3 @. Q
} v- K- ?& ?" Y" {
else g_temp =1;
# x2 {8 \' c2 j }2 Q2 e( U" E% M5 t6 d: ^
}
; b- j9 ]& `7 ]* W if(k3==0) //按键K3处理程序; ^& o- x( O) s
{
0 E9 |5 G( o$ R" e2 V$ @0 U Delay10ms();; W( c1 E# y5 _7 m
if(k3==0)! f/ W( ^) {; m5 }
{4 f" j( y# {& d* f
if(b_temp<99)
1 b/ Y2 W) h4 c* h6 l {9 @' @# A" L3 i) J& \7 B3 ~
b_temp++;* k8 d0 A2 ?, W6 H. b
while(!k3)5 H3 V8 [" O( n
{
- e% C7 j5 t3 C5 \( M4 ^ num3++; //长按标志位加到10约100ms
, Q+ n2 K9 x# }' M$ ~ Delay10ms();
' m3 {2 s B6 {2 K" U: h if(num3==10&&b_temp<95)& L9 c( C8 ~$ {# v8 b8 e' y
{5 }& X- b+ K( L1 J7 B
b_temp+=5;! \' k& b' z$ J1 R5 a- P; C, [. E g0 d& N
num3=0;
- d0 K# E* B3 x, p6 i* W7 j w! T }
6 a0 O' C" i) l- k$ w4 M" ]/ D if(b_temp>=95) b_temp=1;
; f, M8 D$ n- W* C' v }8 b) k! }5 Q; V6 e; A Y
}9 @5 J) B1 H2 j/ `! G: K$ r
else b_temp =1;
( p. a) t! T( ?% O/ ]3 u( ?7 w }+ F# m. V! a9 M8 D0 `9 o0 O# Y# v
}- g' @: Q& p% O2 h& M
}/ V- T/ p6 Y' _( A! A9 G; K/ u2 V
a: E! O W( X4 b1 C//定时器T0 16位自动模式定时1ms 控制灯灭时间9 e7 ~! K6 @ z8 Z
5 R6 W6 d, L% V( o bvoid InitTimer0() interrupt 1 // 1毫秒@11.0592MHz
( N8 B$ ~( t1 e# N1 g{ ; l2 F6 V% n3 t5 ]5 i
IE2 = 0x00; //关闭定时器2中断
& `. O B$ p! ?3 N& ~1 t) L AUXR=0XE4; //关闭定时器2计数
/ ~3 H# b% e, B TL0 = 0xCD;% \) U+ d: m F& e( q( A3 v0 [
TH0 = 0xD4; r7 {" s7 Q- v6 ]
red=1;
7 V( m5 g% j7 j# z1 A7 {4 W$ G* h green=1;
5 y+ u: k( X1 `& U& x blue=1;
0 E' m' O* ?/ z4 J flag=1;
$ S$ a+ I }& j# T0 R, L" l' k AUXR=0xF4; //开启定时器2计数$ g" G5 K/ o0 }# Q9 F
IE2=0x04; //开启定时器2中断允许
- k& P1 D2 v, {/ W f: Z! e}- R9 _0 k7 V7 i" E. \* O- v4 x( I: q
//定时器T2 16位自动模式定时10us 控制等亮时间/ @8 F7 _7 M& O# y6 f3 j
void InitTimer2() interrupt 12 // 10微秒@11.0592MHz! s1 `0 |4 d$ h0 _& K$ Z8 r9 P5 @: K
{ * q2 j. \2 O( h) U
flag++;
3 F5 x: O: \# { e1 h T2L = 0x91; //设置定时初值' ~" j" q+ C1 e5 D3 {5 }5 h
T2H = 0xFF; //设置定时初值8 H6 ?" V! |- V1 b+ x
if(r_temp==flag) red=0;
7 T. k3 W- Q+ u: V) ` if(g_temp==flag) green=0;: f, v! M) e3 e- g2 k; ]: J
if(b_temp==flag) blue=0;# a; u( {2 g% C1 D" j$ Q% D
}
% D: R& |; U. b4 R* E+ e1 \void init()
: i2 A$ T% ?2 l# A: C0 r- t{8 Z d1 l3 M# } O" b
AUXR =0XE4;//设置定时器0和2为1T模式0 X; q, {4 M$ S' L% @
TMOD= 0x00;! [/ A9 ]: K# w& j6 `* J4 m
TL0 = 0xCD;* A4 x. \+ @' t8 }8 n
TH0 = 0xD4;
" N* h* Z4 A# h& H( k& r T2L = 0x91; //设置定时初值
" |) T g" b3 H$ z/ M/ `/ x% X T2H = 0xFF; //设置定时初值+ k6 K! T' C/ P% V( N! ]0 P
EA = 1;
P+ a1 \$ u; b! `! N; l& Q ET0 = 1;
0 l3 I; E' V/ C5 |; n TR0 = 1;
) _: g1 |. o! n2 x} - W4 d( ?$ i! a; a% w7 L: d
void main()$ B* }6 u5 ^) r9 K: N6 u$ \
{
0 A, J& J+ h: z; m, xinit();9 a% y! I( o i5 V) c
while(1)8 t# Y) t- p3 N% o9 x
{
9 i! p1 `% ?3 t key();
0 r" V: [: F$ g+ E! B3 }, e3 h6 S4 A }
+ f; H' |9 s/ k/ k: D}
2 u, j, u* K V
! Z/ \6 ]* h# {' c- V1 I6 x
" y( I3 A# M% ]/ x& m. k |
|