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

51单片机时钟完整资料

[复制链接]

该用户从未签到

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

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
  
电阻
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

; ^& 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

该用户从未签到

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

该用户从未签到

4#
发表于 2019-12-20 11:05 | 只看该作者
谢谢楼主分享8 e, g  i5 M$ }; G

该用户从未签到

5#
发表于 2019-12-20 11:59 | 只看该作者
谢谢楼主分享
7 s3 U/ @0 J7 h5 h" J& n" L; J' _. ]/ u- u
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-6-21 17:41 , Processed in 0.093750 second(s), 26 queries , Gzip On.

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

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

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