单片机综合设计说明.docx

上传人:b****5 文档编号:28793057 上传时间:2023-07-19 格式:DOCX 页数:41 大小:164.05KB
下载 相关 举报
单片机综合设计说明.docx_第1页
第1页 / 共41页
单片机综合设计说明.docx_第2页
第2页 / 共41页
单片机综合设计说明.docx_第3页
第3页 / 共41页
单片机综合设计说明.docx_第4页
第4页 / 共41页
单片机综合设计说明.docx_第5页
第5页 / 共41页
点击查看更多>>
下载资源
资源描述

单片机综合设计说明.docx

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

单片机综合设计说明.docx

单片机综合设计说明

大连理工大学本科设计报告

 

题目:

基于7290的LED时钟系统设计

 

课程名称:

单片机综合设计

学院(系):

电子信息与电气工程学部

专业:

电子信息工程

班级电子0804

学号:

200801204

学生姓名:

宋陆阳

成绩:

 

2011年05月23日

题目:

基于7290的LED时钟系统设计

1设计要求

1)显示功能:

a.用开关K1\K2切换用8位数码管显示当前“时-分-秒”;

b.用开关K1\K2切换用8位数码管显示当前“年-月-分”;

c.用开关K1\K2切换用8位数码管显示报警“日.时-分”。

2)修改功能:

a.能够通过按键操作修改当前时、分、秒并显示;

b.能够通过按键操作修改报警时、分并显示。

3)错误提示功能:

当输入修改值不符合时间合法数值时即时大于24,分大于60,秒大于60,提示"Error"错误,并返回正常走表。

4)报警功能:

a.整点报时功能:

59分55秒开始每秒响一下,且00秒频率提高;

b.定时报警:

当当前走表时间与所设置的报警时间一致时,驱动蜂鸣器产生“DO.RA.MI.FA.SO.LA.XI.DUO.”的铃音进行定时报警。

2设计分析及系统方案设计

1.主程序结构:

无限循环结构.

完成初始化功能:

进行7290复位,初始化PCF8563T的时间数据,对中断INT0,INT1进行工作方式设置,开中断,并进入无限循环且等待中断产生.

2.中断INT0:

顺序结构

每秒钟PCF8567的CLKOUT产生一个中断,从PCF8563T中读入数据进行调整拆分送入内存,时钟秒加一并显示,当K1=1,K2=1时,8位数码管显示当前“时-分-秒”;当K1=0时,8位数码管显示当前“年-月-分”;K1=1,K2=0时,8位数码管显示报警“日.时-分”.

判断当前时间是否为整点,若是,则从59分55秒开始每秒钟驱动蜂鸣器每秒响1000HZ铃音0.5秒,00秒频率提高;

判断当前时间是否与所设置报警时间相同,若满足要求,则驱动蜂鸣器产生一个“DO.RA.MI.FA.SO.LA.XI.DUO.”的铃声。

3.中断INT1:

顺序结构

当有按键操作时产生中断。

读取键值,当按链介于“A—E”选择需修改的内容:

A:

修改当前时间“时”;B:

修改当前时间“秒”;C:

修改当前时间“分”;D:

修改报警时间“时”;E:

修改报警时间“分”,然后等待输入2次按键"0-9"所修改数据,当输入数据部符合时间格式时,即时大于24,分大于60,秒大于60,显示提示“Error”并返回主程序,当输入数据符合正常时间格式时,回显,并退出中断;若输入其它键则无操作退出中断.

3系统电路图

4外围接口模块硬件电路功能描述

P3.2接PC8567的CLKOUT,每秒产生一次中断;

P3.3接ZLG7290B,当有按键操作时产生中断;

P1.3接蜂鸣器;

P1.2接开关K1,选择切换显示当前“时分秒”或“年月日”;

P1.4接开关K2,选择切换显示当前时间或报警“日时分”;

P1.7接ZLG7290复位键;

P1.0接I2C通讯线SDA;

P1.1接I2C通讯线SCK。

89C51:

89C51是一种带4K字节闪烁可编程可擦除只读存储器(FPEROM—FalshProgrammableandErasableReadOnlyMemory)的低电压,高性能CMOS8位微处理器,俗称单片机。

89C2051是一种带2K字节闪烁可编程可擦除只读存储器的单片机。

单片机的可擦除只读存储器可以反复擦除100次。

该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。

由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的89C51是一种高效微控制器,89C2051是它的一种精简版本。

89C单片机为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。

ZLG7290B:

ZLG7290B是广州周立功单片机发展有限公司自行设计的数码管动态显示驱动、建键盘扫描管理芯片。

能够驱动8位共阴极结构的LED数码管或64位独立的LED,同时还能扫描管理多达64个按键(S1-S56、F0-F7)的扫描识别。

其中8只健(F0-F7)可以作为功能键使用就像电脑键盘上的Ctrl、Shift、Alt键一样。

另外ZLG7290B内部还设置有连击计数器,能够使某些按键按下后不松手而连续有效。

接口采用I2C结构。

该芯片为工业级芯片,被广泛运用于仪器仪表等工业测量领域的电路设计中。

特点:

直接驱动1英寸以下的8位LED共阴极数码管或独立的64位LED;能够管理多达64只按键。

具有自动去抖,其中8只按键可直接作为功能键使用;段电流可达20mA。

位电流可达100mA以上;利用外接功率驱动器可以驱动一英寸以上的大型数码管;具有闪烁、段点亮、段熄灭、功能键、连击计数等功能;提供10种数字、21种字母的译码显示功能,也可以将字形码写入显示寄存器直接显示数据;系统仅使用键盘电路时,工作电流为1mA;与主控器之间采用I2C接口,仅需两条信号线;工作电压范围:

+3.3~+5.5V;工作温度范围:

-40℃~+85℃;封装:

DIP24(窄体)或SOP-24.

PCF8563T:

PCF8563T是低功耗CMOS实时时钟/日历芯片,它具有一个可编程的时钟输出,一个中断输出和掉电检测电路,与外部主控器之间通过I2C总线连接。

最大总线速度为400KHZ。

每次对其的读写操作内部的地址寄存器都会自动产生增量。

PCF8563T内部具有16个8位的寄存器;一个可自动增量的地址寄存器;一个32.768KHZ的振荡器(具有集成的补偿电容),一个用与为实时时钟RTC提供时钟源的分频器;一个可编程的时钟输出电路;一个定时器;一个报警器;一个掉电检测电路和一个400KHZ的I2C总线接口

5主程序中主要变量定义

变量名称

RAM单元/寄存器

功能

当前时间值

10H-1DH

程序初始时存储初始时间,

当运行后存当前时间

PC8563时间

20H-29H

存储从PC8563中读出当前的时间参数

当前时间1

30H-37H

存储处理无效位后当前日、月、年信息

当前时间2

38H-3FH

存储处理无效位后当前秒、时、分信息

报警时间

40H-47H

存储处理无效位后报警日、时、分信息

Data

50H-57H

存储“Error”的查表信息

数据个数

R7

I2C操作时读入数据个数

目标地址

R0

I2C操作时目标数据块首址

器件地址

R2

I2C操作时器件内部从地址

写地址

R3

I2C写操作时地址

读地址

R4

I2C读操作时地址

 

6系统软件中各个子程序的功能描述

子程序名称

入口参数

出口参数

功能描述

INT_RCT

走表中断子程序,并且

判断整点闹铃以及报警

INT_7290

按键中断子程序,

修改当前“时分秒”或者报警“时分”可以进行输入错误提示,回显等功能

ALARM

产生0.5秒1000HZ音频

ALARM1

R5、R6

产生指定频率音频0.5秒

CHAFEN

20H-2AH

30H-47H

对20H-2AH数据进行拆分

CF

A

R3、R4

把A拆分成独立BCD码

ADJUST

20H-26H

20H-26H

屏蔽PCF8563读出无关位

DIS_ERR

LED显示“Error”

RDKEY

A

读按键值

WR8563

写8563操作

DELAY

延时子程序

7主程序程序流程图

 

终端服务INT0闹铃1000HZ,0.5msALARM:

 

 

POP07H

POPPSW

 

8程序清单

SDABITP1.0;定义I2C信号引脚

SCLBITP1.1

WSLAEQU070H

RSLAEQU071H

DISDAEQU20H;源数据块首地址

DISCONEQU08H;写入数据个数

DATA_1EQU50H;变量区首地址

WSLA_8563EQU0A2H;PCF8563口地址

RSLA_8563EQU0A3H

WSLA_7290EQU70H;ZLG7290口地址

RSLA_7290EQU71H

ORG8000H

LJMP8100H

ORG8003H

LJMPINT_RCT

ORG8100H

ORG8013H

LJMPINT_7290

ORG8100H

START:

MOVSP,#60H

CLRP1.7;7290复位

LCALLDELAY

SETBP1.7

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

;设定PCF8563的时间和命令参数(参数和控制命令缓冲区10H-1DH)

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

MOV10H,#00H;启动控制字

MOV11H,#1FH;设置报警及定时器中断

MOV12H,#55H;秒单元

MOV13H,#37H;分单元

MOV14H,#10H;小时单元

MOV15H,#26H;日期单元

MOV16H,#03H;星期单元

MOV17H,#05H;月单元

MOV18H,#10H;年单元

MOV19H,#36H;设定分报警

MOV1AH,#10H;设定小时报警

MOV1BH,#26H;设定日报警

MOV1CH,#03H;设定星期报警

MOV1DH,#83H;设定CLKOUT的频率(1S)

MOVDATA_1,#13H;变量缓冲区(显示"Error")

MOVDATA_1+1,#13H;注意:

MOVDATA_1+2,#13H;变量取值范围0-F

MOVDATA_1+3,#11H

MOVDATA_1+4,#12H

MOVDATA_1+5,#11H

MOVDATA_1+6,#11H

MOVDATA_1+7,#10H

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

MOVR7,#0EH;写入参数个数(时间和控制字)

MOVR0,#10H;参数和控制命令缓冲区首地址

MOVR2,#00H;从器件内部从地址

MOVR3,#WSLA_8563;准备向PCF8563T写入数据串

LCALLWRNBYT;写入时间、控制命令到8563

SETBEA

MOVTCON,#00H

SETBEX0

CLRIT0

SETBEX1

SETBIT1

SJMP$;等待中断

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

;中断服务INT_RCT子程序

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

INT_RCT:

MOVR7,#0AH;读出数个数

MOVR0,#20H;目标数据块首址

MOVR2,#02H;从器件内部从地址

MOVR3,#WSLA_8563

MOVR4,#RSLA_8563;准备读PCF8563T的时间参数

LCALLRDADD;调读数据子程序,将读出的数据

;存放于单片机20-26H中

LCALLADJUST;调时间调整子程序

MOV12H,20H

MOV13H,21H

MOV14H,22H

MOV19H,27H

MOV1AH,28H

MOV1BH,29H

LCALLCHAFEN;调拆分子程序(包含查表)

MOVA,22H;判断是否到定时时间

CJNEA,28H,MMBUY

MOVA,21H

CJNEA,27H,MMBUY

MOVA,#00H

CJNEA,20H,MJ_1

MOVR5,#21H

MOVR6,#0F9H

CALLALARM1

MJ_1:

MOVA,#01H

CJNEA,20H,MJ_2

MOVR5,#0E0H

MOVR6,#0F9H

CALLALARM1

MJ_2:

MOVA,#02H

CJNEA,20H,MJ_3

MOVR5,#8BH

MOVR6,#0FAH

CALLALARM1

MJ_3:

MOVA,#03H

CJNEA,20H,MJ_4

MOVR5,#0D7H

MOVR6,#0FAH

CALLALARM1

MJ_4:

MOVA,#04H

CJNEA,20H,MJ_5

MOVR5,#67H

MOVR6,#0FBH

CALLALARM1

MJ_5:

MOVA,#05H

CJNEA,20H,MJ_6

MOVR5,#0E8H

MOVR6,#0FBH

CALLALARM1

MJ_6:

MOVA,#06H

CJNEA,20H,MJ_7

MOVR5,#5BH

MOVR6,#0FCH

CALLALARM1

MJ_7:

MOVA,#07H

CJNEA,20H,MMBUY

MOVR5,#8EH

MOVR6,#0FCH

CALLALARM1

MMBUY:

MOVA,#59H;判断是否整点

CJNEA,21H,LC

MOVA,#55H

CJNEA,20H,LC_1

LCALLALARM

LC_1:

MOVA,#56H

CJNEA,20H,LC_2

CALLALARM

LC_2:

MOVA,#57H

CJNEA,20H,LC_3

CALLALARM

LC_3:

MOVA,#58H

CJNEA,20H,LC_4

CALLALARM

LC_4:

MOVA,#59H

CJNEA,20H,LC

CALLALARM

LC:

MOVA,#00H

CJNEA,21H,LCC

CJNEA,20H,LCC

MOVR5,#44H

MOVR6,#0FEH

CALLALARM1

LCC:

MOVR7,#08H

MOVR2,#10H

MOVR3,#WSLA_7290

JNBP1.2,YEARS;使用P1.2控制显示内容

JNBP1.4,BAOJIN

MOVR0,#38H;显示小时、分钟和秒

SJMPDISP

YEARS:

MOVR0,#30H;显示年、月和日期

SJMPDISP

BAOJIN:

MOVR0,#40H

DISP:

LCALLWRNBYT;调7290显示

JNBP3.2,$

RETI

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

;ALARM

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

ALARM:

PUSHPSW;产生0.5秒1000HZ音频

PUSH07H

MOVTMOD,#11H

MOVTL0,#33H

MOVTH0,#0FEH

MOVTL1,#0FCH

MOVTH1,#4BH

SETBTR0

SETBTR1

LOOPC:

JNBTF0,$

MOVTL0,#33H

MOVTH0,#0FEH

CLRTF0

CPLP1.3

JBTF1,LOOPC

MOVTL1,#0FCH

MOVTH1,#4BH

CLRTF1

DJNZR7,LOOPC

CLRTR0

CLRTR1

POP07H

POPPSW

RET

ALARM1:

PUSHPSW;产生指定频率音频0.5秒

PUSH07H

MOVTMOD,#11H

MOVTL0,R5

MOVTH0,R6

MOVTL1,#0FCH

MOVTH1,#4BH

SETBTR0

SETBTR1

LOOPD:

JNBTF0,$

MOVTL0,R5

MOVTH0,R6

CLRTF0

CPLP1.3

JBTF1,LOOPD

MOVTL1,#0FCH

MOVTH1,#4BH

CLRTF1

DJNZR7,LOOPD

CLRTR0

CLRTR1

POP07H

POPPSW

RET

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

;各子程序

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

ORG8300H

CHAFEN:

PUSHPSW;对20H-2AH单元的参数拆分,

PUSHACC;查表后送28H-2FH(年月日)

PUSH03H;和38H-3FH(时分秒)

PUSH04H

MOVA,20H;取秒参数

LCALLCF;拆分、查表在R4(H)、R3中

MOV38H,R3;送秒的个位

MOV39H,R4;送秒的十位

MOV3AH,#02H;送分隔符-

MOVA,21H;取分参数

LCALLCF;拆分、查表在R4(H)、R3中

MOV3BH,R3;送分的个位

MOV3CH,R4;送分的十位

MOV3DH,#02H;送分隔符-

MOVA,22H;取小时参数

LCALLCF;拆分、查表在R4(H)、R3中

MOV3EH,R3;送小时的个位

MOV3FH,R4;送小时的十位

MOVA,23H;取日起参数

LCALLCF

MOVA,R3

ORLA,#01H

MOVR3,A

MOV30H,R3

MOV31H,R4

MOVA,25H;取月参数

LCALLCF

MOVA,R3

ORLA,#01H

MOVR3,A

MOV32H,R3

MOV33H,R4

MOVA,26H;取年参数

LCALLCF

MOVA,R3

ORLA,#01H

MOVR3,A

MOV34H,R3

MOV35H,R4

MOV36H,#0FCH;年的高两位处理

MOV37H,#0DAH

MOVA,27H;报警分

LCALLCF

MOV40H,R3

MOV41H,R4

MOV42H,#02H

MOVA,28H;报警时

LCALLCF

MOV43H,R3

MOV44H,R4

MOV45H,#01

MOVA,29H;报警日

LCALLCF

MOV46H,R3

MOV47H,R4

POP04H

POP03H

POPACC

POPPSW

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

CF:

PUSH02H;将A中的数据拆分为两个独立的

PUSHDPH;BCD码并查表

PUSHDPL;结果分别存于R4、R3中

MOVDPTR,#LEDSEG

MOVR2,A

ANLA,#0FH

MOVCA,@A+DPTR

MOVR3,A

MOVA,R2

SWAPA

ANLA,#0FH

MOVCA,@A+DPTR

MOVR4,A

POPDPL

POPDPH

POP02H

RET

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

;将20H-26H中从PCF8563中读出的7个字节参数的无关位屏蔽掉(参见表8.7)

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

ADJUST:

PUSHACC

MOVA,20H;处理秒单元

ANLA,#7FH

MOV20H,A

MOVA,21H;处理分单元

ANLA,#7FH

MOV21H,A

MOVA,22H;处理小时单元

ANLA,#3FH

MOV22H,A

MOVA,23H;处理日期单元

ANLA,#3FH

MOV23H,A

MOVA,24H;处理星期单元

ANLA,#07H

MOV24H,A

MOVA,25H;处理月单元

ANLA,#1FH

MOV25H,A

POPACC

RET

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

;中断服务INT_7290子程序

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

INT_7290:

PUSH00H

PUSH02H

PUSH03H

PUSH04H

PUSH07H

PUSHACC

PUSHPSW

LCALLRDKEY;读取第一个按键值(功能键)

CJNEA,#0AH,MINUTE;判断是A键吗?

;是A键时开始处理小时数据

AKEY_1:

JBP3.3,$;以查询的方式等待下一次按键操作

LCALLRDKEY;读取第二个按键值(小时的十位数?

SWAPA;处理输入的数据(十位)

CJNEA,#00H,X_1

SJMPXX

X_1:

CJNEA,#10H,X_2

SJMPXX

X_2:

CJNEA,#20H,X_3

SJMPXX

X_3:

LJMPDIS_ERR

XX:

ANL14H,#0FH

ORL14H,A

JBP3.

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

当前位置:首页 > 初中教育 > 语文

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

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