找回密码
 注册
关于网站域名变更的通知
查看: 467|回复: 4
打印 上一主题 下一主题

51单片机时钟完整资料

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2018-12-9 09:00 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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
  
电阻
R1   R19          1KΩ
2
  
2
  
R2              10KΩ
1
  
3
  
R3~R10           330Ω
8
  
4
  
R11~R18限流电阻       100Ω
8
  
5
  
电容
C1   C2         30pF
2
  
6
  
C3电解电容    10uF
1
  
7
  
三极管
P1~P9      9012
9
  
8
  
晶振
Y1         12MHz
1
  
9
  
按键
S1 K1~K4
5
  
10
  
蜂鸣器
B1
1
  
11
  
数码管
四位一体共阴
2
  
12
  
单片机
STC89C52
1
  
13
  
排针
若干
1
  
14
  
插座
40
1

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 v
游客,如果您要查看本帖隐藏内容请回复
4 S% K$ B4 b( T+ O9 o' X% t

/ V* q' a' ?& R0 W, Q/ D

该用户从未签到

3#
发表于 2019-2-27 10:42 | 只看该作者
谢谢楼主分享

该用户从未签到

4#
发表于 2019-12-20 11:05 | 只看该作者
谢谢楼主分享& Z9 K* d; S# |- \: q# s. o7 Y

该用户从未签到

5#
发表于 2019-12-20 11:59 | 只看该作者
谢谢楼主分享
# I3 u- {, O" A8 U! Z. L% Y: @; n
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

EDA365公众号

关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

GMT+8, 2025-11-5 20:01 , Processed in 0.171875 second(s), 26 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

快速回复 返回顶部 返回列表