单片机电子时钟设计(期末课程设计)

您所在的位置:网站首页 自动校准时间的电子钟 单片机电子时钟设计(期末课程设计)

单片机电子时钟设计(期末课程设计)

2024-01-15 10:47| 来源: 网络整理| 查看: 265

目录

一、设计内容

二、总体方案设计

2.1 功能分析

2.2 各模块功能说明

三、硬件系统设计

四、软件系统设计

  4.1 程序总体流程图 

 五、源代码

 六、测试结果展示

七、设计总结

一、设计内容

内容:用单片机控制实现基本数字电子钟的设计,扩展了4X4键盘和4位LED数码显示器,可用于显示和按键控制。

功能:能够显示时和分;可通过按键设置闹钟功能;可进行整点报时;可通过按键设置分校时。

二、总体方案设计 2.1 功能分析

数字电子钟系统可以分为主控制单元、复位电路、键盘电路、显示电路等。

2.2 各模块功能说明

晶振电路的功能:每个单片机系统里都有晶振,全程是叫晶体震荡器,在单片机系统里晶振的作用非常大,他结合单片机内部的电路,产生单片机所必须的时钟频率,单片机的一切指令的执行都是建立在这个基础上的,晶振的提供的时钟频率越高,那单片机的运行速度也就越快。晶振用一种能把电能和机械能相互转化的晶体在共振的状态下工作,以提供稳定,精确的单频振荡。

复位电路的功能:把电路初始化到一个确定的状态,一般来说,单片机复位电路作用是把一个例如状态机初始化到空状态,而在单片机内部,复位的时候单片机是把一些寄存器以及存储设备装入厂商预设的一个值。

键盘电路:根据4×4矩阵键盘,它是用四条I/O线作为行线,四条I/O线作为列线组成的键盘。在行线和列线的每个交叉点上设置一个按键。这样键盘上按键的个数就为4×4个。这种行列式键盘结构能有效地提高单片机系统中I/O口的利用率。实现按键控制闹钟,设置时间的功能。

显示电路的功能:采用4位共阴极数码管驱动方式P2口相应的位置0  即选择要显示的数码管位,P0口相应的位置1即可显示相应的数码管段。负责显示时钟的时和分。

三、硬件系统设计

    使用了Produce软件进行硬件原理图的仿真设计。

    部分电路如图所示:

  a. 主控电路: 80C51单片机

        

   b. 晶振电路:89C51单片机内部的振荡电路是一个高增益反相放大器,引线XTAL1和XTAL2分别            为反相振荡放大器的输入及内部时钟工作电路的输入和来自反相振荡器的输出,该反相放大             器可以配置为片内振荡器。

         

       c. 复位电路:采用上电复位,上电后,由于电容充电,使RST持续一段时间的高电平,从而实                现上电复位操作。这不仅能使单片机复位,还能是单片机的外围设备同时复位,当程序出              现错误时,可以随时使电路复位。

           

        d. 键盘电路:当按键被按下时,相应的引脚被拉低,经扫描后,获得键值,并执行键功能程                   序,因此通过按下同一个键,将执行不同的功能程序。

           

        e. 显示电路:主要是数码管显示数字电子钟的时和分。  

          

   

四、软件系统设计   4.1 程序总体流程图 

       主函数的流程框图:先进行初始化设定初值,然后相关子程序的调用

             

  4.2 主要模块程序流程

       1.调用中断服务子程序,循环次数++,因为定时时长为50ms,所以循环次数为20时,循环次数清0,秒++;秒为60时分加++,秒清0;分为60时,时++,分清0;时为24时,时清0,中断返回。

                     

         2.先确认弹簧消抖是否有键按下,之后判断扫描按键,不同的按键触发不同功能。

                  

 五、源代码

部分代码展示:

#include #define tl 0xba; //宏定义 tl赋初值 #define th 0x3c; //宏定义 th赋初值 sbit speaker=P3^5; //闹钟输出 蜂鸣器 unsigned char code led[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; //数码管显示的数字0-9的编码 unsigned char count0,second,minit,hour; //时间时分秒 unsigned int second1,minit1,hour1;//闹钟时分秒 //timenum1是调节时间的按键按下的次数 //timenum2是调节闹钟的按键按下的次数 //f1是否在设置闹钟 //f2是否在设置时间 unsigned char timenum1,timenum2,f1,f2; unsigned int dsflg; unsigned char temp; //延时子程序 代码烧路软件自动生成的 void delay(void) { unsigned int i; for(i=0;i23) //限位 { hour=0; } P0=led[hour/10]; //显示小时 P2=0xFE; //小时十位 p2.0 delay(); P2=0xFF; P0=led[hour%10]; //显示小时 P2=0xFD; //小时个位 p2.1 delay(); P2=0xFF; } if(timenum1==2) 如果timenum1==2 调分 //以下也是和调时一样的方法 { if(minit>59) { minit=0; } P0=led[minit/10]; P2=0xFB; //分钟十位 p2.2 delay(); P2=0xFF; P0=led[minit%10]; P2=0xF7; //分钟个位 p2.3 delay(); P2=0xFF; } } //设置闹钟 void almset() { timenum1=0; if(timenum2==1) //如果timenum2==1设定闹钟的小时 { if(hour1>23) //限位 { hour1=0; } P0=led[hour1/10];//小时显示 十位 P2=0xFE;//p2.0 delay(); P2=0xFF; P0=led[hour1%10]; P2=0xFD;//p2.1 小时个位 显示 delay(); P2=0xFF; } if(timenum2==2) //如果timenum2==2设定闹钟的分钟 和上面小时一样 { if(minit1>59) { minit1=0; } P0=led[minit1/10];//显示分钟十位 P2=0xFB; // p2.2 delay(); P2=0xFF; P0=led[minit1%10];//显示分钟个位 P2=0xF7;// p2.3 delay(); P2=0xFF; } } //控制闹钟 (闹钟到了设定时间就会响) void almkozi() { if((hour1==hour)&&(minit1==minit)&&(second


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3