|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
51单片机时钟完整资料
! P' p. T: w) z" Z6 e5 S7 n% i6 j/ Q) O8 Y& S. n
+ h- W( X" c, }$ e& l5 T
51单片机时钟完整资料0 |1 d4 d7 D, \0 f
0 U+ S# o3 Y# _. ^7 v" R6 T
0 o: X/ \" K& N; ~$ E时钟计时器元件清单 序号 | | | | | 1 | | | | | 2 | | | | | 3 | | | | | 4 | | | | | 5 | | | | | 6 | | | | | 7 | | | | | 8 | | | | | 9 | | | | | 10 | | | | | 11 | | | | | 12 | | | | | 13 | | | | | 14 | | | | |
; ^& x/ R/ A3 }单片机源程序:
) T# Q0 G$ r& a#include<reg52.h>
' f( n: n3 [" B' F- ]! u#define uint unsigned int
) ? Q/ R& }& a. L: `8 s1 K#define uchar unsigned char, e# {* x# G+ ?, B% }
4 Y) p; F! I) `/ S: s
# G! K5 \" C/ w; D- Z" i. n& ssbit K1=P1^0; //功能键
: ]0 u2 ^8 H! K* i: C6 @sbit K2=P1^1; //加1键# ]$ _! O9 ?# M- b2 E5 F. t* o
sbit K3=P1^2; //减1键# o6 j- @$ K0 |3 Z/ l1 }
sbit K4=P1^3; //备用! d" ~% g0 H1 i
sbit beep=P1^4;// 蜂鸣器输出控制* y6 s( Q5 D. w* g
uchar t,m,f,s;
( S8 m, T* f& `3 |uchar num; I) \3 M, @% I. B8 Z8 W, ~. Z
uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,
6 J N! m$ U% ]0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71}; //0-F共阴极数码管
) _9 j5 a! W& m/*uchar code table0[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,//共阳极段码( m+ _& `8 q) ^/ @' t. I
0x82,0xf8,0x80,0x90};*/' M: O; R2 D5 E3 D. H- y3 u
uchar code tablewe[]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe}; //控制位选
9 R# y6 x% x6 X, O* G9 b, b6 f# L7 }
* D1 _: H* A1 b V3 K: w2 c
void delayms(uint z) //延时z ms" Q+ [$ `. A2 g6 e$ ^ K
{7 {7 ]5 a/ K5 j) B8 B& L! h
uint x,y;" L# [! v' j+ _6 m! r% U) P! `
for(x=z;x>0;x--) for(y=110;y>0;y--);3 g0 }/ D4 o0 d4 o
}
! k- L) z: N7 O! r1 ]
, S g/ s; Z, ^4 w8 E2 `
* M6 v6 p: r. R2 h& h0 lvoid di() //蜂鸣器响9 r$ N& |% [; E$ c* A. u* s8 q' \
{ beep=0; delayms(100); beep=1; }* A1 M7 G7 Z9 g: C. |8 L3 ?/ l
; k$ `1 r- a% J' N2 ?( L3 k# Z
9 t6 u3 N& q0 g8 O2 C" u8 Gvoid display(uchar n,uchar c,uchar d) //分离变量
( R7 A: n# [6 E+ l0 ]{
3 }- ~" ` T% R- e. s) X uchar a,b;
v0 ^( w8 \: z7 M' S+ F) n a=n/10; //十位
* R" Z$ c7 x8 H4 Y4 a' C5 C0 G I& x b=n%10; //个位
; M) S$ J3 D/ x% g! i+ `; Q
4 b7 ~ H' c3 H4 \7 V/ F" \' P
' ~1 G6 U! I+ Z; l P0=table[a]; P2=tablewe[c]; delayms(2); //十位显示 |- b: x: m) S- V
P0=table; P2=tablewe[d]; delayms(2); //个位显示- O* a6 Y& o8 j# Z8 y( D- Q
}/ a0 f& F- a# @' h! q- R5 U, |3 y& G
void init()
5 o$ t3 S& P" }2 j7 U{ t=0; m=0; f=0; s=0;3 G, r$ q% B# U' t
# j4 Q8 H% _" v5 I TMOD=0X01; //定时器T0工作于方式1. Z5 v7 g& z) X- j: K# }
TH0=(65536-50000)/256; //晶振为12MHZ7 }2 i' n7 u/ F/ _2 O! y* i
TL0=(65536-50000)%256; //定时时间为50ms0 U' ?, h1 {7 u$ u% f9 n
EA=1; //开中断
: t+ h; X/ Z% @& f' g, x& L8 F ET0=1; //开T0中断4 q9 ~, x% o; t; t4 }- y8 m
TR0=1; //启动T03 S7 |, k, n& _+ U6 B4 P
}/ c7 s; ]0 I% V
void key() //按键扫描
$ t" K g2 T8 m1 T2 d{
6 V9 R: Z7 E) E2 o! w1 A if(K1==0) //功能键
: ~4 H' J, E# P8 x/ s. z { : V( V3 `7 I* [- A/ _% c" E
delayms(10); //延时消抖
. C+ n; y$ }4 c8 G( t1 T if(K1==0) //再判. d- C4 Y) B* H
{ di(); //调蜂鸣器响
5 o! a0 Q% P# c0 A; W% `( q. Q b) L num++; //功能键按下次数加14 x* W1 d3 P I# Z
while(!K1);//等待功能键释放3 L9 ~" A7 Z" Q3 O9 T# F* U+ b, F7 O
if(num==1)TR0=0; //关闭T0,进入调时模式
7 R+ B4 L( G# O( G/ m if(num==4)
( \! ]" c% A0 v" a" l* Z {( c0 |/ H3 e+ }! ?% a4 d8 ^* ^
num=0; TR0=1; //启动T0
7 z) S( B; h) E* _0 X5 n; b f }
7 G. a! P0 V- C5 T3 p }- b4 @& F2 l6 ~& F2 z7 @
}4 \$ K+ }+ M( H) C; p' G
if(K2==0) //加1键6 c3 o3 M' i3 N6 c9 J$ @
{
" o7 o2 P$ m" `" T1 h& G' r) r delayms(10);//延时消抖) M( W* f j3 K4 n
if(K2==0)
: l5 K4 r6 F0 U. x' L& p { di(); //调蜂鸣器响7 C3 g, x1 z; y0 P, j `7 h$ g, e
while(!K2); //等待加1键释放4 @$ m; g z( u$ H+ U6 g
if(num==1){ m++; if(m==60)m=0; display(m,6,7); } //秒加1,显示秒
8 c1 @' m7 ?2 I' |( S# ~9 Q if(num==2){ f++; if(f==60)f=0; display(f,3,4); } //分加1,显示分! }- _! I& [2 z0 q0 D$ f# q
if(num==3){ s++; if(s==24)s=0; display(s,0,1); } //时加1,显示时
/ w# K8 J) K- H! j, m }
) c' `0 p& q0 k( K- Q+ s8 W }
8 ]- b! |" _- P# X% a" } if(K3==0) //加1键9 l" Q' Y4 P; x; O; T) {
{
+ S2 d6 G) x; I1 _" A( m delayms(10);# \) R$ C: p( X D8 ~
if(K3==0)
) w, m" C" G. l4 F; k2 Y9 K { di(); //调蜂鸣器响! q. u( Q, k1 t
while(!K3); //等待减1键释放0 w3 _7 I/ @& V/ D
if(num==1){ m--;if(m==-1)m=59;display(m,6,7);} //秒减1,显示秒
4 ]; W( M) c6 S- \* y& D if(num==2){ f--;if(f==-1)f=59;display(f,3,4);} //分减1,显示分
3 e0 @6 ~9 Q: j4 O if(num==3){ s--;if(s==-1)s=23;display(s,0,1);} //时减1,显示时
* f& r9 t; R- z2 z- J0 h! C* a }0 Y8 Z8 x' |& Y |
}
: Z1 G% \# m6 |' h: U2 |}* P: _1 U, Q# @/ P: t& q
- {" V( N4 d$ Y d
5 G) x6 b) t; m5 D0 F* j( Wvoid main() g4 n( O( M7 g9 u
{ 5 s- O9 `9 Y3 B- P
init();//初始化
3 U5 }! o$ O, h( ]( @4 ^- M while(1)
5 f) q! W% l4 }) \ {
8 t0 d2 z1 h& f8 X7 m key(); //调键扫描
- G8 o% \7 W3 j( ]& E3 G P0=0x40; //显示-
0 a0 P. _5 B& o% T( }8 ?4 o0 A P2=0xdb; h3 V* _; T$ S+ C1 | V8 e
3 ^8 U* n" T3 {1 ^ j
delayms(2); //延时0 N. @# e! T1 N: C
display(s,0,1); //秒显示' s! M3 r% _& T7 W2 `8 g; P4 g) c* |
display(f,3,4); //分显示
+ U, i0 c( |' s0 K; J- t( D6 x. L display(m,6,7); //时显示
3 M( i* s* M2 @4 e6 x+ L }( c7 S/ S! J" u, v" v3 c
}
( o# p7 k. s8 ~ N* k( m1 Y8 O$ `4 B
7 b, L. O9 {) ?3 E* r+ u) O
void T0_time() interrupt 18 s' \1 B' ~( |: E% S6 O4 f" [
{
; V# R6 b6 P9 V! Y TH0=(65536-50000)/256; //重赋初值' i$ S' P7 B/ }7 R+ U) s8 y
TL0=(65536-50000)%256;
2 J* k x( V9 o6 F! \ H4 _2 o+ z9 S t++; //中断次数加19 {- Q6 j4 q0 W `1 G7 ^6 J, i
if(t==20) //到1秒# {; z1 I% b+ g' W4 e3 e
{
4 n' N4 b6 [- @& s" n/ T t=0; //计数清05 H" T& ~- k8 l
m++; //秒加18 X L$ H5 _: Z1 H
% I" Y! ]" p8 ~2 `, _& e$ N! P( F
3 o2 n5 A* B! X* |8 L- B- Q9 z' }. s6 [5 o3 m" w) Q9 f5 }* ^5 f
…………限于本文篇幅 余下代码请从论坛下载附件…………
: N7 c$ M# |; e, R8 z5 p- Z# I f" k8 ~% Q3 p6 F+ l& V0 u
9 x9 j2 v" E! i% a |
|