|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
编译时这么多错误该怎么处理,我也是网上复制的,如下图:请麻烦给看看
3 a/ W: @+ M( v- |5 L9 A1 E A, x1 ` ^
/*程序说明*/2 Z! J3 t; A$ m* D; c( x
//P3.3-P3.5输出3路频率500hz占空比1%-99%可调方波//
* G1 @( i0 _5 M/ `0 F# X) S//P3.0-P3.2有3个按键单独控制3路占空比输出长按加5%
2 Q/ B# S; [) ~//短按加1%占空比6 Q" E% R7 x: o, U. T5 {7 C
#include <STC15F2K60S2.H> & [. _( o( L( ]
#include <intrins.h>
: Q, a, h1 J8 w) j0 c#define uchar unsigned char
' y, ~" I9 s# q1 s#define uint unsigned int' y% P) V: f K9 O' n8 `
sbit red=P3^3; //红色LED输出口
" C0 l/ D! X* P& @) y) dsbit green=P3^4; //绿色LED输出口# P0 ~% g/ g7 x
sbit blue=P3^5; //蓝色LED输出口! g/ z1 a) b7 o; n- z
sbit k1=P3^0; //红色LEDpwm控制3 d u" m. G9 ?5 Y' B Q3 y
sbit k2=P3^1; //绿色LEDpwm控制4 P# l7 @& l, Y) U
sbit k3=P3^2; //蓝色LEDpwm控制
3 ?( Y0 r% T4 }) `! R4 ~uchar r_temp=1,g_temp=1,b_temp=1; //三色占空比数值缓存- t8 r$ {1 G. W9 C* N$ M6 H
uchar flag; //定时器T2定时次数标志
( V7 m! W; O1 }5 E3 m//延时函数,大约延时10ms.
; k6 K# `( d( Y) V9 B5 M0 L2 c, r' o
* c2 M/ e7 O" h+ M6 T* kvoid Delay10ms() //@11.0592MHz5 r5 t$ V7 n, O- u) ~. T, f
{
: N2 `6 _& g1 C# [. A unsigned char i, j;
8 J; C4 i, c x, l k
. _% I7 w, h7 M" B i = 108;' p$ K# Q4 P# j; j5 H' i3 i
j = 145;
! J( u: w4 K+ U4 [0 T do
! \* }6 w. Y5 @; ~. a {. K! |' \1 C2 l' q6 T: W( `, x1 a
while (--j);
2 G) a8 M8 [7 K0 F8 ^ } while (--i);
" ^: Y0 f* y5 L* [5 G}( ^6 k: \6 S) A4 x' f7 \
) w+ V, y! m, Y
//按键扫描程序2 N+ X2 B: b. w
void key()
! _; ?# p% i' y{
/ R! @8 e- _! C. a' X. D" p( o uchar num1=0,num2=0,num3=0;
* p+ E% G& f' u if(k1==0) //按键K1处理程序4 K, Z* P7 m; K2 Q, ]
{
: _% {( F( l! L- l, }& w Delay10ms();
* e3 K' n7 r: N if(k1==0)6 ]/ g7 w) U' ^ u E/ [
{4 Q! U' w v; w* G: @
if(r_temp<99), F$ x9 U# W0 W0 }+ a
{
, H1 a2 S7 e! L1 J r_temp++;
' w0 |" u% |. s c% ~, d: W while(!k1)
6 o- |9 B% [6 ^3 N- H4 O {
: Z+ Q9 {. {9 K/ M3 x num1++; //长按标志位加到10约100ms& o i# G! u; ^" |: E
Delay10ms();: I8 v2 k6 e/ _! C6 W" _8 d
if(num1==10&&r_temp<95)
$ }: P5 a$ C v+ [- z( S {
3 _# p l$ k2 |+ L Q r_temp+=5;' v/ o# I1 N. E/ h& S( [
num1=0;
) v) k" ]5 S- ~ ? }
' j. J3 y+ u) C, i2 H) | if(r_temp>=95) r_temp=1;% L7 K9 j, U: f0 r! @7 m f
}
& H: P9 z& i+ A- ?1 |( A }
& W. H, u8 l/ y9 M else r_temp=1; / D* d8 V$ P2 j8 t. i
}
! m. g* t. v( O, R! W }
* d' w2 q8 E' n+ A3 |
' m. M' \/ ]2 S- P% ]* _7 ^ if(k2==0) //按键K2处理程序* K6 l6 J& M2 D
{% [) U9 I5 _' {, k" x" V5 S
Delay10ms();
. J$ ~) z* l# R8 s if(k2==0)* Q- M% L! o. M0 C, v
{# o0 n* J/ ` l3 N7 `8 C' s
if(g_temp<99)* F8 E L$ }. M4 H' d
{: D5 U7 k, s: H7 }: t8 h
g_temp++;$ n. h) F# Z" ]/ C: x% R: Q% ^
while(!k2)! [9 d$ t5 B+ a+ f X% E
{
* o) d4 L% T+ {2 I num2++; //长按标志位加到10约100ms$ Z( z, w5 {3 c9 l" J
Delay10ms();
3 }: e% \ ^; `' ~' d' X if(num2==10&&g_temp<95)" X9 [; H8 F$ s. M9 I; |
{0 E3 x' v3 n( h+ a7 Q( _" s
g_temp+=5;
6 a8 }. C" T9 J: B& l, w num2=0;* @2 n3 C5 ~1 r4 ^
}* C+ e+ Z& Z& e% K* _2 n
if (g_temp>=95) g_temp=1;
* ?$ E7 C. Y$ |1 Q _4 u* }8 z! J }4 z- w9 m* P* H+ h7 R; d: j5 c
}
( Q- ]0 J! j! V0 G: {* b else g_temp =1;7 Q! @' {: Y) Y( m$ G/ u8 |7 @9 E
}7 ?: s" ]4 u& x- I
}
4 N. Q, w" S9 f if(k3==0) //按键K3处理程序, Q# ~& u' {+ p; b) w
{
! ]: t# b* s& e* ?# Z' L# b Delay10ms();3 G0 R2 z1 e0 D* U* S4 Y
if(k3==0)' n# ^3 d5 p# ~0 |
{) g( B5 E$ Y& e, e: j
if(b_temp<99)
* w$ v& L% v& U$ [5 E+ g {0 K# e( M9 S0 J! u9 I
b_temp++;
) P2 X N% } d1 H) W while(!k3)
& h; W$ z4 g0 R {
' F0 `$ P3 b: t- f9 y L: w num3++; //长按标志位加到10约100ms
5 K( u9 S& B6 B9 U7 D7 ^ Delay10ms();# M: |; C; ~# H* g; }) T; S! K8 i9 t
if(num3==10&&b_temp<95)+ |0 ~1 z& q9 ~' a8 N2 | v0 o
{
8 C! b1 h: i" y; d: E b_temp+=5;3 J2 o8 }2 p0 @" ? H& ?
num3=0; m/ Y/ t! g, R7 D
}
# I" I( b* D2 ?" b7 c) S if(b_temp>=95) b_temp=1;
. X- p& w: S) h I9 D( [: p }
z$ N" N/ {( S) j }) @6 ]1 m* [( o. n* c
else b_temp =1;
: ^' ]7 z( W H }
4 @2 j4 I# z) p S* _3 L7 E+ e }
8 S {) Q# n$ q2 {}
5 Q. I( Q1 O/ Q$ n$ _
; f% m6 t2 j g: Q' B//定时器T0 16位自动模式定时1ms 控制灯灭时间2 ]2 n1 Z- W1 W( V- h$ G
% y: o6 L6 R0 `: P! B3 F3 } t$ s
void InitTimer0() interrupt 1 // 1毫秒@11.0592MHz5 J9 Z9 _& x6 H3 h
{ / Q. u2 `0 ^4 |! X. l( \
IE2 = 0x00; //关闭定时器2中断
( _- J! `: U& D" p( R AUXR=0XE4; //关闭定时器2计数
: s T* P7 d# K/ s! L TL0 = 0xCD;1 _; D5 B% ?6 n
TH0 = 0xD4;
9 Q. ~/ @! V" W i1 w red=1;
. b+ y$ Y$ d2 u. W8 l green=1;" q7 t8 H. J* s9 e/ u$ I
blue=1;& K$ X& s; g# `
flag=1;
1 a1 G; @, i! A' m) u AUXR=0xF4; //开启定时器2计数
: t# [! t( `* ^7 b) m8 v: U IE2=0x04; //开启定时器2中断允许
0 f( r. m' D9 L: _& g$ H+ e, `}. Q2 B Z) o, x2 V ]
//定时器T2 16位自动模式定时10us 控制等亮时间
; v- l1 O& n% o; {( |4 W4 rvoid InitTimer2() interrupt 12 // 10微秒@11.0592MHz
- ~: _7 ]$ t! A \6 N{ & q) \: }* l# t4 J2 [% o
flag++;
! N3 ?. U: h1 f, m0 G7 W9 F T2L = 0x91; //设置定时初值8 i7 [3 I/ j4 B0 g; L. Y$ b
T2H = 0xFF; //设置定时初值
$ S, r9 b: A- w3 j; H if(r_temp==flag) red=0;6 K% R1 d L2 j* |; M# X
if(g_temp==flag) green=0;
) z9 D( [, d% g! h; ~ if(b_temp==flag) blue=0;
2 V$ u8 _. k0 [ A8 H/ a/ R}6 a* ^$ q8 G$ p! t
void init()
; @$ I1 o Y* o{
2 a% D7 d5 E6 [/ s; o AUXR =0XE4;//设置定时器0和2为1T模式
9 ~- p: t2 A# Z: e7 [ TMOD= 0x00;, g6 k4 A9 A3 E4 { n/ |
TL0 = 0xCD;
& y) _5 ^: _7 T9 P( k7 @ j5 h1 W TH0 = 0xD4;- j+ I$ |+ Y, I6 V' ~. e
T2L = 0x91; //设置定时初值
4 G9 d P6 l0 V7 c+ C T2H = 0xFF; //设置定时初值. c, k6 e/ k2 s6 D* C2 ~
EA = 1;5 ~" _: [8 z# k2 s0 d! U& n9 ]+ V0 D5 m
ET0 = 1;! ~. U! I2 |5 P2 A
TR0 = 1;" B& t7 U7 T: S8 D
}
9 y: U% D. M3 G) J! l7 uvoid main()
; R1 p, L7 ^6 z4 p+ \! o" m7 q3 Z{
! A: y. k0 E/ I" b0 R) a# e3 Hinit();
# K9 ]) z3 ?+ @+ @+ Pwhile(1)
3 @6 Q. A, h. e+ @, r( Z1 w {
8 {$ J7 _* B4 w3 J key();' l9 h' i/ N3 {, `0 Z# F9 V
}: Z `5 A- F6 G5 u6 G0 F, Q8 x
}
: g" q' @: v& N4 D% x
4 C) {; J" m; o0 |% L# z/ b& n; K3 {& c/ S& u. f
|
|