|
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
编译时这么多错误该怎么处理,我也是网上复制的,如下图:请麻烦给看看4 F; m+ G' C" i1 @, \
: M. }3 R/ \ m5 r; l9 c: L
/*程序说明*/. G& ]; h* b. u8 P" y- {$ x5 p' D
//P3.3-P3.5输出3路频率500hz占空比1%-99%可调方波//
0 r# Y |% f* o5 _4 P* G: i//P3.0-P3.2有3个按键单独控制3路占空比输出长按加5%
5 W4 N4 V2 `! Y4 u: V//短按加1%占空比8 ^: p1 ]% b9 y0 G
#include <STC15F2K60S2.H>
% ^4 [1 D, Z+ M+ J: B#include <intrins.h>
; \ C9 v7 N, H( N. b#define uchar unsigned char1 \* }* o) a+ {; H3 U; L
#define uint unsigned int
3 R0 w- B: G' m% P) n/ \sbit red=P3^3; //红色LED输出口: c; y) B: ]( a4 a
sbit green=P3^4; //绿色LED输出口, m0 l' o" u8 a" j- F, N) t
sbit blue=P3^5; //蓝色LED输出口& n' W- g5 N9 J, T& v- D! h4 Q
sbit k1=P3^0; //红色LEDpwm控制; S+ W6 `, U; i
sbit k2=P3^1; //绿色LEDpwm控制. ~. L J; O) M
sbit k3=P3^2; //蓝色LEDpwm控制
% l( C+ F! m* s0 M! s0 ~+ |5 ?% Luchar r_temp=1,g_temp=1,b_temp=1; //三色占空比数值缓存# _* X. G5 u0 k# l* T9 i
uchar flag; //定时器T2定时次数标志
* z2 J' x4 p- {+ H//延时函数,大约延时10ms.
9 @% W# \9 ^, g W+ C7 d0 B, b2 Z5 U' T5 G
void Delay10ms() //@11.0592MHz0 v4 t* E' \) I
{
3 W( B7 K& Z& O2 p5 f$ @, ` unsigned char i, j;
" G! S, T+ S+ v' b- c. }8 I7 ~1 z& P+ ^
i = 108;
( H9 k& {6 N: ~$ ~4 J j = 145;
/ r. E" p# y4 [ do
' A6 w/ ~5 @% h" M l {3 E+ O/ W/ z# u! I
while (--j);
1 L6 J! \' v3 k5 p } while (--i);
8 C3 c S# c: n6 c7 ^}3 @# u/ @# Z4 Q6 n* t& `
& {" A" f; P' j- w- F
//按键扫描程序
1 H" @3 Z( x) ]' j& ~" Rvoid key()6 ]/ \3 M R3 R, Q
{# k) l# O& E/ h
uchar num1=0,num2=0,num3=0;& u2 ^) s: M8 U' s6 a: w
if(k1==0) //按键K1处理程序1 k8 V. [& i+ g* v7 I- W) I8 P9 [
{- t8 c8 ^4 g+ P' f; R% W/ U
Delay10ms();
( O7 U& }9 v: T1 a( B! @ if(k1==0)
! F+ b& t' R3 i" {6 c2 Y {& Y+ H" [; P* X# J* H& F
if(r_temp<99)
; y" W: O2 F; R% X( }4 j* P { / S+ f! q/ ?3 W' i
r_temp++;
3 Q: l& ?) W- ^ while(!k1) % @% a7 t {% W7 _
{
; N6 N4 M0 S' w8 E6 O. F% p* E0 ?/ { num1++; //长按标志位加到10约100ms) b; L* D% P9 @6 T+ n0 b- r
Delay10ms();, M' Y/ v" X& u4 T
if(num1==10&&r_temp<95)
& k* @) u2 n) _3 a9 l5 S( z {
. y! D: [$ S1 n5 h; ]% Q r_temp+=5;0 ~6 V/ \1 _$ J+ \# X/ u; s
num1=0;
1 c2 M; U- o* Q }' d' @ {! v( `
if(r_temp>=95) r_temp=1;
/ U+ Z. G' M3 w2 H; ? }
5 @3 I" M1 V: c; w7 h* ] }9 e- u$ a! b' z! i; q6 J
else r_temp=1;
& f0 M' n/ Y3 G, ^5 ] }
" ^8 W: d! m$ ]1 v0 b* F }
* v& [$ ^% U. I7 }! d; s& a
8 h: A5 F/ _4 H if(k2==0) //按键K2处理程序
7 T& _! f. c* Z" R% H {7 R2 p( e7 z; A" A
Delay10ms();6 B* P; e8 ~. g, ?0 \
if(k2==0)
2 w9 L' _+ V; L {
( }- Y! T8 Y( ? if(g_temp<99) e( N" r8 d+ X# n% m
{! u% e# u% y% l+ @+ d- `
g_temp++;
( F; c R- z. D while(!k2)
( H. i6 X5 V8 v% o* w( X {
6 b* W4 z2 V6 M num2++; //长按标志位加到10约100ms
* i; ?9 Z0 t+ q5 v Delay10ms();
8 B! g( g7 w* a1 N! h" M! X) T if(num2==10&&g_temp<95)2 N4 c9 ^$ u( i) t; I
{% i4 B8 }7 w% {
g_temp+=5;
5 B+ M+ T0 F: l7 b num2=0;4 ?4 U' d2 V1 h: A+ h+ q
}" |& J8 F" o: S3 S; N
if (g_temp>=95) g_temp=1;
4 q G7 E8 O$ C$ }4 l }8 ]0 k! }# A4 L; a1 v% u J
}# i7 [( {: R+ t7 D% l2 y1 r6 D
else g_temp =1;* h0 g8 U R, T
}
+ A, C% I( F/ Y" Z/ u- l$ } }
/ ]4 b, m; f( l9 J# A if(k3==0) //按键K3处理程序3 f. Y3 I# X% T1 }
{: \8 j$ I- {2 y9 H2 T' Z. L/ E
Delay10ms();1 p& D+ ?$ {! U m
if(k3==0)9 k4 u0 W# D$ {6 @( p# Q) p0 ~0 |
{
! g3 @3 Q; k& H- ^+ ] if(b_temp<99)
3 D; c, q, h! ~- p2 ` {$ P9 o& B2 F5 A$ }7 d R
b_temp++;
: L2 u5 K' ]4 G) d2 Y) e while(!k3)
) P# s/ S& T' | {
9 U: S' @3 d. B num3++; //长按标志位加到10约100ms! e9 a/ S a* A
Delay10ms();
, j9 J6 {" s. i# T! n if(num3==10&&b_temp<95)7 m; r7 C/ c3 {- A5 M9 M3 o5 _
{
+ v" b) x% q) D/ I b_temp+=5;$ @) u( x6 @& t9 ^6 r0 B+ n+ B* O8 r: O
num3=0;
+ r/ N! j/ n* L5 Q }
! s* ^1 w& e! X6 R3 k if(b_temp>=95) b_temp=1;
# f/ @7 s) W: \8 S% d: ] }
0 d* v. |* a; j }3 |( r. s2 |8 K# J, n
else b_temp =1;% ~! C2 u* E- B8 ~1 |& x W! \. U
}
' `" W8 F; ]+ f" w/ E/ H }
" S' Y8 r) d& a; d8 d! |2 l}
$ g7 Q6 c; K$ U
5 `- ~8 c& [+ {/ O. T5 V* P4 B+ l//定时器T0 16位自动模式定时1ms 控制灯灭时间
! O4 R5 b# r+ ]; s& Y
4 u+ ]; l X" }( }: pvoid InitTimer0() interrupt 1 // 1毫秒@11.0592MHz
1 g: [* W. V+ d{
8 Z' K$ A2 N7 L/ @1 D5 W IE2 = 0x00; //关闭定时器2中断
6 E! I( i& X( D3 G0 s, _ AUXR=0XE4; //关闭定时器2计数
& L l4 h/ f' L0 B! D9 G: | TL0 = 0xCD;
/ `1 s' P; E) T( R+ [# G+ M TH0 = 0xD4;. g" S* U1 b/ ~/ i
red=1;# F0 _. X( h. l' _1 \/ s& q7 [
green=1;
4 O5 M g2 X1 D blue=1;5 p8 G3 S Q) c5 }2 `% Z2 h
flag=1;
+ ~6 h H( q0 A7 S2 x# y- {# H5 x( q AUXR=0xF4; //开启定时器2计数4 j: ]- h4 W$ J
IE2=0x04; //开启定时器2中断允许
, M8 Y7 B, }3 I* r) _4 W4 @ w}7 `; G4 q& H. |- N+ V
//定时器T2 16位自动模式定时10us 控制等亮时间
! J5 [7 }8 B6 G+ fvoid InitTimer2() interrupt 12 // 10微秒@11.0592MHz
. {) Z, c4 r8 Z7 a3 g{ ! T5 J1 ]3 ?6 `& @: G( j
flag++;
+ S' F; o) [! K) z: l T2L = 0x91; //设置定时初值
) f: s- M5 X" D8 V) {: p: C T2H = 0xFF; //设置定时初值, Y; a/ L" J! c8 K
if(r_temp==flag) red=0;
( e/ z c( p& f1 d H( {# c1 y! d if(g_temp==flag) green=0;- x! e3 h1 D1 z/ n5 E
if(b_temp==flag) blue=0;
4 J) O r4 f& h}8 d* t/ z( F2 L! O) Y" z
void init()
. o% m& T3 b+ E$ J# B) `/ y{
# h7 x* I9 k& w/ x3 p AUXR =0XE4;//设置定时器0和2为1T模式
; T% c/ `, |, ]" Q" A# W1 F$ ? TMOD= 0x00;
- p! i- u& g# K8 Z TL0 = 0xCD;
2 A- k6 o/ e* p0 ^ TH0 = 0xD4; g/ Z5 L y; i. ^" A6 r) v# X1 ^
T2L = 0x91; //设置定时初值- X; e! X9 i& P, K
T2H = 0xFF; //设置定时初值/ b2 ~2 \- h2 _' J6 D/ Y4 v, ?
EA = 1;2 n5 e2 g8 w* @: _( s; }
ET0 = 1;
" `; l5 u# I$ ]7 t2 ? TR0 = 1;
8 w5 z+ r- B& Y8 S% ]$ l} 6 o9 a) v- Y+ S
void main()* v: Y. g6 a1 I
{ x/ \1 e* }' g# A% y
init();
# {( B7 G( z7 R+ b M4 [7 bwhile(1)( e' V5 C8 Y6 J1 H, d# w
{4 x6 W5 e4 e$ n7 J+ Y5 G/ a
key();2 P. R |+ e" W- X
}
( d' p* S; s8 n: r}
" v# {9 {9 f# O; ?+ h5 w$ n- g+ R6 R, Y6 } F, w7 d& r" i1 Z
J n' X0 ~4 N* p/ a0 | |
|