|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
编译时这么多错误该怎么处理,我也是网上复制的,如下图:请麻烦给看看9 @! \" p7 l' q* k x+ p
" x+ B* D h7 W9 J$ q
/*程序说明*/7 F, J3 i% j s( `' ~6 F& @
//P3.3-P3.5输出3路频率500hz占空比1%-99%可调方波//
* ~- _0 N9 {7 W, p. ]//P3.0-P3.2有3个按键单独控制3路占空比输出长按加5%$ g) Q# a) @- y5 |
//短按加1%占空比
) D2 N- w* C7 m#include <STC15F2K60S2.H> ' i, h2 F1 c: J
#include <intrins.h>
! R o* ~! i3 G& m$ G#define uchar unsigned char' i1 `4 D7 W, p% ^2 c
#define uint unsigned int5 V% D4 n7 d4 f+ p+ W z* j+ _% E
sbit red=P3^3; //红色LED输出口
* M; \9 g" H2 x0 l! c n1 W! }sbit green=P3^4; //绿色LED输出口
5 g3 b% F" i, S- ?8 |sbit blue=P3^5; //蓝色LED输出口1 q# |3 ?& {6 N
sbit k1=P3^0; //红色LEDpwm控制
7 }+ y4 o0 r9 c! `sbit k2=P3^1; //绿色LEDpwm控制
3 N$ M/ }3 O8 S: @+ E% Psbit k3=P3^2; //蓝色LEDpwm控制
2 c9 O0 i& O* z: V q) i9 w; d" quchar r_temp=1,g_temp=1,b_temp=1; //三色占空比数值缓存
* x. a( _9 i" o- l: a4 _) P' quchar flag; //定时器T2定时次数标志" |& S @% |3 ~- G0 I, K8 p# H
//延时函数,大约延时10ms.5 r2 I8 A/ s8 { K" m3 t
: O9 N) `. z% p$ z, Q- P" f# _
void Delay10ms() //@11.0592MHz
" b: B3 E* o. N$ j% e- k6 S% P7 V{3 H. Q* T# N$ Z4 M
unsigned char i, j;" m4 }9 r3 w: V+ v# _' D
7 c r7 U' j! o, A0 n3 o5 d
i = 108;# {9 G4 V1 r3 d# w
j = 145;
: S2 r8 g, G5 @! N. ?$ K do
+ u* _+ H H% h0 R) f0 X6 b {8 W5 \6 T* z; R: z
while (--j);
1 I5 m! l) y+ r8 E) j2 t! | } while (--i);
0 e4 H) e+ I9 T" f* S}
) B% E3 E# ?( P. R2 `* u8 y+ b- ?' T4 Q! ?( K' K; g* Q4 U
//按键扫描程序. M3 j; R8 _" b! x! o. k z
void key()
4 E0 [) @$ R2 M3 b& V% q{
# e8 @0 C1 k7 J+ t0 _" q3 i0 S2 K: \ uchar num1=0,num2=0,num3=0;
$ I4 ~% `7 s0 C if(k1==0) //按键K1处理程序
; x6 c% G% o! k+ s {( w- \6 x1 ~- E. e( ]
Delay10ms();8 s% D3 S* J" {" ?5 t6 T
if(k1==0): T3 F: s' V U9 G
{
& c9 p5 X( T. ?+ P; E if(r_temp<99)6 E3 \0 V6 _6 T1 R2 V5 o# q& O
{
8 `. G) o+ h! O6 x6 |$ n% _6 } r_temp++;6 [9 ~! q% I8 K" o S0 q$ D$ s6 q! n
while(!k1) ; @; ^; I' r- q& ?5 K; U7 ]
{% }$ u3 d6 X( G2 u0 U4 d
num1++; //长按标志位加到10约100ms) k6 l6 E4 l6 v- \) D. Y1 {
Delay10ms();. z- Z1 b% o9 @9 @$ ?
if(num1==10&&r_temp<95)
2 {0 C& a4 Q0 c- H. r3 c) ]. M {# e' q% K# d1 \' Z2 o5 {
r_temp+=5;/ z4 f' Y! J1 R
num1=0;7 n' r& D" I- u1 R3 R6 E& p
}& Q4 u' v# [4 q2 @3 D7 B
if(r_temp>=95) r_temp=1;
8 Y0 q' U; U, I0 v( S' i1 i' m }
* t8 G" k4 {% ?) [4 r" S- Q }
1 b$ I0 Y" R) {" J( |- X- P* j1 ~/ | else r_temp=1; ; M" B% w: b* j6 V
}+ U2 l O2 V G& c6 U
}3 h: u: k0 |* H$ ^: H$ o
1 J' N/ k$ w( |0 K if(k2==0) //按键K2处理程序
& N4 y Z* ?8 | {
1 R( p: k6 a9 O; e* w+ X Delay10ms();
: `4 _, h9 [+ {+ n0 h9 t( s if(k2==0)! p' q5 x6 C# Y* n
{
' g* J- k( j2 x; h# x6 C if(g_temp<99). A# @* k* |( C; _0 x% f
{
; \0 g+ E* U, \: B3 [2 z' P g_temp++;
4 V6 ?; c& T; W9 W' |, }5 R while(!k2)- b+ q \& n* d# h3 e& A8 t, H
{ e6 O# f( s, X" F% O& X& I
num2++; //长按标志位加到10约100ms& c. e `) v7 A8 r9 ^2 W( k
Delay10ms();( L# |4 Z' v2 F1 h: c- y' A" i8 M: h
if(num2==10&&g_temp<95)% H# B1 y, T; g' B J
{! a1 o# r) E4 f$ t5 Z
g_temp+=5;
5 W w9 U. p+ D& W: w+ _ num2=0;2 Q" U& {4 {! c4 s* N
}
9 m) ^$ | }/ l. j; \ if (g_temp>=95) g_temp=1;
' z! f& A% c8 o Y) `$ g9 { }
( w/ t8 @& |- ~1 P$ P! x }
1 T$ x \" \5 _- w. H3 q else g_temp =1;
6 d- \& z+ R- X, s3 `, z2 L }
: S/ f, _! I; q8 B" d+ m. {2 H }( g+ F& [) W* {0 `4 |7 m
if(k3==0) //按键K3处理程序 u3 C0 X9 j4 R# X* [0 [
{
& m" c# v% T8 X! b7 K" P Delay10ms();
3 |! g" y! k. W. [6 ? if(k3==0); I+ y2 L+ g+ L% {8 I' L* z
{ K; Y4 ]" S" p: K) ^ {
if(b_temp<99)
- W4 Z& C1 f D {
4 `' z) z) s* _6 D b_temp++;
o- |" U4 m/ k while(!k3)9 B& a' ?, K: l9 Z5 M" a
{
' L5 i2 n# [# U0 A num3++; //长按标志位加到10约100ms
0 H+ q4 {& |5 s0 k1 E) Z5 E Delay10ms();$ P4 C T3 K: m5 f
if(num3==10&&b_temp<95)
" n( w6 |3 J* V' R1 ~. y {7 i2 e- k+ }' e) z
b_temp+=5;
1 N. a" G; a4 L" _6 l$ v1 x) f8 P: V num3=0;
/ ~1 m4 {9 `' ?/ n+ `1 I A }
+ H7 s Y- \; r+ i if(b_temp>=95) b_temp=1;
) @! q$ q8 {/ S! y" u5 ` }8 r9 S- J' K& f+ B2 j! k! ^) ^8 M- m
}
0 d: G# ]& |; O) h( P8 T else b_temp =1;
( N% I( B9 X! f }, j ^. L; E5 W! C- x3 a: A/ e- l
}
2 }5 _8 v/ O, Z" f8 W, c}
9 s: O# N' M$ w4 ~4 X' R
; K+ l$ O- S o9 Y//定时器T0 16位自动模式定时1ms 控制灯灭时间
: Y) w2 s) A' M, i: z
L( `9 s/ h9 M; L% Mvoid InitTimer0() interrupt 1 // 1毫秒@11.0592MHz
. K& ^, l$ E0 A+ V{ . W2 ^* Z. A) t* E* ^
IE2 = 0x00; //关闭定时器2中断
7 | W) a9 X7 M AUXR=0XE4; //关闭定时器2计数
( p3 z+ m- I$ p+ Q Y, [ TL0 = 0xCD;
" w/ U6 `' G; G# P: X TH0 = 0xD4;
2 ~. D" [2 `3 s2 T( S( S( x6 T red=1;
7 ~) L1 |! t' S green=1;
6 b6 ]9 g2 L! r" u blue=1;1 K5 { \8 i$ k! c% j$ `
flag=1;
& {7 V ?4 g9 c' n AUXR=0xF4; //开启定时器2计数
% B! _# G, b- c- G" V! v5 | IE2=0x04; //开启定时器2中断允许5 L G: b" |# S4 ?
}
8 g/ |* F5 P. Y7 a% w$ }- }//定时器T2 16位自动模式定时10us 控制等亮时间, r/ \" X3 ?8 P- c) [/ W7 A
void InitTimer2() interrupt 12 // 10微秒@11.0592MHz$ s% B; u, \' _2 }; m5 D
{ - y! ]" V$ C- ^5 X& P+ a8 E
flag++;6 Z8 `& l" H$ K1 l! Y ^
T2L = 0x91; //设置定时初值
4 E. e& _7 @5 S' X$ Y T2H = 0xFF; //设置定时初值: q3 S( Z/ B' `+ a1 }+ r
if(r_temp==flag) red=0;* C8 X9 z Q o' ~: w7 V
if(g_temp==flag) green=0;
) X6 p0 Y: X6 |3 R2 i: u if(b_temp==flag) blue=0;/ J B% w6 H( Y: k
}
) K7 F6 W/ _0 Q) jvoid init()
; |3 B0 D2 u0 [) n8 L2 q6 S{
$ H7 S2 x7 B' ~& J! w AUXR =0XE4;//设置定时器0和2为1T模式. R7 L) ~" K! @+ H
TMOD= 0x00;! w2 r- u5 o- u, T( {
TL0 = 0xCD;0 m$ m' \6 f1 T. u, P3 j6 I3 d
TH0 = 0xD4;6 I3 w" h6 E" v v; b3 o, _ H. x
T2L = 0x91; //设置定时初值
! ~1 L1 F5 N) F4 m/ ?! w4 c T2H = 0xFF; //设置定时初值3 D# S# S" a9 Z% e6 T
EA = 1;1 Q9 p. R; E, O
ET0 = 1;
( F/ o0 C/ ]- [/ Q2 T5 F TR0 = 1;
- E8 q, Y% A; T5 B: i2 f) Y} 2 W% X1 h( u' Y& Y
void main()
2 K6 A9 T2 R% J* c' R; `{ & T3 _9 @/ t0 L& d W5 i" L
init();5 i" P: n. x7 m) P, ^
while(1)
+ x- x5 y7 l0 e8 o* p: d {( e- c P/ \' v6 Y9 a
key();
% {% [/ F# K1 ?) P" E }
4 p0 O3 T) e4 y ~2 C: [: r' G; Y}7 ?# ?8 e6 P8 I2 h- X* l
/ {" j: U) U, E3 h$ e' v
) X+ s7 v7 X* @. C* q |
|