单片机.docx

上传人:b****3 文档编号:27347618 上传时间:2023-06-29 格式:DOCX 页数:20 大小:332.91KB
下载 相关 举报
单片机.docx_第1页
第1页 / 共20页
单片机.docx_第2页
第2页 / 共20页
单片机.docx_第3页
第3页 / 共20页
单片机.docx_第4页
第4页 / 共20页
单片机.docx_第5页
第5页 / 共20页
点击查看更多>>
下载资源
资源描述

单片机.docx

《单片机.docx》由会员分享,可在线阅读,更多相关《单片机.docx(20页珍藏版)》请在冰豆网上搜索。

单片机.docx

单片机

微型计算机技术专业方向课程设计报告

 

题目名称:

多功能数字钟

 

专业:

自动化班级:

07级2班

姓名:

李东学号:

200728335

 

学校:

青岛理工大学自动化学院

指导教师:

史贺男丁新平

2010年1月3日至10日

 

课程设计任务书

·课程名称:

微型计算机技术

·设计题目:

多功能数字钟

·系统硬件要求:

1配置单片机的外部程序ROM空间,容量为16K(使用27128芯片)。

2使用8031内部时钟信号为系统提供计时信号。

3配置6位LED数码管显示时间,设置6位操作按键。

·系统功能要求:

1在6位LED数码显示器上显示:

时、分、秒(各2位)

2按键功能自定义,实现按键调整时间功能。

3具有闹钟功能(选做)

4具有秒表功能(选做)

·其他要求:

1每位同学独立完成本设计

2依据题目内容要求,提出系统设计方案

3设计系统电路原理图

4调试系统硬件电路、功能程序

5编制课程设计报告书并装订成册,报告书内容包括(按顺序):

1报告书封面

2课程设计报告书

3评语页(空白)

4系统设计方案的提出、分析

5系统中典型电路的分析

6系统软件结构框图

7系统电路原理图

8源程序

成绩

评语

1系统硬件设计

1.151单片机与外部存储器的连接

几个重要概念及地址译码方式

①分清地址线:

片内地址线、片选地址线;

②片内地址线的接法:

直接与系统的地址线相连。

③片选地址线的接法:

可用全译码方式、部分译码方式、线选法方式连接。

④用地址译码电路产生芯片的选通信号。

通常这种选通信号采用集成译码电路产生。

 

1.28031通过8155对LED的接口(包括按键)

8031对8155的连接(图)

8155含有:

①256字节的RAM;

②一个14位定时/计数器

③三个并行I/O口:

A、B、C口。

其中A、B口为8位,C口为6位。

A、B口可作为基本I/O口,也可作为选通I/O口;C口除可作为基本I/O口外,还可用作A口、B口的应答控制联络信号线;

④一个控制寄存器组,用来存放控制命令字;

 

8155引脚说明:

①AD0~AD7:

地址/数据复用线。

可与P0口直接相连。

②CE:

片选,输入,低电平有效。

③IO/M:

RAM和I/O口选择线。

当IO/M=1时,选中I/O口;

当IO/M=0时,选中RAM。

④ALE:

地址锁存信号。

⑤RD:

读选通,输入,低电平有效。

⑥WR:

写选通,输入,低电平有效。

⑦TIMERIN:

定时器输入,是片内定时器的脉冲信号输入端。

⑧TIMEROUT:

定时器输出,计时结束时可以输出矩形波或脉冲波。

⑨PA0~PA7、PB0~PB7:

A/B口通用的输入/输出线。

由编程来决定是输入还是输出。

⑩PC0~PC5:

C口的输入/输出或控制信号线。

8155对LED的连接(图)

显示要点

①要对8155初始化:

A口、C口均设为输出

②要设置一个显示缓冲区:

DISBUF存放要显示的数,利用内部RAM(70H~73H)

③在程序中建立一个段码(字形码)表:

TAB

④利用查表指令:

MOVCA,@A+DPTR取出段码

⑤轮流扫描显示(位码左移,指向下一位LED)

数码管由7个发光二极管组成,行成一个日字形,它门可以共阴极,也可以共阳极.通过解码电路得到的数码接通相应的发光二极而形成相应的字,这就是它的工作原理.基本的半导体数码管是由7个条状的发光二极管(LED)按图1所示排列而成的,可实现数字"0~9"及少量字符的显示。

另外为了显示小数点,增加了1个点状的发光二极管,因此数码管就由8个LED组成,我们分别把这些发光二极管命名为"a,b,c,d,e,f,g,dp",

数码管的分类:

数码管按各发光二极管电极的连接方式分为共阳数码管和共阴数码管两种。

共阴数码管是指将所有发光二极管的阴极接到一起形成公共阴极(COM)的数码管。

共阴数码管在应用时应将公共极COM接到地线GND上,当某一字段发光二极管的阳极为高电平时,相应字段就点亮。

当某一字段的阳极为低电平时,相应字段就不亮。

共阴数码管内部连接。

共阳数码管是指将所有发光二极管的阳极接到一起形成公共阳极(COM)的数码管。

共阳数码管在应用时应将公共极COM接到+5V,当某一字段发光二极管的阴极为低电平时,相应字段就点亮。

当某一字段的阴极为高电平时,相应字段就不亮。

共阳数码管内部连接。

8031通过8155对LED(图)

 

2系统软件

2.1按键功能

S1键:

秒设置键

S2键:

时设置键

S4键:

时间/闹钟/秒表键

S5键:

分设置键

2.2软件流程图

2.3软件分析

2.3.1中断服务程序

时间的运行依靠定时中断子程序对时钟单元数值进位调整来实现的。

计数器T0打开后,进入计时,满100毫秒后,重装定时。

中断一次,满一秒后秒进位,满60秒后即为1分钟,分钟单元进位,60分到了后,时单元进位,24小时满后,天单元进位。

这样然后根据进率,得到年、月、日、时、分、秒存储单元的值,并经译码后,通过扫描程序送LED中显示出来,实现时钟计时功能。

累加是用指令INC来实现的。

进入中断服务程序以后,执行PUSHPSW和PUSHA将程序状态寄存器PSW的内容和累加器A中的数据保存起来,这便是所谓的.保护现场..以保护现场和恢复现场时存取关键数据的存储区叫做堆栈。

在软件的控制之下,堆栈可在片内RAM中的任一区间设定,而堆栈的数据存取与一般的RAM存取又有区别,对它的操作,要遵循.后进先出.的原则。

2.3.2定时器/计数器

在实际的控制系统中常要求有外部实时时钟,以实现定时或延时控制;还要求有外部计数器,以实现对外界事件进行计数。

不管是定时还是计数工作方式,定时器T0或T1在对内部时钟或对外部事件计数时,不占用CPU事件,除非定时器/计数器溢出,才可能中断CPU的当前操作。

由此可见,定时器是单片机中效率高而且工作灵活的部件。

在作定时器使用时,输入的时钟脉冲是由晶体振荡器的输出

经12分频后得到的。

当它用作对外部事件计数时,接相应的外部输入引脚T0(P3.4)或T1(P3.5)。

51对内部定时/计数器的控制

在51中,与定时/计数器T0、T1工作方式有关的寄存器为TMOD和TCON。

其中:

TMOD控制定时/计数器T0、T1的工作方式,而TCON控制定时/计数器的启动方式和禁止/允许定时中断。

定时器共有两个控制字,由软件写入TMOD和TCON两个8位寄存器,用来设置T0或T1的操作模式和控制功能。

 

3设计体会

数字时钟是采用数字电路实现对时、分、秒进行数字显示的计时装置,广泛用于个人家庭、车站办公室等公共场所,成为人们日常生活中不可缺少的必需品。

通过这次的实习,了解了电子时钟的电路结构图,更好的熟悉了电子时钟的工作过程和原理。

再设计的过程中,在硬件的选型方面,即选电容、电阻等时遇到了一些问题,经过查书和上网查资料最终解决了问题。

Protel软件是上学期实习时学习如何使用的,经过了一学期的时间,对于软件的部分功能忘记了,在经过了熟悉之后,终于成功的设计出来了。

最困难的当属程序的设计了,从书本上和网上查找了大量资料,总算将程序写了出来。

经过实习之后,发现自己在单片机的各个方面还有许多不足,同时也学习了大量知识和收获了宝贵的经验。

 

;*****led显示单片机定时闹铃程序*************************************

;变量地址分配

;************************************

HourEQU3AH;小时计数器的地址

MinuteEQU3BH;分钟计数器的地址

SecondEQU3CH;秒计数器的地址

P1ValEQU3DH;数码管位驱动值的地址

ClockModeBIT20H.0;模式(正常走时/闹时)设置寄存器地址,

值为0时正常走时,为1时闹时设定

AlarmOnOffBIT20H.1;闹钟开启/关闭标志,为0关闭,为1开启

AlarmTimeOnBIT20H.2;此位为1时表示闹时时间到

DispHourEQU21H;小时显示寄存器的地址

DispMinuteEQU22H;分钟显示寄存器的地址

DispSecondEQU23H;秒显示寄存器的地址

AlarmHourEQU2EH;闹时小时计数器的地址

AlarmMinuteEQU2FH;闹时分钟计数器的地址

S4BITP3.2;闹钟设置键

S2BITP3.3;小时设置键

S5BITP3.5;分钟设置键

;***********

;程序开始

;***********

ORG0000H

AJMPMain

ORG0BH

AJMPTimeInt

ORG0020H

Main:

MOVSP,#70H

MOV39H,#14H

MOVHour,#12

MOVMinute,#00

MOVSecond,#00

MOVAlarmHour,#06

MOVAlarmMinute,#00

CLRClockMode

CLRAlarmTimeOn

SETBp1.7

MOVTMOD,#00000001B

MOVTH0,#03CH

MOVTL0,#0B0H

MOVIE,#82H

SETBTR0

L1:

JBK1,CheckMinuteKey

LCALLDelay

JBK1,CheckMinuteKey

SETBClockMode

LCALLAlarmSet

CheckMinuteKey:

JBK3,CheckHourKey

MOVA,Minute

ADDA,#1

MOVMinute,A;

CJNEA,#60,NotOver1

MOVMinute,#0

NotOver1:

JNBK3,$

CheckHourKey:

JBK2,CheckAlarm

MOVA,Hour

ADDA,#1

MOVHour,A

CJNEA,#24,NotOver2

MOVHour,#0

NotOver2:

JNBK2,$

CheckAlarm:

;

JNBAlarmTimeOn,ToReturn

LCALLLOOP

ToReturn:

AJMPL1

;***************************

;定时器Timer0中断服务程序

;***************************

TimeInt:

MOVTH0,#03CH

MOVTL0,#0B0H

PUSHACC

PUSHPSW

SETBRS0

CLRRS1

DJNZ39H,NotoneSecond

MOV39H,#14H

LCALLClock

LCALLConvertoBuffer

NotoneSecond:

LCALLScanDisplay

POPPSW

POPACC

RETI

ScanDisplay:

MOVR1,#30H

MOVR4,#11111110B

MOVA,R4

PLAY:

MOVP2,A

MOVA,@R1

MOVDPTR,#TAB

MOVCA,@A+DPTR

MOVP0,A

LCALLDelay

INCR1

MOVA,R4

RLA

JNBACC.6,LD1

MOVR4,A

AJMPPLAY

LD1:

RET

TAB:

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

Clock:

MOVA,Second

ADDA,#1

MOVSecond,A

CJNEA,#3CH,NotOverFlow

MOVSecond,#0

MOVA,Minute

ADDA,#1

MOVMinute,A

CJNEA,#3CH,NotOverFlow

MOVMinute,#0

MOVA,Hour

ADDA,#1

MOVHour,A

CJNEA,#18H,NotOverFlow

MOVHour,#0

NotOverFlow:

JNBAlarmOnOff,NotAlarm

MOVA,Minute

CJNEA,AlarmMinute,NotAlarm

MOVA,Hour

CJNEA,AlarmHour,NotAlarm

SETBAlarmTimeOn

NotAlarm:

RET

ConvertoBuffer:

MOVR1,#30H

JBClockMode,DispAlarmSet

MOVA,Second;

MOVDispSecond,A;

MOVA,Minute;

MOVDispminute,A;

MOVA,Hour;

MOVDispHour,A

AJMPConvert

DispAlarmSet:

JBAlarmOnOff,AlarmOn

MOVDispSecond,#00H

AJMPNext

AlarmOn:

MOVDispSecond,#11

Next:

MOVA,AlarmMinute

MOVDispminute,A

MOVA,AlarmHour

MOVDispHour,A

Convert:

MOVA,DispSecond

MOVB,#10

DIVAB

MOV@R1,B

INCR1

MOV@R1,A

INCR1

MOVA,DispMinute

MOVB,#10

DIVAB

MOV@R1,B

INCR1

MOV@R1,A

INCR1

MOVA,DispHour

MOVB,#10

DIVAB

MOV@R1,B

INCR1

MOV@R1,A

RET

;************************************

;闹时设置子程序

;************************************

AlarmSet:

JNBK1,$

LCALLDelay

CheckArmMinuteKey:

JBK3,CheckArmHourKey

CL1:

SETBAlarmOnOff

MOVA,AlarmMinute

ADDA,#1

MOVAlarmMinute,A

CJNEA,#60,ArmNotOver1

MOVAlarmMinute,#0

ArmNotOver1:

JNBK3,$

CheckArmHourKey:

JBK2,AlarmSetEnd

SETBAlarmOnOff

MOVA,AlarmHour

ADDA,#1

MOVAlarmHour,A

CJNEA,#24,ArmNotOver2

MOVAlarmHour,#0

ArmNotOver2:

JNBK2,$

JBK3,AlarmSetEnd

ACALLCL1

AlarmSetEnd:

JBK1,AlarmSet

JNBK1,$

CLRClockMode

RET

;************************************

;闹时服务子程序

;************************************

LOOP:

CLRP1.7

ACALLDelay1

SETBP1.7

JBK1,LOOP

JNBK1,$

CLRAlarmOnOff

CLRAlarmTimeOn

AlarmReturn:

RET

;************************************

;延时子程序

;************************************

DELAY1:

MOVR3,#15

LOOP1:

MOVR5,#90

NOP

LOOP2:

DJNZR5,LOOP2

DJNZR3,LOOP1

RET

Delay:

MOVR6,#05H

Del:

MOVR7,#08Fh

DJNZR7,$

DJNZR6,Del

RET

END

这个程序到这里就完毕了,再来一个简单一点的单片机定时闹铃程序,不过不带led显示,定时1秒,要其他时间自己修改R0和R1的就可以了。

ORG0000H

;LJMPMAIN

;ORG0030H

;MAIN:

MOVSP,#60H

MOVTMOD,#02H

MOVTL0,#06H

MOVTH0,#06H

MOVR0,#100

MOVR1,#20

SETBTR0

WAIT:

JNBTF0,$

CLRTF0

DJNZR1,WAIT

MOVR1,#20

DJNZR0,WAIT

MOVR0,#100

CPLP1.0

AJMPWAIT

END

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

当前位置:首页 > 高等教育 > 理学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1