白钻会员
主题
帖子
积分50014
阅读权限50
注册时间2011-11-13
最后登录1970-1-1
在线时间 小时
|
L+ i, ^, N' }0 X, @" f; u7 Z非常感谢。。
; B$ a; a: u) K9 \9 s貌似程序不会改了。2 V4 p& S4 G. ?
能帮看看么4 w+ V( m! u- V- y/ [
左边两个段不亮。。程序貌似可以工作了。显示不正常。。。。输出不知道是怎么样才算有输出。默认4.8v,输出时5v" n# A8 C* \5 G% G7 G4 T$ o6 V% F! g
8 Q+ z6 [9 @& {, c) i! l) O4 l+ |/ K( R7 Y& @
- k$ t/ ^- r1 U4 ?; M4 e: ~, J#include <AT892051.h>
# y, E) Z% Y; q: k- Y' J" u
; _! Y* F6 d( v! Z- O#define uint unsigned int
: g$ U8 L! B/ J* x$ w [' o ~#define uchar unsigned char
, J* A, e/ F( y
+ H8 m( j$ D# C2 t2 Q$ V2 T2 f#define NUM_DUAN P1 //数码管段定义5 t% R h9 j7 F# e+ G, O
. r3 m9 N5 {; [0 d) U3 J
9 b+ D/ [% i% I8 j, w2 huchar code duan_value[]={0x48,0x7e,0xc4,0x54,0x72,0x51,0x41,0x7c,0x40,0x50,0xff};0 ?6 w) T6 u7 |3 D- U, T) A
uchar t_50ms;/ C+ c8 p9 x0 o5 h( S' K- b
sbit SET=P3^4; //设置时间
: d# M9 H9 d. V4 rsbit SPK=P3^5; //报警- g# h, g% E% S1 t. g0 i
sbit OPEN=P3^1; //启动 V3 }8 P: h7 Q7 A' J/ ]
sbit OUT=P3^3; //输出. k2 ]% Z: r! p6 X. ^' m( \
sbit DOT=P1^5; //点显示,用于显示定时是否启动! t3 B4 J. S# A& ^5 k
sbit SUB=P3^0; //时间减/ R, Q( L H7 ^$ R* s
7 y. Z+ X$ g7 ^, {* }7 [/ Avoid delay_ms(uint z)
. L/ E8 p" ^4 x& w: ?{
9 s4 h0 o: N' T8 U uint x;uchar y;
9 M! Q! `( @' i- ]' b for ( x = z; x > 0; x--)" Y* F s9 y7 j9 \; Q: ~# y7 Z; Q
for(y=114;y>0;y--);
" U# k3 [7 {8 W/ p+ S+ W}
4 T9 u7 i$ u1 q1 \! }0 Z F5 @5 B# `% } E
4 s- f1 E" A- D. Z1 w# X
void main()& ]) }+ l" f( n4 L( z
{
- G$ }% i" E6 u% ~$ k2 Y. i1 d$ i uchar set_time=0,run_time=0,temp=0;
) \; x9 R z" P //AUXR = AUXR|0x80;
' \3 k/ l8 `' O, c, g7 o! o7 G+ X EA=1;//开总中断
8 X+ L- E' V r3 F. N" i' c ET0=1;//开定时器0中断
, ^. M& P) n. m8 Q9 N: ^ s; E TMOD=0x20;//工作方式1,16位
& s9 v0 F- F' K TR0=0;//关定时器0
, Q0 m+ y: q8 H) N, J0 N TL0=(65536-50000)/256;
. `2 f- H$ X0 {' G' F TH0=(65536-50000)%256;
9 o, q" h4 {) p) e1 _ OUT=1;//输出关5 e5 s4 ~8 b R! b! Y% o
SPK=1;//蜂鸣器关6 [/ f+ M# `# A+ K b. g
while(1)8 Y5 C' Q4 @0 F$ f
{
) r& W( m% U' e //NUM_DUAN=duan_value[set_time]数码管初始显示; k/ b1 z( N$ u
if(t_50ms==200)//1秒程序
; i4 } J% p+ H) d7 M {
& H: N, S0 n) h7 o1 F+ \/ @ t_50ms=0;0 @3 T- c" _5 M! a
run_time++;//要运行的时间
+ e+ H) v% h1 p! I' i3 i if(run_time>9)( L* \+ Y6 i* @4 q
run_time=0;
) m6 g4 B6 d1 A* U6 q8 t0 X3 u. m }; n' I- X& j7 \. n2 j' ~0 v
if(SET==0)//设置键按下
# J7 U9 W& u1 x' \ {
- M# G5 I' n. R0 \" U( K1 q/ M delay_ms(500);5 d `; x! A' N: S2 l. P
if(SET==0)
, I+ S. n. V0 g( F6 K1 ] {+ ~4 N. Q' D& N' U
set_time++;//设置的时间加1
0 ]2 h' n# p2 B7 P. Z' @ ] if(set_time>9)
1 ^4 T& \% P5 B' z9 E: q: G7 V ]# y1 Z% E
set_time=0;7 m" C" Y2 p1 L5 S3 D
6 ?. N7 P. Q+ @ delay_ms(500);
! S9 r3 ^9 x5 T4 i8 |9 ^+ } while(SET!=1);
* r' j* q) w; k: Y( w' }! U }
. F1 Y, n) R$ C* r }5 \$ f; G9 z9 e5 R
if(SUB==0)//设置时间减10 {& l6 d* U$ g+ o5 B- c: S
{
3 ?1 `# g3 B+ t: Q( K4 h delay_ms(500);
; \& @8 _, s+ g) B( B if(SUB==0)
3 `- r* l& W+ \/ M {
: |: s! D. I$ Z# B# V9 D if(set_time==0)" w @/ q3 `4 N! S! t
{
* J8 p k4 l F1 P/ y: v( h set_time=9;) R/ w/ {, _8 o, [8 E( S3 K
}
4 L5 U m" j6 A4 P* e else
, K, Q) B) O$ W) H {
6 Q5 O+ Z) Q; T; G' ~7 o set_time--;//设置时间减1
/ z7 f4 g3 A9 |5 E6 }7 e/ A5 M8 B& c }) ~. m7 U o3 O! E, t4 J$ W! y! D
delay_ms(500);" A( q1 ]" k: {/ @
while(SUB!=1); 1 T+ C* b; e5 r/ y; `
}' p* K8 ~* K+ \8 ~
}5 e/ ^8 j2 Y1 m9 {8 |
if(OPEN==0)//外部开关打开
4 t0 A4 B% b, Q8 k- s! K! N0 S/ x j! Q {8 R' o9 F5 \! q# ~3 k; l
delay_ms(500);, Q% x% c& R+ N& e
while(OPEN!=1)//检测外部开关是否关闭
4 t" g: G4 C/ }3 v, W: E {
* E; \3 e2 P! g, v. V delay_ms(500);6 o* s2 w* _5 ~, ~) W3 E
}# y/ `; l# e' o% [& |8 F1 W
DOT=0;//打开秒点显示9 ^% Q) D+ r; k! S8 F D, d
TR0=1;//开启定时器09 q5 d4 V% W: K4 I6 g# w
t_50ms=0;//清空
5 R" E6 S$ E) A0 J- n9 g/ t" B run_time=0;//清空" `5 _+ b% J' _
OUT=0;//打开输出+ j2 d% o% R6 X6 y# K
temp=1;//此变量用于检测外部开关是否打开过
! y- h5 F6 O5 R( [7 }$ i6 g2 f6 x SPK=1;//蜂鸣器关闭
. A5 v% H# n9 [3 { }9 O+ q2 h$ K2 _
if((run_time==set_time)&&temp)//当运行时间与设定时间相等时,temp的作用是防止首次上电运行用的
. Z0 J# d$ q" n8 O0 V {
1 i( @& g ]. K( c) Q DOT=1;//关闭点显示
0 X, v7 p$ t: l6 E, R& z/ f OUT=1;//关闭输出
2 I3 l7 n) @- R3 s2 M5 p4 b) L SPK=0;//打开蜂鸣器4 y$ ?6 t# T; ^/ |
delay_ms(1000);) b5 {- S$ Q, X S
SPK=1; //关闭蜂鸣器 C1 c' K' O2 c2 U- U0 e
delay_ms(1000);
2 P/ a8 q5 F$ [0 U$ e4 P SPK=0; //打开蜂鸣器& G9 [6 V! l M8 G8 P- E# u
delay_ms(1000);
) A) Z& V5 ]6 I' s. C SPK=1; //关闭蜂鸣器
: V, `( l0 x3 _4 W2 c" P) C delay_ms(1000);
1 I; f, k0 z0 D% ^1 D I SPK=0; //打开蜂鸣器
4 U& ?# a0 F1 | delay_ms(1000);+ N( }- d% o' F5 X% F/ K9 I% t9 L
SPK=1; //关闭蜂鸣器
' X" b5 M2 \0 I( C8 e* t% w0 \7 R delay_ms(1000);- h) p8 J5 S7 H
SPK=0; //打开蜂鸣器
, ?9 l/ m% z# t: S+ d6 L delay_ms(1000);4 H3 S# Q% d& @% V" d+ _& G
SPK=1; //关闭蜂鸣器6 K" F. a: C& u `) o+ }/ v
temp=0;//复位标志位,等待下次外部开关触发1 x N+ h7 ~, a# M# P
TR0=0;/ o- P, n4 p/ |7 b9 T4 {. t/ e- y
NUM_DUAN=duan_value[set_time];
" |! {+ A% \; E4 e" | run_time=0;& u4 X$ ?& R5 E$ n2 D- k
}! d$ y" A% {3 n- O
else
4 J) i* t) @4 a {- Z8 g# f1 I) P- G7 a
NUM_DUAN=duan_value[set_time-run_time];
0 _4 M0 n0 t; H$ b2 `( @5 m delay_ms(10);; n6 W8 B0 x6 ?9 I% a
NUM_DUAN=duan_value[10];
) Z% E1 ~. T- B6 n# i( E delay_ms(1);9 W5 l! k" H) n* c9 w. d; O) e
}
/ S# X; f* D6 _. k }
- c+ E: k- _$ K$ k}
# g7 J6 b& [6 Ovoid timer0() interrupt 1 //中断函数
9 d; x, |6 z% s( E- M{& p" m6 l# t' T. l
TL0=(65536-50000)/256;
) `0 z6 R. m# p* a& O, v' r TH0=(65536-50000)%256;
7 t0 R; L* h2 o7 j; M( m' a t_50ms++;
. C4 ?2 m2 p$ t8 @7 ?}! m% C% e& U3 I3 x
$ P- J+ F' @1 N' D, Z* I
; E S3 n" I s% S' s! U
7 @3 n P0 o, |8 ^# {6 {. \
8 {' H$ h' ~- `# ^& o: J- D; g0 }4 M& D$ z; g! h1 M
& E9 o. A; L$ x% r
I$ n% H/ v( A$ |; s1 n, I( d0 P
, m$ k2 ~* [7 X; `; p; {" Y. i6 w+ T9 O
; i; H* y1 l2 J% Y0 u0 ~* v
|
|