|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
编译时这么多错误该怎么处理,我也是网上复制的,如下图:请麻烦给看看- N2 R, L3 w3 y
% O/ K) d$ w; r. U* y: i/*程序说明*/' R# u% k8 \$ k) ^
//P3.3-P3.5输出3路频率500hz占空比1%-99%可调方波//
2 |9 R4 K3 Y, r; N' Q0 y//P3.0-P3.2有3个按键单独控制3路占空比输出长按加5%
6 a+ v2 {" R/ K- o! B; t- I//短按加1%占空比
1 k; ], U" E$ R5 `#include <STC15F2K60S2.H>
; H! I2 D: D5 h6 O- }- L#include <intrins.h>
$ K" o5 n; k Q9 O, Z p#define uchar unsigned char3 U) e) D; C: ?2 _8 u. [/ G% B
#define uint unsigned int
1 I) C2 A- }6 P4 g0 q+ Isbit red=P3^3; //红色LED输出口3 i: ]( p+ O4 [% K0 h& a
sbit green=P3^4; //绿色LED输出口
2 q- l7 J5 ^: ~0 D8 C, Xsbit blue=P3^5; //蓝色LED输出口
; s6 j' F# B2 D* Qsbit k1=P3^0; //红色LEDpwm控制
* o: }& T; p4 i; g. @sbit k2=P3^1; //绿色LEDpwm控制
) L& u& p7 ]" b% M$ a; m! z0 Nsbit k3=P3^2; //蓝色LEDpwm控制
" B" W( p4 y% @$ f5 Puchar r_temp=1,g_temp=1,b_temp=1; //三色占空比数值缓存2 s, P+ _* T+ G) W; Y' p
uchar flag; //定时器T2定时次数标志: c9 T* ~* r3 X/ S4 S
//延时函数,大约延时10ms.: r7 b% C* h( q* g4 x. ?1 w, z5 W
z+ h5 _7 Y9 @$ l# e g& t2 e7 svoid Delay10ms() //@11.0592MHz
! r- |, P" K: a' H g' ^- R{
2 t9 r/ l+ i; L# J% K unsigned char i, j;! s# Y/ u7 A& _4 A7 P+ W
0 Z; d* b; R1 [, c9 \* x7 ? i = 108;
. A5 I7 ?" N8 k& V8 [8 F% Y j = 145;
. J( x; W+ C4 T1 m8 M; j do& ~: ?: Q7 @# z* z- ^
{1 M# b2 C$ `! |. U$ O( R8 b d
while (--j);5 x+ p/ C4 z1 Y/ r! b" Y8 h
} while (--i);# F2 B: Z0 }, ]1 ]5 }5 Q
}9 D% v0 S. B1 l; s: @( y3 }
# O# E* H& v+ \0 o9 j2 H
//按键扫描程序
0 M1 i8 y2 D0 w4 K) E4 {8 G1 mvoid key()4 j& e: Z7 k% F$ X2 F+ o8 J
{* O$ v. u; {0 z
uchar num1=0,num2=0,num3=0;
6 S; K+ O. f$ N. T, d if(k1==0) //按键K1处理程序- T2 q% b. }8 r
{
8 I- o# {, o' u9 ~' ?6 D Delay10ms();
" [* ^( l" p2 g5 t0 c, m) @ if(k1==0)1 @$ T- i3 E) c6 @! v% e# B0 q0 i4 X+ ^
{2 T, ]% ?9 r9 A9 Y( E& Z1 `7 c y
if(r_temp<99)
5 \ u; o0 t& N& m: _) ] {
4 M6 `0 g+ x! j* e1 k% V r_temp++;
$ @2 j- O' q( `$ d while(!k1)
R* N) F3 P: n( \ {
. \6 R4 }8 t0 H# N" w) I num1++; //长按标志位加到10约100ms4 f+ P2 V) J) K& c1 j! K3 `
Delay10ms();. `6 D5 L% J8 F+ U
if(num1==10&&r_temp<95)
, T0 A# U( L; y {
2 T) L# E# M( _ N7 n r_temp+=5;
" b) l( X9 o7 N" d; F! f num1=0;
; D; B s* W) \& K; u+ Q1 c }
( K) `5 M, P$ E$ ^ @( } if(r_temp>=95) r_temp=1;9 Z P! o t; n$ e& e- ^
}( e* p) ]& y# x) z1 Q
}
1 l+ u4 s3 \# m; Z% u( j- ? else r_temp=1; / M3 d2 P: V3 B
}
+ u: Q9 z6 ]0 L& x/ V; M% f }
2 X. F" E, I8 b( B
3 \" X! `7 m& u% Y, V0 M if(k2==0) //按键K2处理程序0 O) I1 d- ]4 C/ r
{" D( C9 Q* J: k
Delay10ms();- I! k E+ N) [0 s
if(k2==0)
& c) c e- M9 J' h6 e {2 l6 v9 O' n0 L+ k- d9 F
if(g_temp<99)
: K4 e' i- y ?& Z4 K) |: } {
# l, O$ M3 g9 h& ^ |' z g_temp++;
) X7 M, ^7 M6 Q5 a T while(!k2)4 N. \, P" v9 u8 A
{; B9 ^1 ]' c# y. S5 P' \' c7 c
num2++; //长按标志位加到10约100ms
/ b! Y# @3 f0 X3 V7 S Delay10ms();
) g) l3 w, Y8 M1 u) _" Y if(num2==10&&g_temp<95)
, ~/ I" ]8 i' P3 Z3 F! V {
$ D/ ?) G7 N7 l X g_temp+=5;9 l3 h5 z( u$ u, k
num2=0;
6 P2 @8 T7 \ w7 y& D/ @0 m }& ~1 B# v8 z, u: g' u2 d: F: e
if (g_temp>=95) g_temp=1;
& X2 z8 q1 r6 r N# B" ?( B- R( ^ }1 V, N" q8 q2 {( }8 t, O
}
0 e: o- _, N- ` else g_temp =1;
1 ?1 n( E- c: K( G- o K) \: @ }3 N* d3 W: U2 a, W' c; X
}
# ~2 x. U6 i8 F! w+ z2 h) m if(k3==0) //按键K3处理程序
- O* S# ~# f) v8 Q4 I( ? {
! ^9 `& x# `* Y Delay10ms();
% q* W/ L. h4 }) t v3 k if(k3==0)
) [4 ~& |; \) q3 c. n7 d {7 G4 R# P* J. a, s! ~2 x
if(b_temp<99)
_: {$ U+ Q6 U: ]# A {
- i2 t. G4 q: I- J( Z b_temp++;
+ p8 i; z. j; o( _ b+ \5 @+ [ while(!k3)
! V% i* c: U& D# `0 ^ {: g$ ~2 s, n. M4 K3 m2 E# |
num3++; //长按标志位加到10约100ms) L% S' ?5 m; i3 h$ `; _- C
Delay10ms();
7 @% B/ Z7 N3 Z' @ if(num3==10&&b_temp<95)& G! Q& Z) s- R2 E( y2 [+ F& V6 j
{
% X8 N1 ]7 ^4 O! S- F b_temp+=5;; }0 x0 }/ S# q+ x
num3=0;( A2 Y( o9 s7 q A
}
& }: P: Y$ C4 p; j, v- t* s if(b_temp>=95) b_temp=1;/ E" S$ J9 [/ k- @# G0 r8 Q
}8 ]% y f+ @, p2 K; h
}4 c+ @8 n1 B2 d* S
else b_temp =1;, G/ u1 O$ Y7 \( f; d& l
}0 u8 r+ X; m) Z
}8 R$ N( l) m, L' E+ I" P
}
_2 Z% W5 [& N( c% {' r% n8 g3 g3 a- R
//定时器T0 16位自动模式定时1ms 控制灯灭时间+ }& k* |6 y) p; P- V
) f$ h$ |0 R# H' F5 z! o
void InitTimer0() interrupt 1 // 1毫秒@11.0592MHz! @ V f7 j0 g6 W q! b2 O
{
1 i$ e4 ]( R8 \3 D/ ^* F' e+ P T IE2 = 0x00; //关闭定时器2中断
: V" w: C5 U' y AUXR=0XE4; //关闭定时器2计数
! j v3 ~8 e5 Y' O) _+ c$ d TL0 = 0xCD;
5 I% [0 h" N( n8 @! s* s `: q) } TH0 = 0xD4;6 Q3 V) S- L! x6 A
red=1;
3 B+ l' _. Z o# ]3 J green=1;
7 y3 c8 k. m' \2 b2 g7 Q& f blue=1;
- }- V2 e( a) _$ C4 Q. q3 ] flag=1;
, }; B, s+ H/ W" [6 {' w& J AUXR=0xF4; //开启定时器2计数, G2 ~6 i2 P/ Q& @0 `
IE2=0x04; //开启定时器2中断允许
& j/ D7 R# g3 F# o; O! Q: i$ i, w! o% F* I% g}& ^; b. B" p2 `
//定时器T2 16位自动模式定时10us 控制等亮时间6 h5 ^% s2 }$ c
void InitTimer2() interrupt 12 // 10微秒@11.0592MHz' m9 u' b$ O: q: C
{ ' ]& E0 _$ V- W1 j
flag++;( j: c" U1 n8 P# L0 R' K
T2L = 0x91; //设置定时初值5 K) `; m+ [3 c1 x
T2H = 0xFF; //设置定时初值5 J" k4 U E% {7 ]7 L2 _
if(r_temp==flag) red=0;
6 l( ?' X1 J# G' A if(g_temp==flag) green=0;
; H7 f5 q5 g9 r* V if(b_temp==flag) blue=0;1 r9 x3 N A' E
}$ b- E" ?; B F1 A3 m: h
void init()
9 p( I7 ^0 u2 n5 r+ s* z; _. _% @{
/ {. z* v# j/ ` AUXR =0XE4;//设置定时器0和2为1T模式2 B: P9 S, y h* l* j& _- Z6 Z
TMOD= 0x00;
5 r1 Y5 I. n% M) h9 n8 u5 N0 W TL0 = 0xCD;
- F0 i& Q( C. H3 B TH0 = 0xD4;9 ` o$ l" l% Q' \
T2L = 0x91; //设置定时初值
$ d3 N4 f; D4 c7 D2 A+ N3 a3 P& o T2H = 0xFF; //设置定时初值
' B2 w. J' V" u! J% V7 K EA = 1;
( ~0 @) R( I' ~# J ET0 = 1;- }/ R! R [ H& }
TR0 = 1;" @) X) D! O# B' C* u" r1 \
}
+ w9 F6 K( E" Wvoid main()
( _8 M( @) O# V* i/ K( I ]& T{
1 c+ b+ [1 Y _0 xinit();0 V8 Y6 @9 ^* v1 ^
while(1)6 Y" @$ `, I) P
{
, a# r9 q, |1 N5 Z+ t8 w key();9 v/ ?. O1 |7 a7 ^: Y/ I9 W/ t
}2 f) @% P; j5 a }) ~
}
8 f& s; \) X8 z
' g7 C7 N A! h, I. F% z" a0 ]. P( k; X1 a, I {' Z* w
|
|