|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
51单片机时钟完整资料
' \! ~0 [/ Q2 R! h: r% q
) e- i# W" ?+ T+ m+ @% u% B- G( R9 x, X0 q! E( f9 w/ ]& z3 C
51单片机时钟完整资料
. y' H* Y# c7 @$ V: @+ [
- N: J7 d; ]0 x# n6 x
& S& c* Y3 O- j |7 Q9 P: I时钟计时器元件清单 序号 | | | | | 1 | | | | | 2 | | | | | 3 | | | | | 4 | | | | | 5 | | | | | 6 | | | | | 7 | | | | | 8 | | | | | 9 | | | | | 10 | | | | | 11 | | | | | 12 | | | | | 13 | | | | | 14 | | | | | 3 S) r* x/ P1 R% b* N
单片机源程序:2 I/ U1 N. ]# D
#include<reg52.h>! T) v: L1 r2 _3 E2 d
#define uint unsigned int
# R& @6 }+ {1 s7 _. x#define uchar unsigned char2 X; j6 h- u8 W( T: `1 g
) B. o3 ] |" @
% ?6 P4 o" G: p4 ]" A& lsbit K1=P1^0; //功能键7 @5 w. M* ~8 f- v5 ?' T
sbit K2=P1^1; //加1键* K _3 d- t( F5 S1 Z7 ^
sbit K3=P1^2; //减1键! P. Q8 v' W1 R/ {) H
sbit K4=P1^3; //备用
& L; v- y' |4 W @( k+ dsbit beep=P1^4;// 蜂鸣器输出控制: ?1 l' k# I, T4 P# D* ]8 b
uchar t,m,f,s;
" i+ @) J; r4 D& y6 Guchar num;
% X/ N. Z5 f- i$ V- C/ m# @+ m$ vuchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,
8 i3 o4 D6 j( G0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71}; //0-F共阴极数码管
" y# z! `. K: x' r( f/*uchar code table0[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,//共阳极段码
5 W2 V5 m5 W# ?, G, m0x82,0xf8,0x80,0x90};*/
7 K. }9 ?# @8 C1 j; H( Suchar code tablewe[]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe}; //控制位选% T5 H5 B2 T* ?, p1 k) t& R
5 B8 Y& m6 C: C5 r7 T
7 t# V* L( r+ t# E8 B6 k5 F9 lvoid delayms(uint z) //延时z ms
4 Y7 y! _5 x5 v W- u& d{- A2 }2 h( E1 W6 i# D/ V
uint x,y;8 i$ {. B U& _. R5 F4 F; c4 T4 ^; A, k' p
for(x=z;x>0;x--) for(y=110;y>0;y--);
# e3 F9 T8 n. n. Q* `6 e6 g5 C}
$ R/ c* _9 h9 M4 h; F
2 x }5 W: s" W2 Q, J
6 Z, z' n7 |& l. ?7 C/ nvoid di() //蜂鸣器响+ g0 V- Z( L& E1 X9 i' s9 P
{ beep=0; delayms(100); beep=1; }
" X! [# \/ ^1 P& _$ A R; Y- y0 x# \! O# Q
! Y1 G+ I( t6 s$ i3 K2 ovoid display(uchar n,uchar c,uchar d) //分离变量
# g, Z% u3 h5 W. ?' z1 w& F{$ H. c: {) f, ^6 h: l. p0 E1 ~
uchar a,b;
. [! X% k' B, O3 Z$ r a=n/10; //十位
, i- Q) W/ f, ~ b=n%10; //个位
1 N$ L) m) x. D% ?) A; B4 _) j
! N( H: ^& E5 b% t. T; H
3 U; l0 ^- D! A2 S9 Q" K# e P0=table[a]; P2=tablewe[c]; delayms(2); //十位显示
9 u+ t: t9 ^5 P( I8 _ P0=table; P2=tablewe[d]; delayms(2); //个位显示7 M) g/ e& g" I: _. R; Y
}7 S' [7 l5 ?! C, I
void init()
% |" ?# e$ Z! s0 Q+ _{ t=0; m=0; f=0; s=0;+ j( |& Y" @9 k' I
$ d' N! g' w3 ]! G& |6 H9 c8 X
TMOD=0X01; //定时器T0工作于方式1' i/ m7 @3 H6 l; |+ l( l0 j( p. @6 Q
TH0=(65536-50000)/256; //晶振为12MHZ
' y3 I3 Z5 N! `0 q8 o/ D) P TL0=(65536-50000)%256; //定时时间为50ms
+ u$ z Q9 x$ h+ q m: u5 @ F EA=1; //开中断% H8 q2 E2 T7 E0 f0 F* f9 _2 U+ O
ET0=1; //开T0中断
& }1 i, X& {6 p0 w9 B1 U TR0=1; //启动T02 f; v8 r8 D8 e
}
8 T. d! \ p; `! X1 uvoid key() //按键扫描
. w ]0 l; N+ ~( _+ P; o- z) X{
6 \. R o: h+ S if(K1==0) //功能键: b% a7 I+ ]4 l8 n' N: X
{
# @6 y! d! P8 ^5 h& b$ t delayms(10); //延时消抖" \6 R9 B/ P! G' Y( w9 x
if(K1==0) //再判
7 Y) z9 m2 m8 }1 V3 l' ~ s/ u, ] { di(); //调蜂鸣器响& P& l% I* Q9 S2 q% |
num++; //功能键按下次数加1
; p* x8 H9 H& y while(!K1);//等待功能键释放0 c' D3 e; |8 [
if(num==1)TR0=0; //关闭T0,进入调时模式7 N) u, V& P k- g* L' ^/ r
if(num==4)* v+ q s, d1 `* M- @
{
1 }# N7 ]3 O7 f* J, d1 `. E num=0; TR0=1; //启动T0
/ ]: W: n) }; E/ S6 B" E }
4 b/ ^0 M) ]6 ?+ |: W$ ~8 U8 E }+ U7 x7 R! H/ ?* u
}/ R5 E; W' Z# Y1 [
if(K2==0) //加1键
7 i1 A3 z1 Q& ~ {
: c$ H! E5 S: K3 r delayms(10);//延时消抖
D1 F9 G+ ?# k, N1 U$ e if(K2==0)
& `3 ]- t* z" {+ j' M- C! p6 s/ B { di(); //调蜂鸣器响! {) K9 g' \ t8 C
while(!K2); //等待加1键释放
% @/ Z! K' Q" _! d! V% M if(num==1){ m++; if(m==60)m=0; display(m,6,7); } //秒加1,显示秒# }' K3 D0 X3 ^9 s# O, n( N" ~( a
if(num==2){ f++; if(f==60)f=0; display(f,3,4); } //分加1,显示分
$ P. A; H6 v4 B8 ^" N; a if(num==3){ s++; if(s==24)s=0; display(s,0,1); } //时加1,显示时0 C: F I) A0 L6 Y8 J9 p
}
- E' x4 _6 b6 N }# p/ i- Y0 U2 K- t; n. R9 l0 o% g2 A
if(K3==0) //加1键
N: F2 u r! l9 f4 S) y: y {
( [8 V. d8 x/ v$ Y5 w+ w delayms(10);; p9 G- }% o+ g# \ ^3 g9 W
if(K3==0)! K" U5 h, d. w' X% h8 u* T
{ di(); //调蜂鸣器响6 E0 w8 U: K# j3 y9 I$ [" I
while(!K3); //等待减1键释放
" a: P: {& D' N if(num==1){ m--;if(m==-1)m=59;display(m,6,7);} //秒减1,显示秒
( O2 g# @* D, W0 V* v7 Z) }% a7 ^ if(num==2){ f--;if(f==-1)f=59;display(f,3,4);} //分减1,显示分
6 e- I1 e7 L( \- D- g4 ] if(num==3){ s--;if(s==-1)s=23;display(s,0,1);} //时减1,显示时
2 ~& {$ K b$ }7 X: y# E }2 e/ u: l. q, R! L8 c: `, h
}
7 I1 C s3 \2 {: \+ y- I, T3 y; m}: X( I' d! W k; r3 `& {$ S4 V5 J
; m0 O. R( A# O) n+ ^
, z) Z1 m, u$ \+ K% p) Z/ ]' o
void main()
" b) H4 I. n o6 O& x5 q: ~$ m{
$ G5 s }7 ]1 H1 D: b init();//初始化 1 g/ |9 e: m- y1 n
while(1)) Z Y# [# S$ {% ]2 e
{
+ ], _: o. J5 l& m. O- N key(); //调键扫描
6 E- a/ D5 T. T/ I P0=0x40; //显示-
8 u8 h1 d! U- w8 M; v0 Q3 Z1 T6 Q P2=0xdb;
7 t( p, @& r: U6 @
7 V- ^" a6 E8 E; _/ Y% H8 R delayms(2); //延时& i$ l- @3 S ?" y5 W/ j H
display(s,0,1); //秒显示" f+ e: ]% P9 [. S4 D
display(f,3,4); //分显示: g( `' F! M4 d! n4 ^" ]5 z' E
display(m,6,7); //时显示6 h$ N+ i9 \1 P6 ^9 t; h; f7 Y
}
3 ]; Y3 L& c1 e0 p& b, H6 A$ B( \3 H}& B5 n; `4 `+ U: Z0 B
$ X4 Z A! C; g% g& v3 P
1 H" A9 t5 d8 y( Z( g, @void T0_time() interrupt 1+ a P7 I: ?: o7 @: b, V! K
{. ? u/ c i' j, `6 u
TH0=(65536-50000)/256; //重赋初值
- s/ j* z( d1 ?% u TL0=(65536-50000)%256;
; J( a' Z# |7 l! T! Y t++; //中断次数加13 g6 h* Z+ m* T8 a+ k3 }$ y3 O8 W! O
if(t==20) //到1秒
9 o6 W, k2 ]% S, g3 D+ n {6 _2 d! w1 U( h. ?9 A6 w* Y( t' i) ]
t=0; //计数清0 V5 ^) N. K3 K2 A$ }
m++; //秒加1
' K$ L6 Q. [: S1 Q
5 E0 y! S8 M, n3 Z0 w" H6 g2 u5 r2 l' s
& u) u, K/ M K3 A) d…………限于本文篇幅 余下代码请从论坛下载附件…………
9 j2 z3 ~* `6 ]* m' p% l4 T5 f% [. r1 e4 t3 H# F
( X! R. i% w, ?! C+ e& P* ?
|
|