白钻会员
主题
回帖0
积分50503
阅读权限50
注册时间2011-11-13
最后登录1970-1-1
在线时间 小时
|
: r$ A [+ ~8 L- c& z m0 g$ U
非常感谢。。6 O' o& [) j+ A' K: P6 y3 m
貌似程序不会改了。2 a( P( O) y I+ G$ u, Q
能帮看看么
" e4 O: M7 \7 ~, g左边两个段不亮。。程序貌似可以工作了。显示不正常。。。。输出不知道是怎么样才算有输出。默认4.8v,输出时5v& h* }+ @" e/ ^4 V3 k1 l
5 }5 A$ M$ `9 {6 \, V
; a4 [; i( i3 `3 a1 G0 v% V' u3 ~$ E6 ?! x
#include <AT892051.h>
1 D# m9 t5 v( \/ m
1 U ]- h. W2 _& r' x3 L/ e5 P#define uint unsigned int, U+ Q0 I& D, j8 t4 n0 V
#define uchar unsigned char
0 A) h, [$ N0 y
# D0 _3 Q! C6 D2 \* _7 B" i" Z#define NUM_DUAN P1 //数码管段定义
1 X; I7 ^/ P2 Z9 Y" u. s, |+ \
+ ^0 N" M, a) t# o, X1 t
# u) q i X. m! f6 g: s D. auchar code duan_value[]={0x48,0x7e,0xc4,0x54,0x72,0x51,0x41,0x7c,0x40,0x50,0xff};. e2 A, M5 }5 n0 F* ]! o7 z7 P
uchar t_50ms;
. S4 p( Q- n! ^" nsbit SET=P3^4; //设置时间( V! v6 d. D* T
sbit SPK=P3^5; //报警9 B3 V% R K# `2 o( k, F; y
sbit OPEN=P3^1; //启动9 b3 X) ]- d( A# z$ _# m
sbit OUT=P3^3; //输出' ?# n( x; E3 r0 \$ m
sbit DOT=P1^5; //点显示,用于显示定时是否启动
1 X0 U6 S: ]9 K2 i* gsbit SUB=P3^0; //时间减
8 t" a' W+ ~ x+ ?* S; D+ |* Z6 q, G& j3 r W# P% a; @4 b
void delay_ms(uint z)
3 V* y% z6 \0 D; L{ v8 D& ?' u0 |5 [3 I% w
uint x;uchar y;9 J/ R- e3 v! m, |. v& ?
for ( x = z; x > 0; x--)+ f3 M/ r% _8 |+ S7 W
for(y=114;y>0;y--);
& q* ?4 b' Z- R* [$ D/ ^' R}
& Z" }1 E# _' K) Q$ q$ m& ?! A" w7 T' _0 a5 i
" ^5 k& E2 K2 s1 M; N
void main()& j& \; ?4 O" c7 d
{! C, H5 A3 s* h# T) \
uchar set_time=0,run_time=0,temp=0;
. z9 ^- \7 z! E7 e1 q' b //AUXR = AUXR|0x80;
+ p* @8 `/ [& Q v; E0 W EA=1;//开总中断
$ {) M( e0 f- x( B8 y1 o ET0=1;//开定时器0中断
% m0 {7 {6 C& _ TMOD=0x20;//工作方式1,16位! Q8 \* }, i7 j' G( t& @. _3 R. w9 N
TR0=0;//关定时器0
: O$ F U( d! k TL0=(65536-50000)/256;) z) d( K: B0 L6 E
TH0=(65536-50000)%256;
& c7 M; K9 ~1 R' f: i5 S4 S$ H OUT=1;//输出关+ r3 C" }9 M8 ^2 e @3 ~
SPK=1;//蜂鸣器关$ g2 v# @! l% l/ T. A2 {: U3 z
while(1)
8 ]0 v9 v; M. c/ k, K" D A {6 S; I- y R# _4 o
//NUM_DUAN=duan_value[set_time]数码管初始显示2 a( w4 W# j; w! X; W' o. G
if(t_50ms==200)//1秒程序
+ T; C1 q }/ W: L5 i( T {7 n5 s; M* O0 M
t_50ms=0;
7 T. T, c7 z7 v% ^) t! v- w run_time++;//要运行的时间
4 N. Z8 `* I- }+ p2 S) g$ o9 O8 ] if(run_time>9)6 d* G3 F- L3 u& l0 P9 \
run_time=0;
: P+ g# N- i, A+ a0 e }
* i0 C5 K$ ?/ Q: I6 y if(SET==0)//设置键按下
5 p/ z# w6 L6 l5 e {
2 }9 q5 P y& c, ~ delay_ms(500);, }$ ~3 [0 U; y& n! V2 _' h, S; l
if(SET==0)
1 j0 C5 p2 b% G6 u: R, I U+ x {
' s% `# |1 u% q0 P8 a2 ?) N" b set_time++;//设置的时间加1/ ^6 M0 z0 Z0 _% E& }1 `
if(set_time>9)
6 c. j, o" Q ~
, M2 O7 N$ X B6 Z set_time=0;
8 `* P5 z/ ^ l0 I) |! I
( ?/ T8 Y8 M6 i$ e* ~' {% \. X delay_ms(500);
: p" O8 ?$ o# j! h8 L% E while(SET!=1);% I% W( o8 H0 u) l! Y
}( |2 U5 b: I1 }% p/ e, }
}
% \. k4 a, ?0 V6 R+ K: x2 H if(SUB==0)//设置时间减11 f& R7 O( M- [9 S# g, U' A- H
{- K }: D9 `* i( J7 U
delay_ms(500);9 f# y* {, ^4 a0 M
if(SUB==0)
2 J0 e1 [4 Y2 ]1 u( M' i {3 r$ n+ c' n# Z: D- a
if(set_time==0)3 ~9 P+ x5 V! W q: A& \
{
5 k$ A: [% j' t' n7 A' U/ e. x set_time=9;
* q, o, Q3 u$ z }
- L5 T0 a9 o5 F# }& c( I4 V else
& w; E; u; D( Y" S- x {
7 I" t; f% a$ `4 f/ A) W7 M5 B set_time--;//设置时间减1
0 h K: B# K6 ~2 S: t5 K- c" ^ }
- H7 e1 Z' ?, M$ v4 N delay_ms(500);
+ ~1 p9 z9 C( M2 w! m while(SUB!=1);
2 b/ X- ] Z( o! W j7 B }: F+ M1 l( i9 }. c3 u7 w# D
}3 l4 @! @1 }+ \( S
if(OPEN==0)//外部开关打开. M& W7 H9 R, l& l
{
' m9 C6 O( O0 |, J9 V% W4 D( K delay_ms(500);9 P9 m5 k' I: U: f2 V
while(OPEN!=1)//检测外部开关是否关闭
/ Q/ |- n0 R, h8 x e! { {
# Z$ q6 k! E# d$ p* L4 C8 [ delay_ms(500);* C" @; {$ t. e2 [% M
}
$ t2 J" O8 @ k% Y$ Q6 E3 u- ] DOT=0;//打开秒点显示
& h& T' L# C( { TR0=1;//开启定时器0
/ ~4 L' `* ~- x( h" T t_50ms=0;//清空
# Y' o7 @& M: E) s. m$ M" j run_time=0;//清空 y# P, s/ c' a. \* Y* K$ q. R
OUT=0;//打开输出
" V" p3 j5 [$ h( s8 B* H temp=1;//此变量用于检测外部开关是否打开过
& P7 d. b) u. f% {4 `& u m SPK=1;//蜂鸣器关闭
" a0 E6 Q2 h/ g' D: [* q }
5 o" O" [( C& z( T* Z, v if((run_time==set_time)&&temp)//当运行时间与设定时间相等时,temp的作用是防止首次上电运行用的! b9 _7 T$ @8 v! q6 {( h9 A
{
+ l2 J2 M9 l2 A1 \6 q; i DOT=1;//关闭点显示
* {: n9 a+ N! e% r7 w: R OUT=1;//关闭输出* [+ J1 i) S4 l7 b7 W/ o& Y
SPK=0;//打开蜂鸣器 w1 N0 M% k' D4 J9 z, r+ x
delay_ms(1000);
/ Q! ~. x( b: b5 W4 u/ q& Z" N SPK=1; //关闭蜂鸣器
$ _! L2 i! |( C. ~: Z delay_ms(1000);6 M- B: k8 L1 Q7 n0 ^! b
SPK=0; //打开蜂鸣器
& w- m* s) T% z delay_ms(1000);; G, s q# K. D
SPK=1; //关闭蜂鸣器4 A9 Y9 L- q7 U" k* e$ M
delay_ms(1000);4 I8 S2 L }; D6 f" m- z/ f
SPK=0; //打开蜂鸣器
4 s H3 U$ G/ H( s" X& O h delay_ms(1000);' `! o. u, h) c4 i, Q
SPK=1; //关闭蜂鸣器) Y/ g/ U6 c( P& i. N/ f
delay_ms(1000);: W# @- M+ Q9 x5 c) |
SPK=0; //打开蜂鸣器
D0 ?1 j* o7 @" S/ }# @* S1 ` delay_ms(1000);# i3 {; k- x6 d1 s, P
SPK=1; //关闭蜂鸣器% I2 V, Q T$ K) I3 v
temp=0;//复位标志位,等待下次外部开关触发
3 ?# A5 X( z Y TR0=0;( o3 I5 r2 s$ U5 ^# T, u
NUM_DUAN=duan_value[set_time];
7 r2 ]* E# x3 d8 ]$ N3 k run_time=0;! S/ o$ U H! e' N5 q" V' [
}
$ \$ P, J6 \6 W% C else2 o( r N! C5 b& D9 j
{
. b3 F9 Z3 \6 }! x& D: w NUM_DUAN=duan_value[set_time-run_time];9 e& a5 y! x/ D( ^6 l
delay_ms(10);! f8 z. f& O5 S0 P* N' R0 U: ]
NUM_DUAN=duan_value[10];
4 Z" o4 R9 ~5 M. ?& X k3 M delay_ms(1);- y# J1 I- z$ F! [0 N3 n
}
- n5 \, B' `3 O( c% S) W }
' @2 s1 E( f4 \0 l9 l5 p& x}
; |, g5 K" l) l" Gvoid timer0() interrupt 1 //中断函数
* E5 f! b; K5 d% f/ j1 e0 T @{$ w4 f3 N$ Q3 x* K Z+ y9 M
TL0=(65536-50000)/256;
2 f8 D5 j7 z( i TH0=(65536-50000)%256;
, X! d; V# V9 V& ^* X6 \4 E1 h t_50ms++;) s: K; a' q/ @6 Y
}
/ I' p4 g2 }7 b- B$ Y4 R- b* B, Z, t" @5 b8 l+ s
+ T: }4 X o! b4 x5 z
3 D% e6 X. g, ^
8 u0 ]/ R9 z; I) p/ t' `9 n
& V6 S8 b, F( D
& _7 d' J$ w6 z u; v# B/ ^$ O6 U b( R6 ^7 k; w
( n) X9 b2 D/ x; V! M
6 f! I$ ?8 W. E/ I! X, ]
o' [' `2 h: {! ?
|
|