白钻会员
 
主题
帖子
积分50067
阅读权限50
注册时间2011-11-13
最后登录1970-1-1
在线时间 小时
|
. b4 G; E% d2 J8 l' _
非常感谢。。# `5 I9 d+ p8 o0 i/ n$ k! r" Q
貌似程序不会改了。* u4 _1 R; s& |' l( [1 _6 c
能帮看看么
$ x' V! v/ G: b. q3 m" z左边两个段不亮。。程序貌似可以工作了。显示不正常。。。。输出不知道是怎么样才算有输出。默认4.8v,输出时5v
2 k# w6 R) q" f
0 c4 \' s& o- W) V8 B, x( T* o& v* i+ `% q
\9 X% e+ n4 U: ^, r! \
#include <AT892051.h>
5 n& F7 {$ |8 w" j0 F: Q3 {% a1 m8 N7 h0 Z. A! c
#define uint unsigned int
( h- l. B" a4 W n#define uchar unsigned char
% x& S; F. c# O& M9 s8 I& E; J9 a/ Z" f
#define NUM_DUAN P1 //数码管段定义' f0 q- Q7 ?4 L" Z9 L& x9 n
4 I/ w9 a8 ]: n
/ D! U! B' S# {2 Y( q8 X
uchar code duan_value[]={0x48,0x7e,0xc4,0x54,0x72,0x51,0x41,0x7c,0x40,0x50,0xff};! Y5 @0 I( b5 t- B
uchar t_50ms;
0 ~+ o0 M! {+ E9 W0 _8 ksbit SET=P3^4; //设置时间& a: \0 F T# t0 w' G) w
sbit SPK=P3^5; //报警
; s7 Z- Q% h* csbit OPEN=P3^1; //启动8 v; g3 S u% n: V y; V3 u* ?) [
sbit OUT=P3^3; //输出
# d$ t2 s5 m' A5 }9 {sbit DOT=P1^5; //点显示,用于显示定时是否启动
6 I) Z! |1 a7 Z6 \& _# qsbit SUB=P3^0; //时间减
# Q9 G! U3 p! J5 l
& e! ~) ^. N' `( R7 Rvoid delay_ms(uint z)1 a7 w0 H% Y1 s; R9 y
{
0 ^, s& g# }& W: Y; k" o3 V% x uint x;uchar y;! \' X, b2 c9 T" V/ D. L) m8 m& g
for ( x = z; x > 0; x--)
3 [- [! ~& h) S for(y=114;y>0;y--);5 P3 o, |, t, n4 u" u, ?4 l2 D# M* J
}
: d" |% F& \1 O+ q# o5 U, f ^4 K" k" L+ d/ T% o
+ w* i5 F3 y0 `void main()
( I" ^; U; {8 {% m$ h4 R4 }5 c{
) M3 h; T: i: v; I/ } uchar set_time=0,run_time=0,temp=0;
9 k0 [( T$ ?, {, o //AUXR = AUXR|0x80;; X$ ^+ O1 \4 f& C8 {2 r5 o- K% q7 s- T
EA=1;//开总中断
* [4 d; U, F# |2 F H4 h; e ET0=1;//开定时器0中断
$ f1 F5 N" c: \! ]$ k+ ]1 H$ \3 k TMOD=0x20;//工作方式1,16位
% b; L% y4 u F+ h2 B TR0=0;//关定时器0
7 V6 b, `0 S: e7 c' s$ S TL0=(65536-50000)/256;
4 `, T9 ?9 ?, d0 ^" E- j, E TH0=(65536-50000)%256;3 M S: N9 o: q. f4 g2 k1 h" |
OUT=1;//输出关
0 K2 J5 ^! m( s( C; P# E G8 V- Q SPK=1;//蜂鸣器关
, F6 S) n3 m+ G: g7 }1 o8 O; f while(1)
7 `6 ?4 E" b0 E' K( D! M4 } {" Z( X K# `( Y
//NUM_DUAN=duan_value[set_time]数码管初始显示+ c3 C4 m" m/ v7 g
if(t_50ms==200)//1秒程序) a" u' {8 F" Z$ ?
{& [: J% p$ X( @ U$ k# A2 g& G
t_50ms=0;; \4 K8 l% t# e, K8 @% t
run_time++;//要运行的时间
4 N4 u. I! Y. w% ]3 C Z, _. ?; D if(run_time>9)
& R+ {- q* Z6 E. j; a5 P' ^ run_time=0;4 R" P- Q, n8 k0 H7 P& f6 s
}- B- Q; r5 Z7 J6 f
if(SET==0)//设置键按下; F, c; I t1 z7 `
{
. s ~; p7 i+ l$ |- y$ v delay_ms(500);
7 M" E& i/ Z7 v. H if(SET==0)
. [: r* [: W) i$ Z: @+ _1 g2 ? Y. q {
6 F2 x7 p7 X4 `1 P' U( V set_time++;//设置的时间加14 H1 g, H$ @% D! ~- p# q' V
if(set_time>9)6 n) u! H- k% i, J
# T" V$ a, \+ M% X; o set_time=0;
7 J& e: b; ^" G; E$ {3 b' S$ Q# N) F) W- E- ^
delay_ms(500);
3 ]( Q8 B6 `# j- C! W Q while(SET!=1);
1 b% N# }& P% R: Q }: x3 [" [2 i3 a: ~- G) @
}
4 N7 W+ \. ]. J. `7 ^% l& D3 P if(SUB==0)//设置时间减12 S0 {6 O4 r$ l+ f
{0 Z$ Y, h& Z* {+ b
delay_ms(500);
/ V2 P# ]6 Q( [8 V" ^ if(SUB==0)8 V9 b' k# R. p
{
+ ]1 i% U3 [' a3 n if(set_time==0)
4 T/ C0 k2 _) P! R" Q6 D7 d$ }2 t {
* Y& ?: Q# \* p- { } set_time=9;$ p0 `3 b& ~& r7 C7 |
}
, [# _& H' ~+ u% [8 v' V else8 Z- Y; S; I% O ]- O- M$ j$ @
{( F- s2 [5 I& u, b% G
set_time--;//设置时间减1
/ @- h! B& L, m: \- q6 y }
% ^5 v9 V! ^" [9 \( u1 Z delay_ms(500);
4 l. }& W1 l( `2 ^* E/ e while(SUB!=1);
" O: z+ r% P ?! r0 ? }
% S1 b6 _4 J9 f# `# W# K }
3 S9 } [3 k5 C3 r- i if(OPEN==0)//外部开关打开; q, Z7 E& I( }3 _0 T O
{
; e4 [7 D7 j5 k delay_ms(500);
- W' v8 P9 u6 T3 { while(OPEN!=1)//检测外部开关是否关闭
/ N& L$ j* [( l8 \9 V( i, l0 o+ Q {
2 f) q( x6 t0 q4 W9 ~ delay_ms(500);& E' c, D1 j9 D# |
}& [% K# N9 m ?* n/ b
DOT=0;//打开秒点显示
# E8 r) \( D9 i. L' ~ TR0=1;//开启定时器0% _0 _" h- T4 l: t b; T; t4 h
t_50ms=0;//清空 x1 b! |; Y6 m; h, @( D/ S$ T" g
run_time=0;//清空
_! e' Y K7 \( y& a OUT=0;//打开输出
$ L. K/ V/ F3 q' n: }7 J temp=1;//此变量用于检测外部开关是否打开过
) ^; N7 _+ d0 w2 v2 v SPK=1;//蜂鸣器关闭
: h3 V0 L7 y- X }
* z8 t+ U: b- b/ p; d" Z3 O if((run_time==set_time)&&temp)//当运行时间与设定时间相等时,temp的作用是防止首次上电运行用的4 M: M# N" L, ^6 s8 z
{
4 l& x8 z0 K) b: e8 t5 i5 g DOT=1;//关闭点显示
& R/ m5 J' d2 _3 T6 \ OUT=1;//关闭输出. Z1 \) E* _' o, z6 Z" ?
SPK=0;//打开蜂鸣器
9 X3 n- B* C4 H( J+ S* {9 T delay_ms(1000);7 E! l; A% D- e3 _8 Y- _! o
SPK=1; //关闭蜂鸣器8 k9 ^" _- i' y# @
delay_ms(1000);
. \3 t Z1 |. L, M" c5 p* e/ Y SPK=0; //打开蜂鸣器
# r2 H" r/ H, p0 c# g delay_ms(1000);
% C+ \- d; [2 B$ J SPK=1; //关闭蜂鸣器) h8 @% N! ?/ R6 }4 v# i
delay_ms(1000);
- \& M1 J$ B0 E: d SPK=0; //打开蜂鸣器+ I/ @& B( T+ I+ W
delay_ms(1000);
6 B! J& W, y, B7 `! A SPK=1; //关闭蜂鸣器8 Y5 L4 s# P( G" w. {: _) h# S
delay_ms(1000);
R4 K; G) R0 I+ ]* h2 J6 t SPK=0; //打开蜂鸣器
0 r$ l- c+ K9 F! k4 c! `+ Z delay_ms(1000);
( J# L1 D! K; v( D7 G* |* b. @ SPK=1; //关闭蜂鸣器
8 M. f6 g1 M5 \: I1 ? temp=0;//复位标志位,等待下次外部开关触发, H1 _( E t/ {3 f3 J1 ]
TR0=0;4 ~7 M, B2 x, }0 Y5 ?: U& b
NUM_DUAN=duan_value[set_time];4 }& ]) Q2 X1 z
run_time=0;8 \! r5 Y- q8 y# Q
}
: D+ l0 l" q8 f$ S else/ ~9 f1 p) t) w' ~- d$ ^! a4 ^
{! i( B& M8 i5 b9 _- |3 }
NUM_DUAN=duan_value[set_time-run_time];: S, Z3 C- y( y/ Q% {2 \( |: q" ~
delay_ms(10);* a- z/ O: Z* Q1 |. k- G2 B+ {
NUM_DUAN=duan_value[10];+ `3 u7 [8 x6 ]: u. }
delay_ms(1);
+ X6 ]8 t: t. ?7 X# x }$ k4 `. l* b+ h% G
}1 Q$ N3 S3 S0 l8 O
}! p7 s+ u7 c* |' |# X4 h
void timer0() interrupt 1 //中断函数: L: T" Z3 t+ V% ]* k
{
* o' _' B5 g4 \$ j TL0=(65536-50000)/256;: @" T( v% p" u) c, k8 @' v
TH0=(65536-50000)%256;
$ Y6 U- I7 u* e! a" n3 o7 y: d t_50ms++;
% c5 C% ]" |- A G}3 r9 v. {- v% M
- s' s' ^ ?$ s. I' q0 \- q1 Q& m" ]( q; `/ {/ h
- L3 `( }; t1 j* W
- T' S- E9 M' B& U
K0 c& C2 a& K# F) z6 R1 W
. Z3 `( n. {& p) U: o# L; `. D* S- o+ ]+ }! n$ B/ o
9 V( r. R5 r4 v. E3 w- j& U8 O, D) E/ q g$ P
4 p7 L. v- @; k" p: b3 s* K |
|