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

51单片机时钟完整资料

[复制链接]

该用户从未签到

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

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

该用户从未签到

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

该用户从未签到

4#
发表于 2019-12-20 11:05 | 只看该作者
谢谢楼主分享
/ n* l/ k) L2 h6 n$ M+ O

该用户从未签到

5#
发表于 2019-12-20 11:59 | 只看该作者
谢谢楼主分享6 Q6 J" a( K- [( X& l

% {" b' @  D" F) k
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-7-19 17:08 , Processed in 0.156250 second(s), 26 queries , Gzip On.

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

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

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