|
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
51单片机时钟完整资料, O' o/ K9 P9 ?+ O, @5 O
i8 g8 [. H! D/ t# R! ?
2 r) ?% w; Q7 O+ [6 p) R9 c1 P
51单片机时钟完整资料" U9 `3 a: l2 w+ X- q
% z5 @6 v# h; A) ?8 `. K# C# J
+ M* y( s( P& p3 u6 G8 m( F
时钟计时器元件清单| 序号 | | | | | | 1 | | | | | | 2 | | | | | | 3 | | | | | | 4 | | | | | | 5 | | | | | | 6 | | | | | | 7 | | | | | | 8 | | | | | | 9 | | | | | | 10 | | | | | | 11 | | | | | | 12 | | | | | | 13 | | | | | | 14 | | | | |
5 w0 }+ c! c0 X! \4 c, K* m" ~, L单片机源程序:4 i% N( R0 |9 l
#include<reg52.h>
0 ^$ L9 @& [3 s0 O( s' g#define uint unsigned int
: q) z, V) i: T4 R4 T#define uchar unsigned char% n, g7 I- a+ v4 \. G$ E' D
7 I& _4 K4 ^ D2 b* n X
2 ~, \* ~% w. u' }
sbit K1=P1^0; //功能键9 I9 m& Z8 ~. H% T
sbit K2=P1^1; //加1键8 M" Q9 `6 k+ d. j* z: X
sbit K3=P1^2; //减1键( E" g% @. G3 r) O1 n
sbit K4=P1^3; //备用
. r: X: N1 n7 Y0 ^. Lsbit beep=P1^4;// 蜂鸣器输出控制
& l6 G4 f; g; s0 _3 fuchar t,m,f,s;
: X% m$ \) _4 ~3 T$ auchar num;
6 \& Y! a/ L5 u/ T& M1 Euchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,* _( y* w& s0 w0 P4 H" p
0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71}; //0-F共阴极数码管6 F7 J; y+ w3 q$ A/ [4 B. C
/*uchar code table0[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,//共阳极段码
" x4 \" Z* f. O0 I6 e8 o$ `0x82,0xf8,0x80,0x90};*/
" z0 t' N/ n* {* p; muchar code tablewe[]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe}; //控制位选6 n! D6 y- W' V1 h5 x
- ]+ a i( R* z. A
' P) u! S8 V. D" W# b$ L' g0 zvoid delayms(uint z) //延时z ms$ `3 U( k2 f1 \9 c4 d9 R
{
9 r# g) E/ D3 V0 s uint x,y;9 N8 u6 u" g$ V, G/ @: z
for(x=z;x>0;x--) for(y=110;y>0;y--);: [2 ?/ L) M7 D: |
}8 b/ m, O! w0 ^) N" j/ p
) n( I: c, a) S9 x4 ^
" y$ y( K6 ?, X$ H9 x/ b- Y) h
void di() //蜂鸣器响
6 f: r/ Z9 A+ t. M9 \) F" N{ beep=0; delayms(100); beep=1; }( v$ k: Y% D7 E6 d0 v: d5 H8 r( I
; E" p! l9 Z' h
5 s8 ?- s4 ~+ x2 X/ e
void display(uchar n,uchar c,uchar d) //分离变量
: ^: c* o: x1 D T{
! S% B( I# x# q8 m6 @ uchar a,b;
% G) z+ @, z. N" e9 v* { a=n/10; //十位
. _, P; S4 g2 H, B0 m3 `$ @ b=n%10; //个位7 e0 B# q! c& \
8 a% [, k: b* Q" ]
% l1 b$ q2 {$ X3 o/ g' ~' L P0=table[a]; P2=tablewe[c]; delayms(2); //十位显示
5 b* n# P9 P B$ q: R2 Q2 y P0=table; P2=tablewe[d]; delayms(2); //个位显示
3 y& ?" T5 X% d1 T}; O9 v& C% y3 e
void init()
- `. X% ~; s$ V9 F& c{ t=0; m=0; f=0; s=0;
9 i1 D* q9 P4 C! z0 q
& o+ i7 P% L- F9 r+ g TMOD=0X01; //定时器T0工作于方式1, e" j3 s0 f! K A' C. r7 ~
TH0=(65536-50000)/256; //晶振为12MHZ
- N! m7 \& k1 p* z+ d. n! H' _# r* k# e TL0=(65536-50000)%256; //定时时间为50ms5 u% q8 m1 Q$ y' K
EA=1; //开中断
5 T0 m$ W- X6 X5 u3 m# v) u ET0=1; //开T0中断. h: e8 z; @; U- B
TR0=1; //启动T0: K F- [! C+ W5 M2 T' \# r. _
}
! L: V& Q; ^( ?" f" ivoid key() //按键扫描
6 O$ R: f! _( T8 O, _{
4 i; z' _2 i: h/ o' r* {) m if(K1==0) //功能键# _ t0 `( a, t2 o
{ ; n/ E: M/ m* x. ~# s8 ?+ C9 ^
delayms(10); //延时消抖3 D9 b- d% v; i+ U. `
if(K1==0) //再判
8 x- k5 H. c8 @* e- m0 |5 j/ T { di(); //调蜂鸣器响; R" _; A' {( d- W! x1 B2 s" q
num++; //功能键按下次数加1# x! g% h) n- ~! Q' B3 h6 [
while(!K1);//等待功能键释放
i: T7 R- a. W; E7 B# Q if(num==1)TR0=0; //关闭T0,进入调时模式2 N: O" {9 G/ f2 b
if(num==4)
8 D+ \5 V3 p( o" ` {* q/ a& l3 q9 n$ O% @% _
num=0; TR0=1; //启动T0
7 ^! K/ ]7 L! J: s( h }
- ?. a) p. |8 F% u' Y. q1 y3 }4 p }0 K( ?# a0 a9 ^8 {) O# H/ q
}$ v+ f& v4 G# B1 s
if(K2==0) //加1键
8 W. s* u; }2 R3 e2 W, a& z {
6 g4 _) R* a$ _, A8 T4 n8 R+ k delayms(10);//延时消抖; @* C9 Q* Y5 `. M3 y c% J
if(K2==0)5 o3 ]8 j7 v3 `5 o& V& d
{ di(); //调蜂鸣器响
# Z1 U) U9 o7 p- `, m0 V while(!K2); //等待加1键释放5 I% x2 t% D6 c' o
if(num==1){ m++; if(m==60)m=0; display(m,6,7); } //秒加1,显示秒
: D8 t1 e3 `0 L# Y! X if(num==2){ f++; if(f==60)f=0; display(f,3,4); } //分加1,显示分
9 n! a( O$ A. h/ ?; y6 o4 W7 H+ C if(num==3){ s++; if(s==24)s=0; display(s,0,1); } //时加1,显示时
2 l5 a- K( F$ {& d) Q }
+ O: A& D, C4 L4 i }
; }( J. P& m+ a# D: M if(K3==0) //加1键 I P) t: O' N E
{
* Z+ E, I8 @6 `; h6 T9 V delayms(10);
3 N3 ^# @/ k+ Z. r if(K3==0)8 u1 r0 Y; g/ J7 w% |5 G' g
{ di(); //调蜂鸣器响* o# I/ |+ y1 H' [5 A+ Z
while(!K3); //等待减1键释放' I6 |/ u: s$ N1 q' W! Q1 @
if(num==1){ m--;if(m==-1)m=59;display(m,6,7);} //秒减1,显示秒
# k& |8 T7 w* o# ] if(num==2){ f--;if(f==-1)f=59;display(f,3,4);} //分减1,显示分, x A* H1 M3 h
if(num==3){ s--;if(s==-1)s=23;display(s,0,1);} //时减1,显示时
G9 ~) |1 l6 y1 ~0 i5 @: W+ [ }9 n. T% j) P0 a+ W) B* c5 Y
} 5 q" J: Z8 m4 Z5 h3 o; z' z
}
, O8 z- r1 `% X$ q9 J! y! Q7 [$ X$ c% `0 A6 e- B, b
7 ~$ m6 B5 a& q y! S" R0 uvoid main()
' d, S$ J7 j1 k: n; w, P: s6 A{ 9 ]* B' A( y6 {8 }. t& ]7 L3 s
init();//初始化 4 y8 i( U/ k8 a4 X4 S z
while(1); t1 L8 K! h7 }+ M# H4 F6 S
{
7 ?& `/ A4 j; g+ a0 K: t key(); //调键扫描 : e0 c9 f( _# u ~
P0=0x40; //显示- , u r f$ Z/ Z1 M- c
P2=0xdb;
2 Y6 u3 ^4 Q: S% _- f. Q
9 x' I# C: V0 S1 f8 A delayms(2); //延时
* r+ p2 i$ L; g( ?: B0 N+ g display(s,0,1); //秒显示
- g2 ~5 M5 P7 L; L4 U3 L display(f,3,4); //分显示
, |- S) H- ]4 ?0 ]! W display(m,6,7); //时显示
5 D I# g! _% D8 J }
, O/ V! p0 ]. j# c$ e}/ ^4 Z5 `9 c4 W- I- ]" ^
& O- G5 w( D- d6 M# }. v2 t0 \
! m* U0 c6 L( b3 D5 Evoid T0_time() interrupt 1
. t: t% x% M5 v) ~/ l{
6 ?, P1 b, d# x6 X* Q0 Z7 d TH0=(65536-50000)/256; //重赋初值 {5 R& G% R, g
TL0=(65536-50000)%256;
. m/ W) n8 m: M' ` t++; //中断次数加1: T; C5 k1 z! s3 K. B' f4 i
if(t==20) //到1秒) z: w" U: q- W
{& s" W! h) i# B* }
t=0; //计数清02 d9 l8 s( Y* V0 p* C7 I3 d. S
m++; //秒加1
* Q/ p0 b3 o' `: E- t
K s+ G( q6 _8 j& L3 R. a% Q7 b) W2 M
% S; p2 @/ B+ y1 ^; ^; s7 e& m…………限于本文篇幅 余下代码请从论坛下载附件…………
( @1 r6 Z0 `) T# b( c' N5 v4 S% K$ B4 b( T+ O9 o' X% t
/ V* q' a' ?& R0 W, Q/ D |
|