四川航天职业技术学院电子科技协会

你想更加了解电子科技协会吗?你想亲眼目睹电子科技协会成员们的优秀作品吗?你想加入电子科技协会吗?欢迎您来明志楼的116实验室参观交流
当前位置: 主页 > 比赛作品 > 本院获奖作品 >

数字时钟

时间:2014-04-06 00:31来源:未知 作者:李文杰 点击:
通过实践设计出能准确显示时、分、秒的时钟,并可以调时、定时,包括蜂鸣器的整点报时。基本功能:准确计时,以数字形式显示时间,24时制;具备时、分调整和整点报时功能。
数字时钟设计报告2003

一、实验目的

通过实践设计出能准确显示时、分、秒的时钟,并可以调时、定时,包括蜂鸣器的整点报时。

二、实验要求

基本功能:准确计时,以数字形式显示时间,24时制;具备时、分调整和整点报时功能。

三、设计方案及论证

Ⅰ、硬件部分:

1、时钟显示

用七段LED数码管来实现,采用共阳管和PNP驱动方式。PNP工作于开关状态,基极通过1K的电阻连到单片机的P2口。为节省P口,将六位数码管的8段段选端分别并接并加上470Ω的限流电阻,由P0口控制,给低电平的段会被点亮。因为六位管的段被并接只能通过动态扫描的方式来显示,即利用管子的余晖和人眼的视觉残留实现六位管子在“同一时间”显示不同的值,而扫描这是靠位选的轮流有效实现。如左图。

 2、整点报时和闹钟铃

此部分用一个5V有源蜂鸣器来做,同样用PNP作为开关来控制,此外为防止其可能的方向电压尖峰在蜂鸣器两端反接一个IN4148二极管来保护。如右图。

3、校时、定时

此部分由4个按键控制,如下图,key1key3用来选定要调校的时、分的位,被选中的为将闪烁;key2用来是选中的为按相应的进制增1变化;key4是进入定时模式,定时的时数改变与调时方法相同。


4、单片机最小系统

本实验采用STC89C52RC单片机,指令系统完全与51兼容。其最小系统包含电源电路、晶振电路、复位电路。

本实验才用STC单片机的典型系统,各模块参数配置如图:

其中晶振频率为12MHz,震荡部分电容为30pF的瓷片电容。

复位电路采用图示的兼有上电复位和按键复位功能的方式,其中的电容为10uF电解电容。


5、硬件系统全电路图
Ⅱ、软件部分

    软件部分主要有两大块:

一是上电后程序靠定时器To产生的中断而实现的常规时钟显示,这里面就是要处理时、分、秒的六位数字的循环和进位问题。按照24时制的规则,其进位逻辑为:秒的个位为十进制(0~9)满10向秒的十位进1,而秒的十位为六进制(0~5)满6向分的个位进1,分与秒相似,时的个位在时的十位为01的时候也是10进制,而在时的十位为2的时候则只是04就进位了。但时的十位是3进制的(0~2)。

       num++;

       if(num==10)

       {   num=0;

           num1++;

           if(num1==6)

           {

              num1=0;

              num2++;

              if(num2==10)

              {

              Num2=0;

              Num3++;

                  if(num3==6)

                  {

                     Num3=0;

                     Num4++;

                     if(num4==10)

                     {

                         Num4=0;

                         Num5++;

                     }

                  }

              }

           }

       }

二是程序监控4个按键的状态并进行相应处理。本实验中我们并未利用外中断来监控键盘,只是在主函数中用一个函数key_scan()来不停地扫4个键的状态并进行相应处理,这一部分的程序中主要的问题是按键抖动的去除,试验中,我们用的是软件延时的办法。

 

四、心得体会

通过本次课程设计,我学习到了很多,也收获了很多。总结如下:

一、我对单片机的理论知识有了进一步的掌握,对单片机的原理和实际应用有了更多地理解和掌握。

二、我对单片机的C语言编程有了更深刻的认识和更扎实的掌握,我们不断修改,不断尝试,对源代码各个函数都有了一个非常深入的掌握。

三、理论与实践相结合才能更好的理解和掌握所学的知识。

五、附件(程序源代码)

#include<reg52.h>

#define uchar unsigned char

#define uint unsigned int

sbit d1=P3^7;

sbit d2=P1^2;

sbit d3=P1^1;

sbit d4=P1^0;

sbit d5=P1^3;

sbit d6=P1^4;

uchar num,num1,num2,num3,num4,num5,aa;

uchar code tabe[]={0xfc,0x0c,0xda,0x9e,0x2e,0xb6,0xf6,0x1c,0xfe,0xbe};

uchar code tabe1[]={0xfc,0x0c,0xda,0x9e,0x2e,0xb6};

uchar code tabe2[]={0xfc,0x0c,0xda,0x9e,0x2e,0xb6,0xf6,0x1c,0xfe,0xbe};

uchar code tabe3[]={0xfc,0x0c,0xda,0x9e,0x2e,0xb6};

uchar code tabe4[]={0xfc,0x0c,0xda,0x9e,0x2e,0xb6,0xf6,0x1c,0xfe,0xbe}; 

uchar code tabe5[]={0xfc,0x0c,0xda};

void baty(uint z);

void main()

{  

    num=0;

  num1=0;

  num2=0;

  num3=0;

  num4=0;

  num5=0;

  TMOD=0x01;

  TH0=(65536-50000)/256;

  TL0=(65536-50000)/256;

  EA=1;

  EX0=1;

  EX1=1;

  ET0=1;

  IT0=1;

  IT1=1;

  TR0=1;

  while(1)

  {  

      d4=0;

      d5=0;

      d6=0;

      d1=1;

      P0=tabe[num];

      d1=0;

      P2=0;

      baty(1);

     

      d1=1;

      P0=tabe1[num1];

      d1=0;

      P2=1;

      baty(1);

         

      d1=1;

      P0=tabe2[num2];

      d1=0;

      P2=2;

      baty(1);

         

      d1=1;

      P0=tabe3[num3];

      d1=0;

      P2=3;

      baty(1);

         

      d1=1;

      P0=tabe4[num4];

      d1=0;

      P2=4;

      baty(1);

         

      d1=1;

      P0=tabe5[num5];

      d1=0;

      P2=5;

      baty(1);       

      if(num5==2)

      {

          if(num4==4)

          {

              num4=0;

              num5=0;

          }

      } 

  }

}

void baty(uint z)

{

  uchar a,s;

  for(a=z;a>0;a--)

      for(s=110;s>0;s--);

}

void man() interrupt 1

{

  TH0=(65536-50000)/256;

  TL0=(65536-50000)/256;

  aa++;

  if(aa==20)

  {

      aa=0;

      num++;

      if(num==10)

      {

          num=0;

          num1++;

          if(num1==6)

          {

              num1=0;

              num2++;

              if(num2==10)

              {

                  num2=0;

                  num3++;

                  if(num3==6)

                  {

                      num3=0;

                      num4++;

                       d4=1;

                      baty(1000);

                      d4=0;

                      baty(500);

                      d4=1;

                      baty(1000);

                     

                      if(num4==10)

                        {

                           num4=0;

                           num5++;

                        }

                  }

              }

          }

      }

  }

}

void man1() interrupt 0      //分钟数调时;

{

  if(d2==0)

  {

      baty(5);

      if(d2==0);

      {

          num2++;

          d4=1;

          baty(100);

          if(num2==10)

          {

              num2=0;

              num3++;

              if(num3==6)

                  num3=0;

          }

      }

  }

 

}

void man2() interrupt 3      //小时数调时

{                                            

  if(d3==0)

  {

      baty(10);

      if(d3==0)

      {

          num4++;

          d4=1;

          baty(100);

          if(num4==10)

            {

                num4=0;

                num5++;

            }

      }

  }

}


六:元器件附录

 

单片机:89C52   一块;

LED数码管:6只;

LED: 4只;

电阻:

        10K2只;

        4.7K: 8只;

        0.6k: 2只;

        1.5K2只;

电容:、

        瓷片电容:30pF  2只;

        电解电容:10uF  1只;

三极管:9014  1只;

有源蜂鸣器:1只;

开关按键:2只;

位选芯片:74Ls138  1块;

段选芯片:74Ls573  1块;

万用电路板:2块;

 

(责任编辑:李文杰)
顶一下
(0)
0%
踩一下
(0)
0%
------分隔线----------------------------
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
用户名: 验证码:点击我更换图片
栏目列表
推荐内容
  • 二线水位控制装置

    555时基集成电路是一种电路结构简单、使用方便灵活、用途广泛的多功能集成电路。下面...

  • 数字时钟

    通过实践设计出能准确显示时、分、秒的时钟,并可以调时、定时,包括蜂鸣器的整点报时...

  • 简单LED电子显示屏

    本设计基于单片机技术,采用89s51单片机为控制核心,利用89s51三个端口作为I|O口,来...

  • 动作控制小车

    动作控制小车,通过触屏控制小车的运动,附程序、电路、pcb图...