单片机MCS51数字时钟.docx

上传人:b****1 文档编号:11168731 上传时间:2023-05-29 格式:DOCX 页数:17 大小:53.69KB
下载 相关 举报
单片机MCS51数字时钟.docx_第1页
第1页 / 共17页
单片机MCS51数字时钟.docx_第2页
第2页 / 共17页
单片机MCS51数字时钟.docx_第3页
第3页 / 共17页
单片机MCS51数字时钟.docx_第4页
第4页 / 共17页
单片机MCS51数字时钟.docx_第5页
第5页 / 共17页
单片机MCS51数字时钟.docx_第6页
第6页 / 共17页
单片机MCS51数字时钟.docx_第7页
第7页 / 共17页
单片机MCS51数字时钟.docx_第8页
第8页 / 共17页
单片机MCS51数字时钟.docx_第9页
第9页 / 共17页
单片机MCS51数字时钟.docx_第10页
第10页 / 共17页
单片机MCS51数字时钟.docx_第11页
第11页 / 共17页
单片机MCS51数字时钟.docx_第12页
第12页 / 共17页
单片机MCS51数字时钟.docx_第13页
第13页 / 共17页
单片机MCS51数字时钟.docx_第14页
第14页 / 共17页
单片机MCS51数字时钟.docx_第15页
第15页 / 共17页
单片机MCS51数字时钟.docx_第16页
第16页 / 共17页
单片机MCS51数字时钟.docx_第17页
第17页 / 共17页
亲,该文档总共17页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

单片机MCS51数字时钟.docx

《单片机MCS51数字时钟.docx》由会员分享,可在线阅读,更多相关《单片机MCS51数字时钟.docx(17页珍藏版)》请在冰点文库上搜索。

单片机MCS51数字时钟.docx

单片机MCS51数字时钟

 

单片机MCS-51数字时钟

课程设计

 

系别:

专业:

班级:

姓名:

学号:

日期:

一、课程设计的目的

二、设计内容

三、代码说明

四、组件说明与图示

五、MCS-51单片机系统简介

六、MCS-51单片机内部定时器/计数器中断系统简介

七、键盘和LED数码管显示器简介

八、总结

一、课程设计的目的

本课程设计是自动化专业、电子信息技术专业学生在学完单片机原理及课程之后必修课程,它的教学目的和任务是综合利用所学单片机知识完成一个单片机应用系统设计并在实验室实现,从而加深对单片机软硬知识的理解,获得初步的应用经验,为走出校门从事单片机应用的相关工作打下基础。

二、设计内容

利用单片机的定时/计数器,中断系统,以及阵列键盘和LED显示器进行设计。

在数码管显示器上实现电子时钟,并且能进行设置时间和暂停、启动控制。

用定时/计数器T0,工作于定时,采用方式1,对12MHZ的系统时钟进行定时计数,初值设为C34F。

形成定时时间为50ms。

用片内RAM的7BH单元对50ms计数,计20次产生秒计数器7BH单元加1,秒计数器加到60则分计数器79H单元加1,分计数器加到60则时计数器7AH单元加1,时计数器加到24则时计数器清0。

然后把秒、分、时计数器分成十位和个位放到8个数码管的显示缓冲区,通过数码管显示出来。

显示格式为小时十位、小时个位---分十位、分个位---秒十位、秒个位。

在处理过程中加上了按键判断程序,能对按键处理。

三、代码说明

;主程序

START:

MOVR0,#70H

MOVR7,#04H

INIT:

MOV@R0,#78H

INCR0

DJNZR7,INIT;对78~7B初始化00

MOV72H,#10

MOV75H,#10;72H、75H=#10,这个是时钟间隔的段选码

MOVTMOD,#01H

MOVTL0,#0B0H

MOVTH0,#03CH;定时T0初始化

SETBEA

SETBET0;开启定时中断

SETBTR0;定时开始

START1:

LCALLSCAN;输出时间(动态显示)

LCALLKEYSCAN;检测按键

SJMPSTART1

;延时1MS子程序

DL1MS:

MOVR6,#14H

DL1:

MOVR7,#19H

DL2:

DJNZR7,DL2

DJNZR6,DL1

RET

;延时20MS子程序

DL20MS:

ACALLSCAN

ACALLSCAN;实际上包括了对数码管的3次动态显示

ACALLSCAN

RET

;数码管显示程序

SCAN:

MOVA,78H;处理时间缓冲数据:

将60进制化为两个十进制(开始)

MOVB,#0AH

DIVAB;处理秒

MOV71H,A

MOV70H,B

MOVA,79H

MOVB,#0AH

DIVAB;处理分钟

MOV74H,A

MOV73H,B

MOVA,7AH

MOVB,#0AH

DIVAB;处理时钟

MOV77H,A

MOV76H,B

MOVR1,#70H;R1是时间缓冲区首地址

MOVR5,#80H;R5是位选码,实现数码动态显示

MOVR3,#08H

SCAN1:

MOVA,R5

MOVP2,A;位选码,R5实现数码动态显示

MOVA,@R1;从时间缓冲区提取一位数

MOVDPTR,#TAB;码表首地址TAB

MOVCA,@A+DPTR;将该位数译码输出

MOVP0,A;;将该位数译码输出并显示

MOVA,R5

LCALLDL1MS;每位输出后延迟1ms,然后进行下一位的输出显示

INCR1;R1指向下一位时间缓冲区地址

MOVA,R5

RrA

MOVR5,A;R5会选择下一位数码管

DJNZR3,SCAN1

MOVP2,#0fH;

MOVP0,#0c0H;这两句是扫描程序SCAN没有执行时数字时钟的状态,当按键按下不放时,前4位会显示0,

RET

TAB:

DB0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H,0BFH

;"0~9","-"的共阳极字段码秒速五厘米

;定时器/计数器T0中断服务程序

INTT0:

PUSHACC

PUSHPSW;storethescene

CLRET0;停止定时时中断

CLRTR0;停止定时

MOVTL0,#0B0H

MOVTH0,#03CH

SETBTR0;restartTO

INC7BH;

MOVA,7BH

CJNEA,#14H,OUTT0;counttheTF0for20times

MOV7BH,#00

INC78H;increase1secondwhen(7BH)hascounted"TF0=1"for20times,thatis1Sintotal!

MOVA,78H

CJNEA,#3CH,OUTT0

MOV78H,#00

INC79H;increase1minutewhensecondisoverflow

MOVA,79H

CJNEA,#3CH,OUTT0

MOV79H,#00

INC7AH;increase1hourwhenminuteisoverflow

MOVA,7AH

CJNEA,#18H,OUTT0

MOV7AH,#00;thenextday

OUTT0:

SETBET0;中断服务结束,恢复定时中断0

poppsw

popacc;recoverythescene

RETI

;按键处理程序

KEYSCAN:

CLREA;屏蔽中断

JNBP1.0,KEYSCAN0

JNBP1.1,KEYSCAN1

JNBP1.2,KEYSCAN2

KEYOUT:

SETBEA;恢复中断

RET

;按键处理程序细节

KEYSCAN0:

LCALLDL20MS

JBP1.0,KEYOUT;持续按下20ms以上按键才有效,这20ms间实际上是对数码管作3次动态显示

WAIT0:

JNBP1.0,WAIT0

INC7CH;7C代表状态,其初值为0(调整小时),第一次按下变为1(暂停并调整小时),二次按下变为2(暂停并调整分钟),三次按下变回0(从暂停中恢复)

MOVA,7CH

CLRTR0;停止计时

CLRET0;停止计时中断

CJNEA,#03H,KEYOUT;当7C不为03时,停止计时

MOV7CH,#00;

SETBTR0;恢复计时

SETBET0;恢复计时中断

SJMPKEYOUT

KEYSCAN1:

LCALLDL20MS;持续按下20ms以上按键才有效

JBP1.1,KEYOUT

WAIT1:

JNBP1.1,WAIT1

MOVA,7CH;20ms后放下按键后

CJNEA,#02H,KSCAN11;increaseminutewhen"(7C)=2)",orhourotherwise

INC79H;increaseminute

MOVA,79H

CJNEA,#3CH,KEYOUT

MOV79H,#00

SJMPKEYOUT

KSCAN11:

INC7AH;increasehour

MOVA,7AH

CJNEA,#18H,KEYOUT

MOV7AH,#00

SJMPKEYOUT

KEYSCAN2:

LCALLDL20MS

JBP1.2,KEYOUT

WAIT2:

JNBP1.2,WAIT2;按下20ms以上按键才有效

MOVA,7CH

CJNEA,#02H,KSCAN21;increaseminutewhen"(7C)=2)",orhourotherwise

DEC79H;decreaseminute

MOVA,79H

CJNEA,#0FFH,KEYOUT

MOV79H,#3BH

SJMPKEYOUT;

KSCAN21:

DEC7AH;decreasehour

MOVA,7AH

CJNEA,#0FFH,KEYOUT

MOV7AH,#17H

SJMPKEYOUT

END

四、组件说明与图示

本设计主要组件为:

时钟振荡源、复位电路、数码管接口、按键电路

1、复位电路

说明:

当RST保持10ms以上的高电平时,单片机复位,但是内部RAM不会复位。

2、时钟振荡源

说明:

本设计使用内部时钟振荡电路,外接石英晶体和微调电容。

3、数码管接口

说明:

P0接数码管的段选口,P2接位选口。

数码管属共阴极,段选信号低电平有效。

 

4、按键电路

说明:

由于使用内部程序ROM,所以EA接高电平;

P1.0~P1.2接按键,低电平有效。

5、电子时钟效果图

五、MCS-51单片机系统简介

MCS-51单片机是美国INTE公司于1980年推出的产品,与MCS-48单片机相比,它的结构更先进,功能更强,在原来的基础上增加了更多的电路单元和指令,指令数达111条,MCS-51单片机可以算是相当成功的产品,一直到现在,MCS-51系列或其兼容的单片机仍是应用的主流产品,各高校及专业学校的培训教材仍与MCS-51单片机作为代表进行理论基础学习。

我们也以这一代表性的机型进行系统的讲解。

   MCS-51系列单片机主要包括8031、8051和8751等通用产品,其主要功能如下:

·8位CPU

   ·4kbytes程序存储器(ROM)

   ·128bytes的数据存储器(RAM)

   ·32条I/O口线

   ·111条指令,大部分为单字节指令

   ·21个专用寄存器

   ·2个可编程定时/计数器

   ·5个中断源,2个优先级

   ·一个全双工串行通信口

   ·外部数据存储器寻址空间为64kB

   ·外部程序存储器寻址空间为64kB

   ·逻辑操作位寻址功能

   ·双列直插40PinDIP封装

   ·单一+5V电源供电

MCS-51以其典型的结构和完善的总线专用寄存器的集中管理,众多的逻辑位操作功能及面向控制的丰富的指令系统,堪称为一代“名机”,为以后的其它单片机的发展奠定了基础。

正因为其优越的性能和完善的结构,导致后来的许多厂商多沿用或参考了其体系结构,有许多世界大的电气商丰富和发展了MCS-51单片机,象PHILIPS、Dallas、ATMEL等著名的半导体公司都推出了兼容MCS-51的单片机产品,就连我国的台湾WINBOND公司也发展了兼容C51(人们习惯将MCS-51简称C51,如果没有特别声明,二者同指MCS-51系列单片机)的单片机品种。

下表是80C51系列单片机的主要分类及功能特性:

系列   典型芯片I/O口定时/计数器中断源串行通信口片内RAM  片内ROM    说明80C31  4x8位  2x16位    5    1       128字节    无  

80C51  4x8位  2x16位    5    1       128字节   4kB掩膜ROM  

87C51  4x8位  2x16位    5    1        128字节  4kBEPROM  

89C51  4x8位  2x16位    5    1        128字节  4kBEEPROM  

80C32  4x8位  2x16位    6     1       256字节   无  

80C51  4x8位  2x16位    6     1       256字节   8kB掩膜ROM  

87C52  4x8位  2x16位    6     1       256字节   4kBEPROM  

89C52  4x8位  2x16位    6     1       256字节   4kBEEPROM  

8051是MCS-51系列单片机中的代表产品,它内部集成了功能强大的中央处理器,包含了硬件乘除法器、21个专用控制寄存器、4kB的程序存储器、128字节的数据存储器、4组8位的并行口、两个16位的可编程定时/计数器、一个全双工的串行口以及布尔处理器。

MCS-51具有比较大的寻址空间,地址线宽达16条,即外部数据存储器和程序存储器的寻址范围达216=64kB,这作为单片机控制来说已是比较大的,这同时具备对I/O口的访问能力。

此外,MCS-51采用模块化结构,可方便地增删一个模块就可引脚和指令兼容的新产品。

从而容易使产品形成系列化。

由于MCS-51集成了几乎完善的8位中央处理单元,处理功能强,中央处理单元中集成了方便灵活的专用寄存器,硬件的加、减、乘、除法器和布尔处理机及各种逻辑运算和转移指令,这给应用提供了极大的便利。

MCS-51的指令系统近乎完善,指令系统中包含了全面的数据传送指令、完善的算术和逻辑运算指令、方便的逻辑操作和控制指令、对于编程来说,是相当灵活和方便的。

   MCS-51单片机的工作频率为2-12MHz,当振荡频率为12MHz时,一个机器周期为1us,这个速度应该说是比较快的。

8051中集成了完善的各种中断源,用户可十分方便地控制和使用其功能,使得它的应用范围加大,可以说它可以满足绝大部分的应用场合。

MCS-51把微型计算机的主要部件都集成在一块心片上,使得数据传送距离大大缩短,可靠性更高,运行速度更块。

由于属于芯片化的微型计算机,各功能部件在芯片中的布局和结构达最优化,抗干扰能力加强,工作亦相对稳定。

因此,在工业测控系统中,使用单片机是最理想的选择。

单片机属于典型的嵌入式系统,所以它是低端控制系统最佳器件。

MCS-51的开发环境要求较低,软件资源十分丰富,介绍其功能特性书籍和开发软件随处可取,只需配备一台PC(个人电脑——对电脑的配置基本上无要求),一台仿真编程器即可实现产品开发,早期的开发软件多使用DOS版本,随着Windows视窗软件的普及,现在几乎都使用Windows版本,并且软件种类繁多,琳琅满目,在众多的单片机品种中,C51的环境资源是最丰富的,这给C51用户带来极大的便利。

六、MCS-51单片机内部定时器/计数器中断系统简介

(一)定时/计数器

1工作方式0

定时/计数器T0工作在方式0时,16位计数器只用了13位,即TH0的高8位和TL0的低5位,组成一个13位定时器/计数器。

1)、工作在定时方式

2)、工作在计数方式

2工作方式1

定时器T0工作方式1与工作方式0类同,差别在于其中的计数器的位数。

工作方式0以13位计数器参与计数,工作方式1则以16位计数器参与计数。

1)、工作在定时方式

2)、工作在计数方式

工作方式1是16位计数器。

这是工作方式1与工作方式0在计数方式时唯一差别。

3工作方式2

定时器T0在工作方式2时,16位的计数器分成了两个独立的8位计数器TH0和TL0。

1)、工作在定时方式

2)、工作在计数方式

工作方式2与工作方式0、方式1的差别,在于工作方式2是一个8位的计数器。

4工作方式3

工作方式3仅对定时器T0有效。

当定时器T0工作在方式3时,将16位的计数器分为两个独立的8位计数器TH0和TL0。

当定时器T0工作在方式3时,定时器T1只能工作在方式0~2,并且工作在不需要中断的场合。

(二)中断系统

什么是中断,我们从一个生活中的例子引入。

你正在家中看书,突然电话铃响了,你放下书本,去接电话,和来电话的人交谈,然后放下电话,回来继续看你的书。

这就是生活中的“中断”的现象,就是正常的工作过程被外部的事件打断了。

仔细研究一下生活中的中断,对于我们学习单片机的中断也很有好处。

第一、什么可以引起中断,生活中很多事件可以引起中断:

有人按了门铃了,电话铃响了,你的闹钟闹响了,你烧的水开了….等等诸如此类的事件,我们把可以引起中断的称之为中断源,单片机中也有一些可以引起中断的事件,8031中一共有5个:

两个外部中断,两个计数/定时器中断,一个串行口中断。

第二、中断的嵌套与优先级处理:

设想一下,我们正在看书,电话铃响了,同时又有人按了门铃,你该先做那样呢?

如果你正是在等一个很重要的电话,你一般不会去理会门铃的,而反之,你正在等一个重要的客人,则可能就不会去理会电话了。

如果不是这两者(即不等电话,也不是等人上门),你可能会按你通常的习惯去处理。

总之这里存在一个优先级的问题,单片机中也是如此,也有优先级的问题。

优先级的问题不仅仅发生在两个中断同时产生的情况,也发生在一个中断已产生,又有一个中断产生的情况,比如你正接电话,有人按门铃的情况,或你正开门与人交谈,又有电话响了情况。

考虑一下我们会怎么办吧。

第三、中断的响应过程:

当有事件产生,进入中断之前我们必须先记住现在看书的第几页了,或拿一个书签放在当前页的位置,然后去处理不同的事情(因为处理完了,我们还要回来继续看书):

电话铃响我们要到放电话的地方去,门铃响我们要到门那边去,也说是不同的中断,我们要在不同的地点处理,而这个地点通常还是固定的。

计算机中也是采用的这种方法,五个中断源,每个中断产生后都到一个固定的地方去找处理这个中断的程序,当然在去之前首先要保存下面将执行的指令的地址,以便处理完中断后回到原来的地方继续往下执行程序。

具体地说,中断响应可以分为以下几个步骤:

1、保护断点,即保存下一将要执行的指令的地址,就是把这个地址送入堆栈。

2、寻找中断入口,根据5个不同的中断源所产生的中断,查找5个不同的入口地址。

以上工作是由计算机自动完成的,与编程者无关。

在这5个入口地址处存放有中断处理程序(这是程序编写时放在那儿的,如果没把中断程序放在那儿,就错了,中断程序就不能被执行到)。

3、执行中断处理程序。

4、中断返回:

执行完中断指令后,就从中断处返回到主程序,继续执行。

七、键盘和LED数码管显示器简介

键盘是一组按键组合的开关的集合,平时按键开关处于断开状态,当按下时它才闭合。

当键位没按下时输出为高电平,键位按下时输出低电平。

通常一个单片机系统用到的键盘都包含很多键位,这些键位都通过IO接口进行连接,按下一个键位后通过键盘接口电路就得到该键位的编码。

通常有两种方法进行编码。

一是用连接键盘的IO线的二进制组合进行编码。

二是顺序排列编码。

此处是用的共阳极的LED数码管,共阳就是7段的显示字码共用一个电源的正。

原理示意图:

   

  

 从上图可以看出,要是数码管显示数字,有两个条件:

1、是要在VT端(3/8脚)加正电源;2、要使(a,b,c,d,e,f,g,dp)端接低电平或“0”电平。

这样才能显示的。

一般刚接触数码显示的网友搞不清字段和编码的关系,其实要看硬件的电路的组成的,本站的实验板上的数码显示是用P0口驱动的,原理图可以参阅实验板的网页,其计算的方法如下,供网友参考:

例:

如要显示“0”,则要 a,b,c,d,e,f六个字段亮就显示“0”了,而g和dp字段不亮;这样只要向P0口送出相应的代码即可,编码方法如下表:

程序使用时,只需将显示数字所对应的编码送P0口,然后打开相应的数码管显示位的电源控制即可显示相应的字符

 

八、总结

一、这个时钟实际上并不精确,主要有几下几点原因:

1、定时T0中断服务程序暂停了定时计数器,这造成了一定的延迟,延迟时间是定时T0中断服务程序运行的时间。

2、即使定时T0中断服务程序不暂停定时计数器,定时计数器重置命令也会造成延迟(为几个机器周期)

MOVTL0,#0B0H

MOVTH0,#03CH

解决方案:

设定T0的初值时,减去以上延迟就可以了

二、功能改进

本设计是按下一次按键达20ms就使时针或者分针加1/减1。

可以通过修改代码实现当按键1s以上时,使指针在1s以上时指针快速增加/减小。

;WAIT1:

JNBP1.1,WAIT1;去掉这句铵键等待,并增加以下代码

KSCAN11:

INC7AH;每次按键,时针自增一次

MOVA,7AH

CJNEA,#18H,delay_key

MOV7AH,#00

delay_key:

mov7dh,#50

delay_key_:

lcallDL20MS;延迟50*20ms=1s

dec7dh

mova,#0

cjnea,7dh,delay_key_

JBP1.1,KEYOUT;1S后判断按键是否还按下,否则快速增加时针

WAIT12:

INC7AH;1s后时针快速增加

MOVA,7AH

CJNEA,#18H,Kk2

MOV7AH,#00

kk2:

LCALLDL20MS;即时显示调整的结果,时针每60ms增加一次

LCALLDL20MS

LCALLDL20MS

JNBP1.1,WAIT12

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 工程科技 > 能源化工

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2