AT89C51电子时钟课程设计8位 C编.docx
- 文档编号:28799249
- 上传时间:2023-07-19
- 格式:DOCX
- 页数:22
- 大小:233.08KB
AT89C51电子时钟课程设计8位 C编.docx
《AT89C51电子时钟课程设计8位 C编.docx》由会员分享,可在线阅读,更多相关《AT89C51电子时钟课程设计8位 C编.docx(22页珍藏版)》请在冰豆网上搜索。
AT89C51电子时钟课程设计8位C编
第一章序论
设计目的:
1、增进对MCS51单片机电路的感性认识,加深对理论方面的理解;掌握Protel99SE,Proteus,,Keil软件的有关知识;了解和掌握软硬件设计过程、方法及实现;
2、通过基于单片机的数字电子钟的设计的设计练习,了解必须提交的各项工程文件,也达到巩固、充实和综合运用所学知识解决实际问题的目的。
实验环境:
1、增进对MCS51单片机电路的感性认识,加深对理论方面的理解;掌握Protel99SE,Proteus,,Keil软件的有关知识;了解和掌握软硬件设计过程、方法及实现;
2、通过基于单片机的数字电子钟的设计的设计练习,了解必须提交的各项工程文件,也达到巩固、充实和综合运用所学知识解决实际问题的目的。
任务要求:
1、查阅课题相关资料,深入理解课题含义及设计要求,注意材料收集与整理;
2、设计一个时钟系统,实现以24小时为一个周期,同时8位7段LED数码管显示小时、分钟和秒的要求;
3、该时钟在计时过程中具有定时功能,当时间到达提前定好的时间进行蜂鸣报时;
4、设计四个按键S1、S2、S3和S4键,进行相应的操作就可实现校时、定时、复位功能。
5、设计系统原理图,利用Protel99SE绘制原理图,设计程序,利用Proteus仿真软件进行系统调试;
6、结束后,及时提交设计报告(含纸质稿、电子稿),要求格式规范、内容完整、结论正确,正文字数不少于3000字。
第二章硬件设计
1、电路原理图
型单片机采用AT89C51口驱动显示数字,位共阴极数码管,8P1时间显示电路:
采用一个P2口作为扫描信号个按键,实现调试分别连接了、、时间设置电路:
P3.0P3.1P3.23
模式、时间加和时间减
闹钟:
P3.3口接扬声器
2、单片机最小系统
为什么称之为单片机最小系统呢?
单片机最小系统,也叫做单片单机最小应用系统,是指用最少的原件组成单片机可以工作的系统。
片机最小系统的三要素就是电源、晶振、复位电路电容电压不能突复位电路:
由电容串联电阻构成,由图并结合脚将会出现高电平,并且,的性质可以知道,当系统一上电,RST变单片机当51RC这个高电平持续的时间由电路的值来决定。
典型的RST脚的高电平持续两个机器周。
晶振,又叫晶体振荡器,从这个名字我们就可以看出:
晶振电路
来,它注定一生都要不停振荡的。
他起到的作用是为单片机系统提供基准时钟信号,类似于我们部队训练时喊口令的人,单片机内部所有的工作都是以这个时钟信号为步调基准来进行工作的。
STC89C52单片机的18脚和19脚是晶振引脚,我们接了一个12MHz(产生精确的uS级时歇,方便定时操作),外加两个30pF的电容,电容的作用是帮助晶振起振,并维持振荡信号的稳定。
时钟电路产生的振荡脉冲经过触发器进行二分频之后,才成为单片机的时钟脉冲信号。
所以,适当组合RC的取值就可以保证可靠的复位。
一般推荐C取0.1u,R取4.7K。
当然也有其他取法的,原则就是要让RC组合可以在RST脚上产生不少于2个机周期的高电平。
至于如何具体定量计算,可以参考电路分析相关书籍。
这里我们使用上电复位和按键复位两种方式
3、元件清单
电子钟元器件清单
规格型号数量(个)元件名称
单片机1AT89c51
晶振112MHz
电容230uF
电容1μ0.1F
按键4BUTTON
液晶显示17SEG-MPX8-CC-bule
4、显示工作原理:
系统采用动态显示方式,用P0口来控制LED数码管的段控线,而用P2口来控制其位控线。
动态显示通常都是采用动态扫描的方法进行显示,即循环点亮每一个数码管,这样虽然在
任何时刻都只有一位数码管被点亮,但由于人眼存在视觉残留效应,只要每位数码管间隔时间足够短,就可以给人以同时显示的感觉。
51MCS5、设计方案与实现本课题采用软件程序设计的方案,利用—数码显示器和按键,配合软内部的定时/计数器进行中断定时,LEDCPU件延时实现时、分、秒的计时。
运用串行通信方式且计时不占用。
能够充分利用好CPU时间第三章软件设计流程及描述1、软件介绍C单片机51KeilSoftware公司出品的系列兼容美国KeilC51是可读性、语言在功能上、语言软件开发系统,与汇编相比,C结构性、编译C可维护性上有明显的优势,因而易学易用。
Keil提供了包括、宏汇编、连接器、库管理和一个功能强大的仿真调试器等在内的器)将这些部分组合完整开发方案,通过一个集成开发环境uVision(等操作系、WIN2000WINXP、在一起。
运行Keil软件需要WIN98NT、几乎就是你的不二之选,即语言编程,那么Keil统。
如果你使用C强大其方便易用的集成环境、语言而仅用汇编语言编程,使不使用C的软件仿真调试工具也会令你事半功倍。
优点:
⒈KeilC51生成的目标代码效率非常之高,多数语句生成的汇编代码很紧凑,容易理解。
在开发大型软件时更能体现高级语言的优势。
语言在功能上、结构性、可读性、可维护性上⒉与汇编相比,C来开发,体C有明显的优势,因而易学易用。
用过汇编语言后再使用会更加深刻。
计数器MCS-51单片机的定时器/2、/计数器,分别称定时器MCS-51单片机共有两个可编程的定时器/。
它们都是十六位加法计数结构,分别1/计数器计数器0和定时器(地)和TL)及TH(地址8DH(地址由TH(地址8CH)和TL8AH1001位计数器组成。
这四个计数器均属专用寄存器之列。
)两个8址8BH计数器都具有定时和计数两种功能。
MCS-51的每个定时器/计数功能1.
所谓计数是指对外部事件进行计数。
外部事件的发生以输入脉冲表示,因此计数功能的实质就是对外来脉冲进行计数。
定时功能2.
定时功能也是通过计数器的计数来实现的。
不过此时的计数脉冲也就是每个即每个机器周期产生一个计数脉冲。
来自单片机的内部,个振荡脉冲周期,。
由于一个机器周期等于12机器周期计数器加1。
1/12因此计数频率为振荡频率的,以及TLTH和/定时器计数器提供给用户使用的有:
八位计数器有关的控制位。
这些内容只能以软件方法使用。
/定时器计数器的四种工作方式MCS-513、定时工作方式1.0
位和全部8130是位计数结构的工作方式,其计数器由TH方式0进位,而全部位计数溢出时,向TH位构成。
当TL的低5TL的低5000TF进位。
13位计数溢出时,则向计数溢出标志位00下,当为计数工作方式时,计数值的范围是:
在方式13
(2)81921~
当为定时工作方式时,定时时间的计算公式为:
1313-计数初值)×机器(22-计数初值)×晶振周期×12或(周期其时间单位与晶振周期或机器周期相同()。
s12.定时工作方式TLTH全部8位和16方式1是位计数结构的工作方式,计数器由00全部8位构成。
当为计数工作方式时,计数值的范围是:
16)1~65536(2当为定时工作方式时,定时时间计算公式为:
16(212-计数初值)×晶振周期×162-计数初值)×机器周期或(3.定时工作方式216是自动重新加载工作方式。
在这种工作方式下,把工作方式2作预置寄存器,初始位计数器分为两部分,即以TL作计数器,以TH不是像前两种和化时把计数初值分别装入TLTH中。
当计数溢出后,
以硬件方法自动TH工作方式那样通过软件方法,而是由预置寄存器重新加载。
变软件加载为硬件加载。
给计数器TL计数溢出时,当TLTL和TH中。
初始化时,8位计数初值同时装入000,TL,同时把保存在预置寄存器TFTH中的计数初值自动加载置位000重新计数。
如此重复不止。
这不但省去了用户程序中的重装TL然后0位计数结8而且也有利于提高定时精度。
但这种工作方式下是指令,255。
构,计数值有限,最大只能到这种自动重新加载工作方式非常适用于循环定时或循环计数应此外还可以作串行数据通信的波用,例如用于产生固定脉宽的脉冲,特率发送器使用。
4、程序模块
此部分主要介绍定时模块,和显示模块。
定时部分采用经典的定时器定时。
它实现了数字钟的主要部分,和秒表的主要部分,以及产生报时信号,定时设置。
显示模块是实现数字钟的又一重要部分,其模块的的独立程度直接影响到数字钟的可视化程度。
在此部分的设计中,设置专用显示数据缓冲,与分,时及其他数据缓冲区数据区别,在其中存放的是显示段码,而其他缓冲区存放的是时间数据。
在显示时,首先将时间十进制数据转化为显示段码,然后送往数码管显示。
显示段码采用动态扫描的方式。
在要求改变显示数据的类别时,只需将指向数据缓冲区的指针指向的十进制数据缓冲区即可。
数据调整:
数据调整有多种方式。
一,可以直接进入相关状态进行有关操作,二,将调整分两步,先进入状态,然后执行操作,这两
步分别由两个键控制。
方式一,比较直接,设计思想也比较简单,但如果用比较少的键,是,这种方式存在操作时间和控制键数目的矛盾。
这样会影响到显示那么可能会在进入状态后处于数据调整等待状态,可以解决此问题)。
(显示部分可以采用8279芯片来控制,的扫描速度当然在这种方式下,还可以使用多个状态键,每个状态键,完成一个对应数据的调整。
如果采用二的方式,就不会出现这种情况。
定时准确性的讨论:
程序中定时器,一直处于运行状态,也就是在理想状秒执行一次,说定时器是理想运作的,其中断程序每隔0.1态下,定时器定时是没有系统误差的,但由于定时器中断溢出后,定开始计数,直到被重新置数,才开始正确定时,这样中断溢0时器从其间消耗的时间就造成了定时器出到中断响应到定时器被重新置数,在中断程序的一开始定时的误差。
如果在前述定时器不关的情况下,—秒,误差7就给定时器置数,此时误差最小,误差大约为:
每0.1秒时的情况,由0.112个机器周期。
当然这是在定时器定时刚好为如果数字钟设计为查询的方式或是在中断的方式下将定时以上分析,个机可以适当的扣除9我们在定时值设置时,器中断设置为最高级,没有将定时器中断设置为但如果在中断的情况下,器周期的时间值。
最高级,那就要视中断程序的大小,在定时值设置时,扣除相应的时间值。
软件消抖:
消抖可以采用硬件(施密特触发器)的方式,也可以采用软件的方式。
在此只讨论软件方式。
软件消抖有定时器定时,和定时器定时消抖可以不影响显示模块利用延时子程序两种方式。
一,
扫描速度,其实现方法是:
设置标志位,在定时器中断中将其置位,然后在程序中查询。
将其中断优先级设置为低于时钟定时中断,那么它就可以完全不影响时钟定时。
二,在采用延时子程序时,如果显示模块的扫描速度本来就不是很快,此时可能会影响到显示的效果,一般情况下,每秒的扫描次数不应小于50次,否则,数码的显示会出现闪烁的情况。
因此,延时子程序的延时时间应该小于20毫秒,如果采用定时器定时的方式,延时时间不影响时钟。
5、KeilC51软件-新建工程
对于单片机程序来说,每个功能程序,都必须要有一个配套的工程(Project),即使是简单的功能程序也不例外,因此我们首先要新建一个工程,打开我们的Keil软件后,点击:
Project-->New
uVisionProject...然后会出现一个新建工程的界面
.uv2文件,shuzizhong在任意文件夹中保存“”软件会自动添加扩展名
保存之后会弹出一个对话框,这个对话框让我们选择单片机型号,我们选择AT89C51
,新File-->New工程有了之后,我们要建立编写代码的文件,点击建一个文件,也就是我们编写程序的平台。
的快捷键,可或者直接点击那个然后点File-->SaveSave
这个地方必保存时我们把它命名为shuzishizhong.c,以保存文件,.c须加上,因为如果写汇编语言,这个地方的扩展名是.asm
现在我们就可以在我们建立好的文件中输入我们的程序代码了,在编写之前还有个工作要做。
我们每做一个功能程序,必须要新建一个工程,一个工程代表了单片机要实现的一个功能。
但是一个工程,有时候我们可以把我们的程序分多个文件写,所以每写一个文件,我
们都要添加到我们所建立的工程中去,鼠标右键点SourceGroup
1,点AddFilestoGroup‘SourceGroup1'...
,Addshuzishizhong.c选中它,然后点在弹出的对话框中,单击都可以将文件加入到这个工程下,或者直接双击shuzishizhong.c
SourceGroup这个时候大家会看到在Close,关闭添加。
然后单击shuzishizhong.c1下边又多了一个文件。
然后就可以编写程序了,下面是编写界面的介绍:
6、程序流程图
time1
重设定时开100声明变secon加初始设置中59
大于循环停滞加一minute等待按键按下显示时间59
大于加一hourhou=hour$
7HEX、程序编译并生成文件
双击错误提示则会自若有错误提示,如上图所示为编译成功的提示,动跳转到错误代码行,方便进行修改。
调试仿真第四章
1、软件介绍工EDA公司的Proteus软件是来自英国Labcenterelectronics
软件有十多年的历史,在全球广泛使用,除了其具Proteus具软件,自动或人工布线及电路仿真工具一样的原理布图、EDAPCB有和其它的功能外,其革命性的功能是,他的电路仿真是互动的,针对微处理并实现软件还可以直接在基于原理图的虚拟原型上编程,器的应用,还能看到运行后输入输出的效如有显示及输出,源码级的实时调试,果,配合系统配置的虚拟仪器如示波器、逻辑分析仪等2、加载程序
HEX点击要加载的文件
3、仿真运行
并能直接按钮,仿真运行开始。
点击左下角
观察整个电路的运行输出结果。
第五章总结通过这次的设计使我认识到我对单片机编程方面的知识知道的太有很多我们需要掌握少了,对于书本上的很多知识还不能灵活运用,我会在以后的学习生活中弥补我所缺少的知的知识在等着我去学习,那就是如何从理本次的设计使我从中学到了一些很重要的东西,识。
论到实践的转化。
同时在大学的课堂上学习的只是在给我们灌输专业知识,而我们此次的电子时钟设计给我奠定应该把所学的用到我们现实生活中去,让自我会在以后的工作生活中不断的磨练自己,了一个实践的基础,己更好的立足于社会。
附件:
程序代码
#include
unsignedcharled[12]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0p
unsignedcharb[8]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};//扫描
unsignedchark=0;unsignedinttemp;//记录毫秒为秒的变量是模式,更新时间的种模式加上正常模式S_flag闪烁标志unsignedcharM,S_flag;//MsbitK1=P3^0;
sbitK2=P3^1;
sbitK3=P3^2;
sbitBEEP=P3^3;
voiddelay(unsignedn)//0.2毫秒p{intx,y;for(x=0;x M=0;S_flag=0;//闪烁标志位TMOD=0x10;//定时器以方式定时TH1=0xfc;TL1=0x18;EA=1;//打开总中断//允许定时器中断ET1=1; )//开启定时器(开始定时计数TR1=1; }voiddisplay_led(){ P1=led[11];}//定时器中断函数voidtime1()interrupt3 { ms //TH1=0xfc;定时TL1=0x18;temp++;//配合定时器定时sif(temp==1000) {temp=0;second++; }if(second==59) {second=0; if(minute<59) minute++; else{minute=0; hour++;hour%=24; } }if(hour1==hour&&minute1==minute&&second<10)//闹钟时间到 { BEEP=! BEEP; } if(temp%0==0)//每ms S_flag=! S_flag;//闪烁标志位取反 if(k==8)k=0;P1=a[k]; P2=b[k++]; delay (1); P2=0xff; } voiddisplay() { switch(M) { case0: { a[0]=led[hour/10]; a[1]=led[hour_x0010_]; a[2]=led[10]; a[3]=led[minute/10]; a[4]=led[minute_x0010_]; a[5]=led[10]; a[6]=led[second/10]; a[7]=led[second_x0010_]; }break; case1: { if(S_flag==1) { a[0]=led[hour/10]; a[1]=led[hour_x0010_]; } else{ a[0]=led[11]; a[1]=led[11]; } a[2]=led[10];a[3]=led[minute/10];a[4]=led[minute_x0010_];a[5]=led[10];a[6]=led[second/10];a[7]=led[second_x0010_]; }break; case2: { a[0]=led[hour/10]; a[1]=led[hour_x0010_];a[2]=led[10]; if(S_flag==1) {a[3]=led[minute/10];a[4]=led[minute_x0010_]; }else{ a[3]=led[11]; a[4]=led[11];} a[5]=led[10]; a[6]=led[second/10]; a[7]=led[second_x0010_]; }break; case3: { if(S_flag==1){ a[0]=led[hour1/10]; a[1]=led[hour1_x0010_];}else{ a[0]=led[11];a[1]=led[11]; }a[2]=led[10]; a[3]=led[minute1/10]; a[4]=led[minute1_x0010_]; a[5]=led[10]; a[6]=led[11]; a[7]=led[11]; }break; case4: { a[0]=led[hour1/10]; a[1]=led[hour1_x0010_]; a[2]=led[10]; if(S_flag==1){a[3]=led[minute1/10]; a[4]=led[minute1_x0010_]; } else {a[3]=led[11]; a[4]=led[11];} a[5]=led[10];a[6]=led[11]; a[7]=led[11];}}} voidkey_prc() {if(K1==0){ delay(10);延时去抖// if(K1==0)进行模式切换K1//按 {M++;if(M==5) M=0; }while(! K1);//等待按键释放} if(M! =0) { switch(M) { case1: //模式--调时 { if(K2==0) { delay(10);//延时去抖 if(K2==0)//加键按下 { if(hour<23)hour++; elsehour=0; } 等待按键释放while(! K2);//}if(K3==0) { delay(10); if(K3==0) { if(hour>0)hour--; elsehour=23; } while(! K3); } }break; case2: 调分模式//-- { if(K2==0) { delay(10); if(K2==0) { if(minute<59)minute++; elseminute=0; } while(! K2); } if(K3==0) {delay(10); if(K3==0) { if(minute>0)minute--;elseminute=59; } while(! K3); } }break; case3: //模式--闹钟调时 { if(K2==0) {delay(10); if(K2==0) { if(hour1<23)hour1++; elsehour1=0; }while(! K2); } if(K3==0) { delay(10); if(K3==0) {if(hour1>0) hour1--; elsehour1=23; } while(! K3); } }break; case4: //模式--闹钟调分{ if(K2==0) { delay(10); if(K2==0) { if(minute1<59) minute1++; elseminute1=0; } while(! K2); } if(K3==0) { 延时去抖//delay(10);
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- AT89C51电子时钟课程设计8位 C编 AT89C51 电子 时钟 课程设计