白钻会员
主题
回帖0
积分50389
阅读权限50
注册时间2011-11-13
最后登录1970-1-1
在线时间 小时
|
' o" h: Z8 X- ^1 D6 a非常感谢。。6 \0 I- T* H9 a" b8 q
貌似程序不会改了。0 L- W# b" k' ?5 i" j, q/ u
能帮看看么& H0 A' x2 W) `5 g, `
左边两个段不亮。。程序貌似可以工作了。显示不正常。。。。输出不知道是怎么样才算有输出。默认4.8v,输出时5v& u7 i# O! b3 E/ _* x
h4 U3 x5 P' R3 q( s5 d! @5 h$ {/ ]8 X1 E
3 q: _7 _# C7 x! t4 e$ {
#include <AT892051.h>
# ^7 x9 ^0 h) o" p
; Q7 {$ z8 g [$ W2 v& W#define uint unsigned int
. f7 d/ z3 l2 h! l b* ]#define uchar unsigned char
2 g% d8 r9 |6 N$ x1 S: e) n4 G/ V- H* L0 c6 Z
#define NUM_DUAN P1 //数码管段定义" [" f3 ^8 P$ r/ U" L. F0 L T! b7 D
, B1 x/ {. |0 [2 {- H- i9 _
! x s5 Q( o( m" H5 kuchar code duan_value[]={0x48,0x7e,0xc4,0x54,0x72,0x51,0x41,0x7c,0x40,0x50,0xff};
4 S2 g% `7 _( w# j+ U& k0 auchar t_50ms;
6 ?3 y( D7 F7 F/ K5 [" Psbit SET=P3^4; //设置时间+ E& R' y% _) \5 j$ u
sbit SPK=P3^5; //报警$ ]& f' w& Z3 j1 _' v
sbit OPEN=P3^1; //启动
. t# Y/ {. H7 c3 Osbit OUT=P3^3; //输出
* f8 @7 G; ~" d$ j9 tsbit DOT=P1^5; //点显示,用于显示定时是否启动' Z+ h/ B# }2 \/ c
sbit SUB=P3^0; //时间减# A( n# e) N* S: x. Y+ n
, p9 ?% y: s0 F2 I# ?void delay_ms(uint z)
7 [6 f1 m# w" Q5 O4 h{8 A1 ^& x" R- Z: d4 ^& h
uint x;uchar y;, h) q+ R6 D/ p
for ( x = z; x > 0; x--)
s1 t" C8 @+ F+ k8 R0 y0 D8 F* z for(y=114;y>0;y--);" @+ [; H. x( [3 D! _: V
}
0 T! ^6 @! M' Z1 f1 B% f9 |$ P7 e" N* f# F
- H* U. u! D% c: \* U
void main()
$ q* b" `7 y- R{! ~& J( n h2 M5 X: C
uchar set_time=0,run_time=0,temp=0;; u, x; c0 _6 G' R' W8 A! `0 ]" I
//AUXR = AUXR|0x80;: ^! I/ A- K& n5 [
EA=1;//开总中断+ }1 L1 }$ V- G9 |$ q; C
ET0=1;//开定时器0中断% _. [& n6 q9 w6 G& g& _
TMOD=0x20;//工作方式1,16位8 Z5 \4 L/ `: t) s: i4 V) F3 A
TR0=0;//关定时器0! C4 ^) q1 [; Z2 l! x, @5 }
TL0=(65536-50000)/256;
0 i" i; N6 [9 C' m0 C7 h TH0=(65536-50000)%256;
- z' h; c' e- z) L' l! g OUT=1;//输出关) b2 F2 Q- n$ }+ [
SPK=1;//蜂鸣器关0 `1 @. s/ j( r, p# \
while(1)1 M) x+ K- v" w7 a
{
& t5 P( T2 s7 ^ //NUM_DUAN=duan_value[set_time]数码管初始显示
9 y8 S& I1 F' q- a$ J* R: { if(t_50ms==200)//1秒程序) m W) F j) c! L
{
) V; L J6 p3 `6 c& H# w8 e8 L3 M t_50ms=0;
0 R- I; j# R6 h3 r& l run_time++;//要运行的时间; |" A: h( S X( M
if(run_time>9)
2 ~& Y( m8 n+ G0 z run_time=0;
6 ? o+ x- k4 a" Q+ N4 q }, y3 a5 [3 m, N
if(SET==0)//设置键按下
* H4 k$ K0 G& h, S, J; u {9 M- F8 ]( I7 c# t; e0 C7 y+ @
delay_ms(500);
0 w( I) {. e0 V7 u$ p H& ]" k if(SET==0)5 }% c9 r* P, d5 A1 t3 l2 i: a
{: Q6 S# ]7 S' d
set_time++;//设置的时间加1& B6 k' H/ d8 V
if(set_time>9)
) }6 L& u, b7 K+ ^/ ?9 V. l) Z4 n% v- I( a! F
set_time=0;8 Z1 X7 ^3 w! R9 P# l
7 d8 O; @! o4 K& r: H* j# a, h
delay_ms(500);0 h# Z& h1 ]( D1 O, g
while(SET!=1);6 o' s# e7 A6 [9 f$ V. ^
}
8 T9 D8 W% s8 o0 y9 W8 p4 v9 C }) o5 M( z( ]3 P! \* d5 c
if(SUB==0)//设置时间减12 W1 t, P) o0 C, j8 X' k$ e' _, v1 x
{
$ L8 {& b0 E4 `; U. e: W delay_ms(500);
( y" W% F+ F7 x5 E1 ?" j if(SUB==0)
- w* z. W- i! o; D, m3 B0 J {
8 B& y. t- K. K/ _0 S2 t" N if(set_time==0)
8 Y6 Y' G2 A& ]3 W( o {
% Y6 q5 {" k2 o X set_time=9;
0 r0 x* P4 y4 e( ?: R }
5 d ]4 C) A0 x- o" A- _' m+ Y4 z1 W else8 T7 C+ b8 F7 j5 j
{
/ `1 ]$ T9 n: P7 @ set_time--;//设置时间减10 ?$ b5 ^; G9 ~- }5 f
}
0 f7 s6 Y* @0 A5 p' Q& I2 Q- | delay_ms(500);$ M) d2 E0 y. g" x0 Z* t! L
while(SUB!=1);
* F# I/ \# `2 z+ F }
- D; O4 f9 `0 K' R; X }
6 z4 W X' [8 N6 A if(OPEN==0)//外部开关打开8 i% ^# C6 l# f. Q) n: a6 A; n# p
{- f$ R2 E2 V6 \1 |$ n$ z
delay_ms(500);
& ^) m9 }) j' O$ E4 f; N while(OPEN!=1)//检测外部开关是否关闭/ {, u! _- j0 i# }6 g5 B( H% ?
{3 T; [9 f# ~' g8 D
delay_ms(500);
* W$ g5 e' @0 L }
D0 Q. `4 K- F0 |$ a& c DOT=0;//打开秒点显示
5 g; t4 j- S2 \% N$ u' G TR0=1;//开启定时器0
! G4 t% W! S) H6 e$ d: o# q t_50ms=0;//清空
% h8 K. ~0 C/ B run_time=0;//清空" U$ l% K$ ^' N. q! @0 E% S3 x; Z+ d9 l
OUT=0;//打开输出' g' E, O3 R6 a, o
temp=1;//此变量用于检测外部开关是否打开过5 W8 a, z- h( ?) E0 A
SPK=1;//蜂鸣器关闭
1 h% D% o E. B. A6 M }& V+ k9 q( {4 v' F- R1 l# N
if((run_time==set_time)&&temp)//当运行时间与设定时间相等时,temp的作用是防止首次上电运行用的
" g5 _4 t' G) t {( V1 c; v, H) J. o3 N
DOT=1;//关闭点显示
% C! r2 v. \: X/ P OUT=1;//关闭输出
2 P, i4 ~: W t' f( b SPK=0;//打开蜂鸣器
3 {: X' \) t/ r: y2 A$ e- D delay_ms(1000);9 z; [0 N# \2 G- @; o
SPK=1; //关闭蜂鸣器! H% f; {" o9 s
delay_ms(1000);1 l5 W& f1 B0 e! M( L+ B
SPK=0; //打开蜂鸣器
) ^8 i7 ]8 v& k1 l5 B6 U delay_ms(1000);
4 b, w! ~6 v4 B4 R SPK=1; //关闭蜂鸣器
! E, n( i# G- k8 r& I' w/ n delay_ms(1000);5 q4 P$ ^4 o& R. m" @
SPK=0; //打开蜂鸣器
; Q2 H7 Z, o& v: @ delay_ms(1000);
% b6 ]- w# a- Q SPK=1; //关闭蜂鸣器+ t" o/ A, W: W* j
delay_ms(1000);
& |, |4 p, L9 \, Q SPK=0; //打开蜂鸣器8 K. D% L* S( n9 v; T
delay_ms(1000);
% I$ A _+ a5 t @: F SPK=1; //关闭蜂鸣器4 d' L5 F& F: }! Q c9 J
temp=0;//复位标志位,等待下次外部开关触发: i+ Y, w) y s8 ~; p
TR0=0;
, O1 {0 K1 J% L! j1 P5 d+ e NUM_DUAN=duan_value[set_time];
+ f0 y& @+ g* B. F run_time=0;
3 \) j5 u/ S! ]" @ U/ O+ Q- E( l }& j) N4 j8 o# Z0 z" j
else
; q5 P% x, z3 Z {
6 x$ Y$ P8 [4 I' l/ z NUM_DUAN=duan_value[set_time-run_time];' n Z) a1 Q6 ^; l+ a' \- G
delay_ms(10);( c0 ~. C+ y: B w# s9 T; e
NUM_DUAN=duan_value[10];8 J. f: b8 l7 w* l1 b: O
delay_ms(1);
/ |" i! Z* D0 i/ y# l( e }
( c( X# e/ a( L) j0 \) Y1 r4 ~& D j) e }
1 t( J3 j/ a# K' p}
* {6 M+ p& S. |3 ]void timer0() interrupt 1 //中断函数
, x; C- n. ^, u. _ j+ W6 E{1 s7 `% a& P. J' ]+ K$ P
TL0=(65536-50000)/256;
- x( r7 V# _1 s1 y; O- x# d6 F TH0=(65536-50000)%256;' T9 Q, l/ G" O& ~
t_50ms++;9 V0 Z8 s# l: w9 ~ M$ ~. s
}
* d) n) j/ Q; O: p' E& x$ a# W- N R$ }/ T2 l
% o& s0 F4 F9 M, i9 M5 `
* U8 N- h y3 @
r8 k, L5 L/ D/ Y U" [
0 g& d+ p# y: }; S- t- y% E' E
; d# \3 f! @' k8 r8 _4 \4 F7 V: w& A* M% U) ?8 r) Y/ V
r% X' } u ]$ m9 s7 ?) B, G
2 ?- n9 Y9 S7 Y5 n: X
& p2 n$ r- ~" o: w& G7 _ |
|