基于89C52的电子钟设计

发布者:创新思绪最新更新时间:2017-12-31 来源: eefocus关键字:89C52  电子钟 手机看文章 扫描二维码
随时随地手机看文章

1.实验任务
(1).开机时,显示12:00:00的时间开始计时;
(2).P0.0/AD0控制“秒”的调整,每按一次加1秒;
(3).P0.1/AD1控制“分”的调整,每按一次加1分;
(4).P0.2/AD2控制“时”的调整,每按一次加1个小时;
2.电路原理图
数字钟
图4.20.1
3.系统板上硬件连线
(1).把“单片机系统”区域中的P1.0-P1.7端口用8芯排线连接到“动态数码显示”区域中的A-H端口上;
(2).把“单片机系统:区域中的P3.0-P3.7端口用8芯排线连接到“动态数码显示”区域中的S1-S8端口上;
(3).把“单片机系统”区域中的P0.0/AD0、P0.1/AD1、P0.2/AD2端口分别用导线连接到“独立式键盘”区域中的SP3、SP2、SP1端口上;
4.相关基本知识
(1).动态数码显示的方法
(2).独立式按键识别过程
(3).“时”,“分”,“秒”数据送出显示处理方法
5.程序框图
6.汇编源程序
SECOND          EQU 30H
MINITE                     EQU 31H
HOUR            EQU 32H
HOURK          BIT P0.0
MINITEK         BIT P0.1
SECONDK        BIT P0.2
DISPBUF            EQU 40H
DISPBIT            EQU 48H
T2SCNTA            EQU 49H
T2SCNTB            EQU 4AH
TEMP               EQU 4BH
 
        ORG 00H
        LJMP START
        ORG 0BH
        LJMP INT_T0
START:  MOV SECOND,#00H
        MOV MINITE,#00H
        MOV HOUR,#12
        MOV DISPBIT,#00H
        MOV T2SCNTA,#00H
        MOV T2SCNTB,#00H
        MOV TEMP,#0FEH
        LCALL DISP
        MOV TMOD,#01H
        MOV TH0,#(65536-2000) / 256
        MOV TL0,#(65536-2000) MOD 256
        SETB TR0
        SETB ET0
        SETB EA
WT:     JB SECONDK,NK1
        LCALL DELY10MS
        JB SECONDK,NK1
        INC SECOND
        MOV A,SECOND
        CJNE A,#60,NS60
        MOV SECOND,#00H
NS60:   LCALL DISP
        JNB SECONDK,$
NK1:    JB MINITEK,NK2
        LCALL DELY10MS
        JB MINITEK,NK2
        INC MINITE
        MOV A,MINITE
        CJNE A,#60,NM60
        MOV MINITE,#00H
NM60:   LCALL DISP
        JNB MINITEK,$
NK2:    JB HOURK,NK3
        LCALL DELY10MS
        JB HOURK,NK3
        INC HOUR
        MOV A,HOUR
        CJNE A,#24,NH24
        MOV HOUR,#00H
NH24:   LCALL DISP
        JNB HOURK,$
NK3:    LJMP WT
DELY10MS:
        MOV R6,#10
D1:     MOV R7,#248
        DJNZ R7,$
        DJNZ R6,D1
        RET
DISP:  
        MOV A,#DISPBUF
        ADD A,#8
        DEC A
        MOV R1,A
        MOV A,HOUR
        MOV B,#10
        DIV AB
        MOV @R1,A
        DEC R1
        MOV A,B
        MOV @R1,A
        DEC R1
        MOV A,#10
       MOV @R1,A
        DEC R1
        MOV A,MINITE
        MOV B,#10
        DIV AB
        MOV @R1,A
        DEC R1
        MOV A,B
        MOV @R1,A
        DEC R1
        MOV A,#10
       MOV @R1,A
        DEC R1
        MOV A,SECOND
        MOV B,#10
        DIV AB
        MOV @R1,A
        DEC R1
        MOV A,B
        MOV @R1,A
        DEC R1
        RET
INT_T0:
        MOV TH0,#(65536-2000) / 256
        MOV TL0,#(65536-2000) MOD 256
        MOV A,#DISPBUF
        ADD A,DISPBIT
        MOV R0,A
        MOV A,@R0
        MOV DPTR,#TABLE
        MOVC A,@A+DPTR
        MOV P1,A
        MOV A,DISPBIT
        MOV DPTR,#TAB
        MOVC A,@A+DPTR
        MOV P3,A
        INC DISPBIT
        MOV A,DISPBIT
        CJNE A,#08H,KNA
        MOV DISPBIT,#00H
KNA:    INC T2SCNTA
        MOV A,T2SCNTA
        CJNE A,#100,DONE
        MOV T2SCNTA,#00H
        INC T2SCNTB
        MOV A,T2SCNTB
        CJNE A,#05H,DONE
        MOV T2SCNTB,#00H
        INC SECOND
        MOV A,SECOND
        CJNE A,#60,NEXT
        MOV SECOND,#00H
        INC MINITE
        MOV A,MINITE
        CJNE A,#60,NEXT
        MOV MINITE,#00H
        INC HOUR
        MOV A,HOUR
        CJNE A,#24,NEXT
        MOV HOUR,#00H
NEXT:   LCALL DISP
DONE:   RETI
TABLE:  DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,40H
TAB:    DB 0FEH,0FDH,0FBH,0F7H,0EFH,0DFH,0BFH,07FH
        END
7.C语言源程序
#include
unsigned char code dispcode[]={0x3f,0x06,0x5b,0x4f,
                               0x66,0x6d,0x7d,0x07,
                               0x7f,0x6f,0x77,0x7c,
                               0x39,0x5e,0x79,0x71,0x00};
unsigned char dispbitcode[]={0xfe,0xfd,0xfb,0xf7,
                             0xef,0xdf,0xbf,0x7f};
unsigned char dispbuf[8]={0,0,16,0,0,16,0,0};
unsigned char dispbitcnt;
unsigned char second;
unsigned char minite;
unsigned char hour;
unsigned int tcnt;
unsigned char mstcnt;
unsigned char i,j;
void main(void)
{
  TMOD=0x02;
  TH0=0x06;
  TL0=0x06;
  TR0=1;
  ET0=1;
  EA=1;
  while(1)
    {
      if(P0_0==0)
        {
          for(i=5;i>0;i--)
          for(j=248;j>0;j--);
          if(P0_0==0)
            {
              second++;
              if(second==60)
                {
                  second=0;
                }
              dispbuf[0]=second;
              dispbuf[1]=second/10;
              while(P0_0==0);
            }
        }
      if(P0_1==0)
        {
          for(i=5;i>0;i--)
          for(j=248;j>0;j--);
          if(P0_1==0)
            {
              minite++;
              if(minite==60)
                {
                  minite=0;
                }
              dispbuf[3]=minite;
              dispbuf[4]=minite/10;
              while(P0_1==0);
            }
        }
      if(P0_2==0)
        {
          for(i=5;i>0;i--)
          for(j=248;j>0;j--);
          if(P0_2==0)
            {
              hour++;
              if(hour==24)
                {
                  hour=0;
                }
              dispbuf[6]=hour;
              dispbuf[7]=hour/10;
              while(P0_2==0);
            }
        }
    }
}
void t0(void) interrupt 1 using 0
{
  mstcnt++;
  if(mstcnt==8)
    {
      mstcnt=0;
      P1=dispcode[dispbuf[dispbitcnt]];
      P3=dispbitcode[dispbitcnt];
      dispbitcnt++;
      if(dispbitcnt==8)
        {
          dispbitcnt=0;
        }
    }
  tcnt++;
  if(tcnt==4000)
    {
      tcnt=0;
      second++;
      if(second==60)
        {
          second=0;
          minite++;
          if(minite==60)
            {
              minite=0;
              hour++;
              if(hour==24)
                {
                  hour=0;
                }
            }
        }
      dispbuf[0]=second;
      dispbuf[1]=second/10;
      dispbuf[3]=minite;
      dispbuf[4]=minite/10;
      dispbuf[6]=hour;
      dispbuf[7]=hour/10;
    }
}

关键字:89C52  电子钟 引用地址:基于89C52的电子钟设计

上一篇:基于51单片机的“叮冬”门铃设计
下一篇:拉幕式数码管显示技术原理与分析

推荐阅读最新更新时间:2024-03-16 15:51

89C52单片机电子时钟的设计
1.实验任务 (1).开机时,显示12:00:00的时间开始计时; (2).P0.0/AD0控制“秒”的调整,每按一次加1秒; (3).P0.1/AD1控制“分”的调整,每按一次加1分; (4).P0.2/AD2控制“时”的调整,每按一次加1个小时; 2.电路原理图 图4.20.1 3.系统板上硬件连线 (1).把“单片机系统”区域中的P1.0-P1.7端口用8芯排线连接到“动态数码显示”区域中的A-H端口上; (2).把“单片机系统:区域中的P3.0-P3.7端口用8芯排线连接到“动态数码显示”区域中的S1-S8端口上; (3).把“单片机系统”区域中的P0.0/AD0、P0.1/AD1、P0.2/AD2端口分别用导线连
[单片机]
<font color='red'>89C52</font>单片机电子时钟的设计
用51单片机做一个电子钟
学了一个多月51了,终于整了个电子钟出来,个人感觉还是比较有趣的。 需要注意的是我用的是普中的板子,板子类型不同,io口的功能可能会有所差异。然后我这个k1开关和k2开关是接反了的,原本k1应该是接P3^0,k2接P3^1的,结果我一测试才知道k1接到了P3^1,k2接到P3^0了,不过这不要紧,用sbit定义位变量时注意换一下就可以了。然后大概讲讲功能,用8个数码管显示目前时间和闹铃时间,然后用4个独立按键对目前时间和闹铃时间进行调整(k2是加,k3是减 ,k4是用来停止闹铃的),第一次按k1是对目前时间秒数调整,第2次按k1是对目前时间分钟数调整,第三次按k1是对目前时间小时数调整,第4次按k1是对闹铃秒数调整,第5次按k
[单片机]
89c52单片机+HT1621 LCD驱动程序
单片机源程序如下: #ifndef _HT1621B_H_ #define _HT1621B_H_ #include reg52.h #include intrins.h //为了使用NOP #define NOP _nop_() #define uchar unsigned char #define uint unsigned int #define ComMode 0x52 //4COM,1/3bias 1000 010 1001 0 #define RCosc 0x30 //内部RC振荡器(上电默认)1000 0011 0000 #define LCD_on 0x06 //打开LCD显示 偏压发生器1000
[单片机]
基于89C52单片机的实用八路物位测量仪
  1、总体构成    本测量仪的信号采样通过P0口的八根输入线可接受八路经过整形后的标准TTL电平,因此可测量不同传感器传来的脉冲型物位采样信号,只要在原始信号基础上加以整形处理即可,每来一个脉冲均被P0口捕捉到并可以通过软件编制使脉冲计数增一,定时读取计数和便可以换算成相应的物位情况。通过P3.3~P3.5三条线与串行显示驱动器Max7219的连接加以软件编程可完成八位数码管显示驱动,利用P1.3~P1.6四条口线接入四个按键,完成按键操作,利用P2口作为八路输出控制,可驱动八路固态继电器。   2、硬件线路设计    2.1  资源分配    AT89C52 芯片是基于MCS-51结构的高集成度8位微控制
[单片机]
基于<font color='red'>89C52</font>单片机的实用八路物位测量仪
51单片机初学实践:用DS1302模块和1.44寸TFT显示屏实现电子钟
这周在上次实现的电子钟(51单片机初学实践:用DS1302模块和LCD1602显示屏实现电子钟)的基础上作了以下2点改进:1、将LCD1602屏幕更换为1.44寸 TFT显示屏 主要考虑是TFT显示屏可以使用不同字体和颜色,更方便定制显示界面 2、将STC89C52RC单片机更换为STC12C5A60S2单片机 首先是空间更大,STC12C5A60S2单片机(60K bytes flash ROM, 1280 bytes data RAM),STC89C52RC单片机(8K bytes flash ROM, 512 bytes data RAM) 其次STC12C5A60S2单片机有单独的SPI接口(P1.5 MOSI 和
[单片机]
51单片机初学实践:用DS1302模块和1.44寸TFT显示屏实现<font color='red'>电子钟</font>
廉价隔离型高精度D/A转换器
在自动化仪表,电动组合仪表II型输出0~10mA的电流,III型输出4~20mA的电流。本文介绍的电路可以作为0~20mA的恒流源输出,因此适用性较广,可为各种仪器仪表输出标准电流,或者进行长距离的信号传输。本电路具有串行接口,易于构成网络测量和控制。同时应用光电隔离使本电路与输出电路隔离,从而解决了测量设备的共地问题,保证了测量设备的安全。另外,利用单片机便于计算和控制的特点,对输出电流进行软件校正,最后输出电流精度达到± 0.1%。 1 电路原理 该电路通过扩展键盘/显示器可任意设置输出电流值(0.00~20.00mA),精度达到±0.1%;通过串行口,采用PC机控制输出电流的大小,并且在PC机上同步显示输出的电流值。具
[单片机]
89c52单片机仿真ILI9341液晶屏驱动程序
ILI9341的单片机仿真原理图如下 给各位做了参考.ILI9341 8位模式,16位色 ILI9341单片机源程序如下: //#include REGX52.H #include REGX55.H #include intrins.h #include map.h //#define RED 0XF800 //红色 //#define GREEN 0X07E0 //绿色 //#define BLUE 0X001F //蓝色 //#define WHITE 0XF785 //白色 #define DATA_H P2 #define D
[单片机]
<font color='red'>89c52</font>单片机仿真ILI9341液晶屏驱动程序
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved