利用51单片机实现多功能数字钟

更新时间:2024-03-28 13:22:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

课程设计任务书

学生姓名: 专业班级:电子科学与技术1203班 指导教师: 工作单位: 信息工程学院 题 目: 多功能数字钟的设计 初始条件:

本设计既可以使用集成译码器、计数器、定时器、脉冲发生器和必要的门电路等。本设计也可

以使用单片机系统构建多功能数字钟。用数码管显示时间计数值。

要求完成的主要任务: (包括课程设计工作量及技术要求,以及说明书撰写等具体要求)

1、课程设计工作量:1周。 2、技术要求:

① 设计一个数字钟。要求用六位数码管显示时间,格式为00:00:00。

②具有60进制和24进制(或12进制)计数功能,秒、分为60进制计数,时为24进制(或12进制)计数。

③有译码、七段数码显示功能,能显示时、分、秒计时的结果。 ④设计提供连续触发脉冲的脉冲信号发生器, ⑤具有校时单元、闹钟单元和整点报时单元。

⑥确定设计方案,按功能模块的划分选择元、器件和中小规模集成电路,设计分电路,画出总体电路原理图,阐述基本原理。

3、查阅至少5篇参考文献。按《武汉理工大学课程设计工作规范》要求撰写设计报告书。全

文用A4纸打印,图纸应符合绘图规范。

时间安排:

1、 2014 年 6 月 21日集中,作课设具体实施计划与课程设计报告格式的要求说明。 2、 2014 年 6 月 21日,查阅相关资料,学习电路的工作原理。

2、 2014 年 6 月 22 日 至 2014 年 6 月 23日,方案选择和电路设计。

2、 2014 年 6 月 24 日 至 2014 年 6 月 25 日,电路调试和设计说明书撰写。 3、 2014 年 6 月 26 日上交课程设计成果及报告,同时进行答辩。 课设答疑地点:鉴主15楼电子科学与技术教研室。

指导教师签名: 年 月 日 系主任(或责任教师)签名: 年 月 日

武汉理工大学《数字电子电路》课程设计说明书

目录

摘要 ...................................................................................................................................................................... II 多功能数字钟的设计 .......................................................................................................................................... 1 1设计内容及技术要求 ....................................................................................................................................... 1

1.1设计内容 ............................................................................................................................................... 1 1.2技术要求 ............................................................................................................................................... 1 2电路方案论证和确定及工作原理分析 ........................................................................................................... 1

2.1电路方案论证 ....................................................................................................................................... 1 2.2方案的确定 ........................................................................................................................................... 1 2.3电路工作原理分析 ............................................................................................................................... 2 2.4多功能数字钟的硬件系统框架 ........................................................................................................... 2 3单元电路设计 ................................................................................................................................................... 2

3.1显示单元电路设计 ............................................................................................................................... 2 3.2报时单元电路设计 ............................................................................................................................... 3 3.3按键和拨动开关部分 ........................................................................................................................... 4 3.4时钟部分和电源部分 ........................................................................................................................... 4 4电路仿真与仿真结果分析 ............................................................................................................................... 5

4.1电路仿真图 ........................................................................................................................................... 5 4.2电路仿真结果分析 ............................................................................................................................... 6 5电路安装与调试 ............................................................................................................................................... 6 6本次设计电路的特点及改进意见 ................................................................................................................... 6 参考文献 .............................................................................................................................................................. 8 附录1 整体电路图 ............................................................................................................................................. 9 附录二 整体软件清单 ...................................................................................................................................... 10

I

武汉理工大学《数字电子电路》课程设计说明书

摘要

这份设计报告主要介绍基于STC89C52单片机的多功能数字钟的设计,以STC89C52单片机为主体,用2个三位共阴七段数码管来显示时、分、秒,本设计采用24小时计时,用11.0592MHz晶振提供单片机所需要的脉冲,通过蜂鸣器产生闹钟或整点报时的功能。本设计除了具有计时的基本功能外,也具有校时、闹钟、整点报时、人工止闹的功能,这几个功能都是单片机实现的。通过实物制作证明要求的功能都可以实现,达到设计的指标。

关键词:单片机;动态显示;定时器中断;软件去抖;

II

武汉理工大学《数字电子电路》课程设计说明书

多功能数字钟的设计

1设计内容及技术要求

1.1设计内容

按照数电课设要求,本课程设计的的主要内容是一个基于STC89C52单片机的一个数字钟,通过数码管进行数字显示,在设计时是通过搭建一个STC89C52单片机的最小系统, 2个三位数码管构成6位数码管和单片机的相应引脚进行连接,一些拨动开关和按键通过导线和单片机的一些引脚连接用来提供外部信息,另外还有蜂鸣器部分电路用来报时,然后通过编程实现所要求的功能。

1.2技术要求

本设计的技术要求包括:精确计时,数码管显示时、分、秒,人工校时,定时功能,整点报时功能。

2电路方案论证和确定及工作原理分析

2.1电路方案论证

方案一 :用32768Hz晶振产生脉冲,然后经过计数器15分频产生秒脉冲,然后用计数

器、译码器、6个一位数码管进行制作。采用此方案进行设计,需要30片左右的数字芯片,并且线路复杂。

方案二 :用STC89C52单片机进行制作,利用单片机的智能化,单片机具有时钟振荡系统,并且单片机内部具有定时器/计数器功能,可以很方便的实现所需要的功能。

2.2方案的确定

1

武汉理工大学《数字电子电路》课程设计说明书

通过比较,方案一电路复杂,用的芯片多,费用在百元以上,当电路功能需要进行改动

时很麻烦,相比之下,方案二比较好,电路简单,只需一片STC89C52芯片,费用低,电路功能改变容易,所以选择方案二。

2.3电路工作原理分析

STC89C52单片机外接一个11.0592MHz的晶振,单片机按晶振产生的脉冲进行工作,数码管采用动态显示,通过编程控制单片机的工作状态,其中,计时部分用到单片机的定时器中断功能[1],即单片机的计时功能不受其执行其他程序时的干扰。通过按键和拨动开关的配合给单片机提供相应的信息让单片机程序中的变量发生改变,进而可以进行校时、定时功能

2.4多功能数字钟的硬件系统框架 时钟部分 图1-1硬件系统框架图

电源部分 拨动开关 按键部分 CPU 报时部分 数码管显示部数码管显示 3单元电路设计

3.1显示单元电路设计

2

武汉理工大学《数字电子电路》课程设计说明书

图1-2 显示部分电路图

因为市场上6位一体的数码管不容易买到,所以采用用三位一体的数码管来组成六位数

码管用来显示,为了便于实际中的布线,这里的数码引脚没有采用按a-h的顺序连到P0口,在编程时应该注意数字的编码。其中P1.0-P1.5用来选择让哪个数码管亮,因为本实验比较简单,采用直接相连的办法,完全可以实现其功能。显示部分采用的显示方法是动态显示,即选定一位数码管,送一个这个被选定的数码管需要显示的数码,然后选定下一个数码管,送一个这个数码管需要显示的数码,如此循环,由于单片机的执行速度很快,人眼无法反应过来,就可以看到不同的数码显示了[2]。

3.2报时单元电路设计

3

武汉理工大学《数字电子电路》课程设计说明书

图1-3 报时部分电路图

当P1.6引脚输出低电平时,三极管Q1饱和导通,此时蜂鸣器发出声音,用来报时。当

P1.6引脚输出高电平,三极管Q1截止,蜂鸣器没办法工作。

3.3按键和拨动开关部分

图1-4 按键与

拨动开关电路图

通过拨动开关可以使单片机P3.2、P3.3、P3.7连接到高电平或低电平,单片机可以检 测到相应的引脚电平变化,而做出不同的相应。 当按键没有按下时,和按键相连的引脚为高点平,当按键按下时,和按键相连的引脚和地相连,变为低电平,然后单片机根据哪个引脚电平变低,来做出相应的响应[3]。

3.4时钟部分和电源部分

4

武汉理工大学《数字电子电路》课程设计说明书

图1-5 时钟部分和电源部分的电路图

本电路设计采用USB接口进行供电,这样便于在多处场合使用,其中LED1和R1组成的电路是为了提醒用户已经有电供应,STC89C52单片机40脚接+5V,20脚接地,这样单片机供电正常,然后CP1是11.0592MHz的晶振,用来给单片机提供工作需要的脉冲,其中两个22p的瓷片电容是帮助晶振产生脉冲的。

4电路仿真与仿真结果分析

4.1电路仿真图

5

武汉理工大学《数字电子电路》课程设计说明书

图1-6 电路仿真图

4.2电路仿真结果分析

这里说明一下,由于使用的仿真软件中没有找到三位一体数码管就用了六位一体数码管,其实本质是一样的,在仿真图中,左边两位显示的是时的部分,中间两位显示的分的部分,右边的两位显示的秒的部分。通过仿真证明了电路的计时、校时、定时、整点报时功能都可以很好的实现,说明电路方案的是正确的。

5电路安装与调试

由于电路不是特别复杂,所以选择了用万用板手工焊的方式,按照电路图焊出来电路板,然后给其供电,所要求的功能完全可以实现,本次设计成功。通过和准确的时间对比,本次的多功能数字钟很难观察出误差。

6本次设计电路的特点及改进意见

6

武汉理工大学《数字电子电路》课程设计说明书

本次的电路设计本着简单的原则进行设计,电路比较简单,但是还是有些方面需要改

进,例如数码管的位选部分,可以利用三极管的开关特性进行位选,这样允许通过数码管的电流就可以大一点,数码管可以更亮一点,还有因为使用的是共阴数码管,所以上拉电阻和与数码管串联的电阻一块限流,这样数码管不是很亮,显示不是特别清晰。

表1-1 多功能数字钟的元件清单

序号 1 2 3 4 5 6 7 8 9 10 11 元器件名称 STC89C52 蜂鸣器 PNP三极管 红色LED 1K电阻 5.1K电阻 三位一体共阴数码管 按键开关 拨动开关 USB接口 1K排阻

数量(片) 1 1 1 1 14 1 2 3 4 1 1 7

武汉理工大学《数字电子电路》课程设计说明书

参考文献

[1] 姚燕南,姚向华,乔瑞萍.微型计算机原理(第五版).西安:西安电子科学出版社,2008.10

[2] 郭天祥.51单片机C语言教程——入门.提高.开发.拓展全攻略.北京:电子工业出版社,2009.1

[3] 秦志强.C51单片机应用与C语言程序设计(第二版).北京:电子工业出版社,2009.9 [4] 谭浩强.C程序设计(第四版).北京:清华大学出版社,2010.6

[5] 马德骏,张建宏,汤练兵.C语言程序设计(第二版).北京:科学出版社,2009

8

武汉理工大学《数字电子电路》课程设计说明书

附录1 整体电路图

图1-7 整体电路图

9

武汉理工大学《数字电子电路》课程设计说明书

附录二 整体软件清单[4][5]

#include

#define uchar unsigned char #define uint unsigned int sbit a=P3^7; // sbit h=P1^5; // sbit l=P1^4; // sbit b=P3^4; // sbit m=P1^3; // sbit n=P1^2; //

sbit q=P1^1; //引脚定义 sbit r=P1^0; // sbit c=P3^5; // sbit f=P3^3; // sbit g=P1^6; // sbit S=P3^2; // sbit d=P3^6; //

uchar table[]={0xf3,0x90,0xcb,0xda,0xb8,0x7a,0x7b,0xd0,0xfb,0xfa};//数字编码 uint e=2,t,i,s;//变量定义

uchar num,num1,num2,num3,num4,num5,num6,ds[6],dis[6];//变量定义 void display(uchar,uchar,uchar,uchar,uchar,uchar);//显示函数声明 void delayms(uint);//延时函数声明 void main()//主函数 {

TMOD=0X10;//设定定时器1为工作方式1为16位定时器/计数器 TH1=(65536-45872)/256;//装初值 TL1=(65536-45872)/256; EA=1;//开总中断

ET1=1;//开定时器1中断 TR1=1;//启动定时器1 while(1)//无限循环 {

dis[0]=num1;//秒的个位 dis[1]=num1/10;//秒的十位 dis[2]=num2;//分的个位 dis[3]=num2/10;//分的十位 dis[4]=num3;//时的个位

10

武汉理工大学《数字电子电路》课程设计说明书

dis[5]=num3/10;//时的十位

display(dis[5],dis[4],dis[3],dis[2],dis[1],dis[0]);//调用显示函数,显示时间

while(a==0)//当需要定时时, {

display(ds[5],ds[4],ds[3],ds[2],ds[1],ds[0]);//调用显示函数,显示定时的时间

if(b==0) //当换位按键按下 {

delayms(10); //延时10ms if(b==0) //再次检测 if(e<=4) //根据条件,

e=e+2; //循环改变变量e的值,e=2;4或6

else //等一下根据e的值进行确定进行调整的是时或分还是秒

e=2; //

while(!b); //等待按键释放 }

if(c==0) //当有增加的按键按下 {

delayms(10); //延时10ms

if(c==0) //检测按键是否还被按下 if(e<=2) //如果变量e小于等于2 { num4++; //定时的时间秒位数字加1 if(num4>=60)//如果数字大于等于60; num4=0; //令秒位等于00 }

if(e==4) //如果e等于4 { num5++; //分位数字加1

if(num5>=60) //如果分位数值大于等于60 num5=0; //令分位数值等于00 }

if(e==6) //如果e等于6 {

num6++; //时位数值加1

if(num6>=24)//如果时位数值大于等于24 num6=0; //令时位数值为00 }

while(!c); //等待增加的按键释放 }

if(d==0) //当减少的按键按下 {

delayms(10); //等待10ms

if(d==0) //再次检测按键是否按下

11

武汉理工大学《数字电子电路》课程设计说明书

if(e<=2) //如果变量e小于等于2 {

if(num4>=1)//如果秒位的数值大于等于1 num4--; //秒位减1 else //如果不是 num4=59; //令秒位为59 }

if(e==4) //如果变量e等于4 {

if(num5>=1)//如果分位数值大于等于1 num5--; //分位数值减1 else //如果不是

num5=59; //令秒位等于59 }

if(e==6) //如果变量e等于6 {

if(num6>=1)//如果时位大于等于1 num6--; //时位数值减1 else //如果不是 num6=23; //令时位为23 }

while(!d); //等待按键按下 }

ds[0]=num4; //定时时显示的秒的个位 ds[1]=num4/10; //定时时显示的秒的十位 ds[2]=num5; //定时时显示的分的个位 ds[3]=num5/10; //定时时显示的分的十位 ds[4]=num6; //定时时显示的时的个位 ds[5]=num6/10; //定时时显示的时的十位 }

if(dis[5]==ds[5]&&dis[4]==ds[4]&&dis[3]==ds[3]&&dis[2]==ds[2]&&S==0)//定时部分,当定时的时间和现在数字钟的时间时和分相同时 for(i=0;i<2;i++)//一个for循环 {

g=~g; //取反和蜂鸣器相连的那个引脚的输出 delayms(3); //调用延时函数,延时3ms }

else //如果定时的时间和数字钟的时间时和分不同

if(dis[3]==0&&dis[2]==0&&dis[1]==0&&dis[0]==0)//如果时钟的时间分位和秒位都为零,即整点时 {

g=~g; //取反和蜂鸣器相连的那个引脚的输出 delayms(1); //调用延时函数,延时1ms

g=~g; //再次取反和蜂鸣器相连的那个引脚的输出

12

武汉理工大学《数字电子电路》课程设计说明书

}

if(f==0) //如果校时的功能打开 {

if(b==0) //如果换位按键按下

delayms(10); //调用延时函数,延时10ms if(b==0) //再次检测按键是否按下 t=~t; //令变量取反 while(!b); //等待按键释放 if(t==0) //如果变量t等于0 {

if(c==0) //如果增加的按键按下

delayms(10);//调用延时函数,延时10ms if(c==0) //再次检测按键是否按下 num2++; //分位数值加1

if(num2>=60) //如果分位数值大于等于60 num2=0; //令分位数值等于0 while(!c); //等待按键释放

if(d==0) //如果减少的按键按下

delayms(10);//调用延时函数,延时10ms if(d==0) //再次检测按键是否按下 if(num2>=1) //如果分位数值大于等于1 num2--; //分位数值减1 else //如果不是

num2=59; //令分位数值等于59 while(!d); //等待按键按下 }

else //如果变量t等于1 {

if(c==0) //如果增加的按键按下

delayms(10);//调用延时函数,延时10ms if(c==0) //再次检测按键是否按下 num3++; //时位数值加1

if(num3>=24) //如果时位数值大于等于24 num3=0; //令时位数值等于0 while(!c); //等待按键释放

if(d==0) //如果减少的按键按下 delayms(10);//延时10ms

if(d==0) //再次检测按键是否还被按下 if(num3>=1) //如果时位数值大于等于1 num3--; //时位数值减少1 else //如果时位数值小于1 num3=23; //令时位数值等于23 while(!d); //等待按键释放 }

13

武汉理工大学《数字电子电路》课程设计说明书

} } }

void T1_time() interrupt 3 //中断服务程序 {

TH1=(65536-45872)/256; //给寄存器高位装初值 TL1=(65536-45872)%6; //给寄存器低位装初值 num++; //计数变量加1

if(num==20) //如果进入中断的次数等于20,即有了1s的时间 {

num=0; //令计数变量num等于零,从新开始计数 num1++; //秒位数值加1

if(num1>=60) //如果秒位数值大于等于60 {

num1=0; //令秒位数值等于0 num2++; //分位数值加1 }

if(num2>=60) //如果分位数值大于等于60 {

num2=0; //令分位数值等于零 num3++; //时位数值加1

if(num3>=24) //当时位数值大于等于24时 num3=0; //令时位数值等于0 } } }

void display(uchar four,uchar five,uchar six, uchar three, uchar two,uchar one)//显示函数,动态显示 {

h=~h; //选中第六位数码管

P0=table[one]; //给P0口送要显示的数据对应的编码,即秒的个位 delayms(2); //调用延时函数,延时2ms h=~h; //不再选中第六位数码管 P0=0x00; //关闭所有的显示 l=~l; //选中第五位数码管

P0=table[two]; //给P0口送要显示的数据对应的编码,即秒的十位 delayms(2); //调用延时函数,延时2ms l=~l; //取消选中第五位数码管 P0=0x00; //关闭所有的显示 m=~m; //选中第四位数码管

P0=table[three]; //给P0口送要显示的数据对应的编码,即分的个位 delayms(2); //调用延时函数,延时2ms m=~m; //取消选中第四位数码管 P0=0x00; //关闭所有的显示

14

武汉理工大学《数字电子电路》课程设计说明书

n=~n; //选中第三位数码管

P0=table[six]; //给P0口送要显示的数据对应的编码,即分的十位 delayms(2); //调用延时函数,延时2ms n=~n; //取消选中第三位数码管 P0=0x00; //关闭所有的显示 q=~q; //选中第二数码管

P0=table[five]; //给P0口送要显示的数据对应的编码,即时的个位 delayms(2); //调用延时函数,延时2ms q=~q; //取消选中第二位数码管 P0=0x00; // r=~r; // P0=table[four]; // delayms(2); // r=~r; // P0=0x00; //}

void delayms(uint xms) //{

uint j,k; // for(j=xms;j>0;j--) // for(k=110;k>0;k--); //}

关闭所有显示 选中第一位数码管

给P0口送要显示的数据对应的编码,即时的十位 调用延时函数,延时2ms 取消选中第一位数码管 取消所有显示 延时函数,延时xms 定义两个变量

两个for循环;大约 能延时xms 15

本科生课程设计成绩评定表

姓 名 专业、班级 课程设计题目: 课程设计答辩或质疑记录: 性 别 成绩评定依据: 最终评定成绩(以优、良、中、及格、不及格评定) 指导教师签字: 年 月 日

本文来源:https://www.bwwdw.com/article/absr.html

Top