|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
编译时这么多错误该怎么处理,我也是网上复制的,如下图:请麻烦给看看
) z# f" X! O( @7 c/ s7 k4 B/ ~: k" p# z4 o
/*程序说明*/; q9 _1 t% n' a* O5 c' Q
//P3.3-P3.5输出3路频率500hz占空比1%-99%可调方波//- Z6 N0 w, b, q) X0 ^
//P3.0-P3.2有3个按键单独控制3路占空比输出长按加5%
6 y/ w8 ~5 L+ j- Q; Y. F//短按加1%占空比
' C! Q7 w) A5 [; p& Y#include <STC15F2K60S2.H>
6 j5 G* S# D/ u0 C1 D- c#include <intrins.h>
6 J- W3 h, F2 O8 f7 Y( ^) w#define uchar unsigned char
2 ?! T$ d! L/ u$ b0 _#define uint unsigned int& r- T- p# V2 T2 }8 l) ~
sbit red=P3^3; //红色LED输出口3 s0 U" Q1 W$ T
sbit green=P3^4; //绿色LED输出口& @# F. \; ^% C( E3 L e
sbit blue=P3^5; //蓝色LED输出口0 k( s- I( A2 C e8 q
sbit k1=P3^0; //红色LEDpwm控制
! A r$ c1 S7 y! ?& @1 ysbit k2=P3^1; //绿色LEDpwm控制
5 K) v# B; ^$ ]0 d1 esbit k3=P3^2; //蓝色LEDpwm控制; j8 w2 _( z! i: Q
uchar r_temp=1,g_temp=1,b_temp=1; //三色占空比数值缓存
) S' b3 T- K% u' Wuchar flag; //定时器T2定时次数标志8 P% T! `- C! z% E I
//延时函数,大约延时10ms.. H% h+ u# A0 @! m2 G1 }" B
* s9 `( h. X. {& m, B& Rvoid Delay10ms() //@11.0592MHz+ c7 U( a* R; x& W
{7 F, ?; W+ c8 I! @3 v3 g* {# E7 {
unsigned char i, j;) K4 `( t0 \9 O7 I/ s2 W5 ~
0 r1 s) {% a C0 A% T
i = 108;
3 B- V i8 R! A! N& v* L j = 145;
8 ^# ]6 i4 y" W* S+ b do
' l: `& p" Y# D: u8 g1 C# t {% D) W' T' D/ t
while (--j);
* e. {1 }2 w' ~. s. z( {' V8 o } while (--i);
& e4 \9 j) R$ E* g}
) J `) w- V: t2 w* f+ f
6 G+ Z7 g8 `7 I/ S//按键扫描程序
) b# Y- k+ b' F+ X9 [void key()
$ {, Q2 N, a2 I4 i# r' I9 U2 c: ]5 Y{
' J7 e1 a$ U/ l# d uchar num1=0,num2=0,num3=0;1 ^; B+ a, n: V' W* I6 k! u8 [
if(k1==0) //按键K1处理程序
* B9 T, l b* ~) O Y* z {. j9 m/ `! D; j3 X/ d& H& @5 P" y
Delay10ms();% R, \. `' W3 ?) x$ C% I
if(k1==0)
2 p- N. P+ A% M4 S0 u5 H8 N {
& y/ ^* \- P& d3 \, L3 ] if(r_temp<99)
4 [7 `( t) ?9 ^0 ~! z7 C) j# G# M {
! y* s6 f( u& e. U r_temp++;+ z6 f& z3 T" F
while(!k1) ) `- A% J' ?6 P
{
/ } b# C z% @, z' l& e num1++; //长按标志位加到10约100ms
: s1 ?1 @# Y# d% R* l Delay10ms();
! t: U& N! d! Z' `$ M, Y if(num1==10&&r_temp<95) ' h5 N- Z! Z8 ~
{( d) @. Z3 L2 ~2 F; d
r_temp+=5; Q$ Y( v+ w6 D. A% M Z+ \
num1=0;
/ h8 L" V$ `% O: E$ X }
" p: J* m- j7 x4 n1 A if(r_temp>=95) r_temp=1;/ u, U8 L4 Z8 M# {: d. w1 l/ K
}
5 m$ `6 A) r1 y& F. G }" D2 w; ]' `1 a; _; F: Z
else r_temp=1; " ~; ?1 q( g8 i, }
}
& k2 ]1 N( _7 Q% W }
; N5 x& E) u: U9 r* E* O$ C5 x; I' f# }! K5 p
if(k2==0) //按键K2处理程序& H) ~+ X6 P7 f/ r
{/ o3 B1 }6 f1 d) c: t
Delay10ms();
9 I9 R, _# S8 |( M if(k2==0)
. y3 s( e2 c9 M9 g! p {
# {, W( Q3 ^& \% b$ _4 i4 B if(g_temp<99)
# z O3 a; @4 W! W6 O0 M6 _ {
0 m/ K( E4 Y* ?! E- r" @* B g_temp++;
9 L' N5 o8 k `3 j: t* V' p% G while(!k2)
% \1 ?+ ]. E- L! y, w3 y {; ^( Q$ [' G J0 l B
num2++; //长按标志位加到10约100ms
+ b& ~6 X. T- T; ~ Delay10ms();
& S G/ Y. R$ y Z if(num2==10&&g_temp<95)' G/ L. ^0 N! B* ]; M1 ?6 F
{
/ M- o$ R: U; H9 b% S; p g_temp+=5;0 n2 a9 l6 l% O0 p% ^
num2=0;1 z; B q; q$ l; M: D) k7 Y
}
7 M; }9 @8 a8 I* H( m( G) r1 p if (g_temp>=95) g_temp=1;
8 K. s" [6 x3 l: S! C }
+ X' n( x8 l. Q7 O) B }
9 a- n j$ u6 j% D7 u$ ?7 O else g_temp =1;1 K8 `2 s: F/ P7 @
}: `1 o( l u2 G# m: P7 q9 x
}4 n5 j0 E T$ y! y/ i6 U
if(k3==0) //按键K3处理程序
& L& Z* ~9 @- V+ }7 \: ]" K7 X {
0 _% g' \4 S; h' Z* B Delay10ms();5 }, C+ {" Q D6 Y/ L+ s
if(k3==0)5 u( w1 Q! ?" d5 G+ [( N
{' Y6 h# ^ b% X( } j; m# j; D
if(b_temp<99); f' G, p/ }9 |8 G5 L
{
' U( S9 e$ Y/ y! \0 f2 Z6 c( U* | b_temp++;
; V! H" k6 \1 _; J- ? while(!k3)5 v% C- h4 X1 t3 b
{
; N, U% Y; Y$ N/ ^; \" l# ^ num3++; //长按标志位加到10约100ms% f$ q7 F% c0 F, F
Delay10ms();+ v$ l) m& k6 T( r; K2 ^: o! B
if(num3==10&&b_temp<95)) k5 y! y6 A& R+ {3 T9 o$ B" } K
{
9 x% W E( F4 U% a b_temp+=5;! }! w% v. O: i) j/ O6 S' i
num3=0;8 N' }, [+ _7 ?8 |9 ]0 J6 }
}
# `1 q& N6 E# C9 C% I* E( k if(b_temp>=95) b_temp=1;# t0 G$ B: `% F
}. ^; R7 z) X" x+ Y! O! V
}
7 C7 E1 M: }( i3 k0 x else b_temp =1;+ p0 h% X: c, u
}" y3 o V. W+ }4 X: V
}6 c6 R8 v2 u1 m7 b% s$ P, o: o
}) k: n$ ~& v% `* U5 |& I% r: g+ f
# y5 ?! B! G2 v( A' [& P3 R//定时器T0 16位自动模式定时1ms 控制灯灭时间
1 a0 u/ Q/ l" _: ^- f9 f7 S1 w m1 E* M! |* |1 ~- U
void InitTimer0() interrupt 1 // 1毫秒@11.0592MHz/ N+ P+ V3 e% D& u8 z; R4 p
{
# t% p; ^" F& T% u IE2 = 0x00; //关闭定时器2中断7 ?# [5 n7 g! n6 ~3 z1 f
AUXR=0XE4; //关闭定时器2计数# x9 S s2 ^# M3 O( w, L# ]: I p
TL0 = 0xCD;
& w: r* j( `& @* Y# D) p6 t TH0 = 0xD4;; L# O. x% p: `: a1 S4 K
red=1;
3 t4 a* e2 N4 x3 e green=1;
+ Q# O* ^' E8 E% { blue=1;, m( i0 q' n, @3 \3 M
flag=1; ! D* v' B9 d3 p2 C6 M3 g
AUXR=0xF4; //开启定时器2计数
" Z5 A" [- x7 N3 g6 e IE2=0x04; //开启定时器2中断允许% o* G/ g. H T2 V( p& X
}: x$ |/ P6 B/ | |' x
//定时器T2 16位自动模式定时10us 控制等亮时间
f8 }# \$ x8 W5 mvoid InitTimer2() interrupt 12 // 10微秒@11.0592MHz
4 ]; c6 ]2 e" _4 N/ t! I u{
( s+ k* G6 v0 V6 n& ? flag++;% @# p4 c I+ {8 E2 q+ f
T2L = 0x91; //设置定时初值
& S9 b* G# T1 T) O0 Q T2H = 0xFF; //设置定时初值9 U9 z3 T, C8 [8 c6 n' f5 ]
if(r_temp==flag) red=0;$ I6 A3 u/ u# D& a" o
if(g_temp==flag) green=0;
0 g' S J- z+ `" t# O if(b_temp==flag) blue=0;
9 ]6 J3 @# S. _}6 y6 o: o" S0 R: X5 d
void init()1 U# C9 }! g, h0 m2 f/ p
{
) Z8 n* z4 E! D* z; h AUXR =0XE4;//设置定时器0和2为1T模式
8 P5 K, D5 q2 ?3 s TMOD= 0x00;9 S; O$ r+ u& ^9 T# |, L7 s
TL0 = 0xCD;
2 B& n% c! B8 p" x" G TH0 = 0xD4;4 h$ N, J( k2 Q7 [0 t
T2L = 0x91; //设置定时初值
. @, h, Q! Y0 v h# c. a T2H = 0xFF; //设置定时初值
1 c N8 r! `0 D( T. H5 `$ i EA = 1;* \: w9 [2 W% d0 G3 l, j6 F3 y
ET0 = 1;( o! a, a7 {9 J/ ?4 s8 Q+ G7 D+ M B
TR0 = 1;+ U4 ?' L+ p, U' S5 ]
}
& y; @1 a6 h2 I' ovoid main()5 |6 z1 Z& `- L$ h9 k1 E# O. o1 V# _" \
{
/ m! r% _: V( M% |4 \init();
% f0 m1 h1 r$ p( |/ k0 owhile(1)! s P6 |5 k; T h& K5 a/ R
{
! U- `/ u( c5 d% x1 |" [ key();9 x$ G8 Z6 @& E( u
}: F, T5 p2 @! u; T3 I- I
}
1 j1 N1 L* m# f1 q1 l5 S9 ]9 F
1 o* Y, I. T; P/ { m, r5 w2 B4 G0 @
|
|