单片机综合设计.docx
- 文档编号:23116662
- 上传时间:2023-04-30
- 格式:DOCX
- 页数:34
- 大小:35.56KB
单片机综合设计.docx
《单片机综合设计.docx》由会员分享,可在线阅读,更多相关《单片机综合设计.docx(34页珍藏版)》请在冰豆网上搜索。
单片机综合设计
基于ZLG7290B、PCF8563的时钟系统设计
1设计要求
(1)由PCF8563提供时间参数并由ZLG7290进行显示;
(2)能够利用键盘实现时间参数的修改,修改过程可加入“回显”、闪烁功能;
(3)利用蜂鸣器实现时钟系统的“整点报时”功能;
(4)要求程序中有中断环节。
附加功能:
(1)显示年、月、日;
(2)显示当前温度;
(3)当温度超过设定的上限值时蜂鸣器报警。
2设计分析及系统方案设计
(1)时钟显示程序
通过外部中断INT1控制每秒钟时间的刷新,即每秒从PCF8563T中读取时间参数并送到ZLG7290B中数码管显示;通过外部中断INT0进行时间参数的修改和温度显示,程序为分支结构,通过按键值判断要修改的位和年月日、温度的显示。
地址分配:
1)单片机:
10H~1DH:
向PCF8563T输入的相关参数(有时间参数、控制字等)的数据块;
1FH:
存放从ZLG7290B中读取的键值;
20H~26H:
从PCF8563T中读出的时间参数(秒、分、小时、日、星期、月、年);
通过CHAIFEN(拆分)子程序将20H~26H中获取到的时间参数拆分查表并送入下列缓冲区:
28H~2FH:
年(四个单元)、月(两个单元)、日(两个单元)的显示缓冲区(字形码);
38H~3FH:
小时、分钟和秒(各占两单元)的显示缓冲区(字形码)。
2)PCF8563T:
02H~08H:
依次存放秒、分、时、日、月、年。
(单片机的10H~1DH00H~0DH)
3)ZLG7290B:
07H、08H:
控制数码管闪烁;
10H、11H:
秒的个位、十位;
13H、14H:
分的个位、十位;
16H、17H:
时的个位、十位。
(2)温度显示程序
温度显示程序设置在INT0的中断服务程序中,当按键值为E时显示当前
温度,超过设定的上限值时实现蜂鸣器报警。
采用查询方式判断是否退出中断。
地址分配:
35H:
温度值高4位;
36H:
温度值低8位;
3系统电路图
4外围接口模块硬件电路功能描述
PCF8563T:
实时时钟芯片,提供时、分、秒、年、月、日、星期。
ZLG7290B:
有键盘输入和数码管显示功能,通过按键修改时间,通过数码管显示时间和温度。
DS18B20:
采集温度功能,将温度数据读取到单片机内再通过数码管显示出来。
蜂鸣器:
用作整点报时和温度报警。
5主程序中主要变量定义
变量名称
RAM单元/寄存器
功能
WSLA_8563
0A2H
PCF8563T口地址(写)
RSLA_8563
0A3H
PCF8563T口地址(读)
WSLA_7290
70H
ZLG7290B口地址(写)
RSLA_7290
71H
ZLG7290B口地址(读)
WSLA
70H
DS18B20口地址(写)
RSLA
71H
DS18B20口地址(读)
TEMPER_L
36H
存放读出温度低位数据
TEMPER_H
35H
存放读出温度高位数据
TEMPER
34H
存放转换后的8位温度值
TEMPER_NUM
60H
缓冲单元
TEMPER3
37H
存放温度整数值百位部分
TEMPER2
38H
存放温度整数值十位部分
TEMPER1
39H
存放温度整数值个位部分
TEMPER0
3AH
存放温度整数值小数部分
TEM
54H
存放设置温度上限值
DATA_1
40H
小数部分首地址
6系统软件中各个子程序的功能描述
子程序名称
入口参数
出口参数
功能描述
INT_RCT
PCF8563T的00H~0DH;单片机38H~3FH
单片机10H~1DH,20H~26H;ZLG7290B的10H~17H
时钟中断服务子程序。
每秒将8563中的当前时间读入单片机的10H~1DH中;将8563的02H~08H读入单片机内部的20H~26H;将单片机内部的38H~3FH写到7290的10H~17H;整点报时
INT_7290
累加器A
修改时间和显示温度中断服务子程序。
通过功能键A、B、C、D、E进行时间修改、时间显示、温度显示
RDKEY
ZLG7290B的01H
累加器A
读键值子程序
WR8563
RAM的10H~1DH
PCF8563T的00H~0DH
向日历芯片写入时间参数。
将RAM的10H~1DH中的时间参数(含控制字)写入芯片的00H~0DH单元
DISPLAY
PCF8563T02H~08H;单片机38H~3FH
单片机20H~26H;ZLG7290的10H~17H
显示当前时间子程序
LIGHT
累加器A
ZLG7290的07H、08H
闪烁子程序
RING、RING1
—
—
蜂鸣器响程序
CHAIFEN
单片机20H~26H
单片机28H~2FH,38H~3FH
对20H~26H单元的参数拆分并在查表后送28H~2FH和38H~3FH
CF
累加器A
R3、R4
将A中数据拆分为两独立的十六进制数并查表
ADJUST
20H~26H
20H~26H
屏蔽读出的7个字节参数无关位
DELAY
—
—
延时子程序延时256ms
DELAY2
—
—
延时子程序延时80us
SHOW
DATA_1
21H~24H
将小数部分的字型码转移到变量区
TEMPER_COV10
TEMPER
TEMPER3、TEMPER2、TEMPER1(25H~27H)
温度二进制转换为十进制显示
GET_TEMPER
—
35H、36H
从DS18B20中读出12位温度数据。
高位存于单片机的RAM的35H单元、低位存于36H单元
INIT_1820
—
FLAG1
初始化子程序(寻找DS18B20并建立标志)
TEMPER_COV
TEMPER_L、TEMPER_H
TEMPER_NUM、TEMPER
将读出的数据进行转换
WRITE_1820
累加器A
向DS18B20中写入一个字节的数据
READ_18200
35H、36H
从DS18B20中读出两个字节的温度数据
7主程序程序流程图
开始
7290复位
设定T1、T0方式及定时初值
设定温度上限值
设定PCF8563T的时间和命令参数
将初值写入8563
开中断
等待中断
8程序清单
SDABITP1.0
SCLBITP1.1
WSLA_8563EQU0A2H
RSLA_8563EQU0A3H
WSLA_7290EQU70H
RSLA_7290EQU71H
WSLAEQU70H
RSLAEQU71H
TEMPER_LEQU36H;存放读出温度低位数据
TEMPER_HEQU35H;存放读出温度高位数据
TEMPEREQU34H;存放转换后的8位温度值
TEMPER_NUMEQU60H;缓冲单元
FLAG1BIT00H;20H单元中的bit位
DQBITP1.2;一线总线控制端口
TEMPER3EQU37H;存放温度整数值百位部分
TEMPER2EQU38H;存放温度整数值十位部分
TEMPER1EQU39H;存放温度整数值个位部分
TEMPER0EQU3AH;存放温度整数值小数部分
TEMEQU54H;存放设置温度上限值
DATA_1EQU40H
ORG8000H
LJMP8100H
ORG8013H;INT1中断入口地址,每秒刷新一次时间
LJMPINT_RCT
ORG8003H
LJMPINT_7290;INT0中断入口地址,修改时间
ORG8100H
START:
MOVSP,#60H;7290复位
CLRP1.7
LCALLDELAY
SETBP1.7
MOVTMOD,#11H;T1方式1,T0方式1
MOVTL0,#33H;设置定时0.5ms初值
MOVTH0,#0FEH
MOVTEM,#27
MOVDPTR,#LEDSEG
;******************************
;设定PCF8563T的时间和命令参数
;******************************
MOV10H,#00H
MOV11H,#1FH
MOV12H,#20H;秒
MOV13H,#22H;分
MOV14H,#16H;时
MOV15H,#16H;日期
MOV16H,#03H;星期
MOV17H,#04H;月
MOV18H,#15H;年
MOV19H,#00H
MOV1AH,#00H
MOV1BH,#00H
MOV1CH,#00H
MOV1DH,#83H
;*****************************
MOVR7,#0EH
MOVR0,#10H
MOVR2,#00H
MOVR3,#WSLA_8563
LCALLWRNBYT
SETBEA
SETBEX0;开INT0中断
SETBIT0;触发极性为下降沿
SETBEX1;开INT1中断
SETBIT1;触发极性为下降沿
SJMP$
;******************************
;时钟中断服务子程序
;******************************
INT_RCT:
;每秒将8563中的当前时间读入单片机的10H~1DH中
MOVR0,#10H;键值缓冲单元
MOVR7,#0EH;取第一个数据(键值)
MOVR2,#00H;指向内部数据键值寄存器地址
MOVR3,#WSLA_8563;取器件地址(写)
MOVR4,#RSLA_8563;取器件地址(读)
LCALLRDADD
;将8563的02H~08H读入单片机内部的20H~26H
MOVR7,#07H
MOVR0,#20H
MOVR2,#02H
MOVR3,#WSLA_8563
MOVR4,#RSLA_8563
LCALLRDADD
LCALLADJUST
LCALLCHAIFEN
;将单片机内部的38H~3FH写到7290的10H~17H
MOVR7,#08H
MOVR2,#10H
MOVR3,#WSLA_7290
MOVR0,#38H
LCALLWRNBYT;显示
JNBP3.2,$
;*****************************
;整点报时
;*****************************
PUSHACC
MOVA,21H;取分参数
CJNEA,#59H,JUD;判断是否59分,若不是,判断是否整点
MOVA,20H
CJNEA,#56H,J1;判断是否56秒
LCALLRING
SJMPEXIT
J1:
CJNEA,#57H,J2;判断是否57秒
LCALLRING
SJMPEXIT
J2:
CJNEA,#58H,J3;判断是否58秒
LCALLRING
SJMPEXIT
J3:
CJNEA,#59H,EXIT;判断是否59秒
LCALLRING
SJMPEXIT
JUD:
CJNEA,#00H,EXIT
MOVA,20H
CJNEA,#00H,EXIT
LCALLRING1
EXIT:
POPACC
RETI
;********************************
;修改时间和显示温度中断服务子程序
;********************************
INT_7290:
PUSH00H
PUSH02H
PUSH03H
PUSH04H
PUSH07H
PUSHACC
PUSHPSW
LCALLRDKEY
CJNEA,#0AH,CMP1;是否按A键修改小时,不是的话判断是否是按B键修改分钟
AKEY1:
LCALLDISPLAY;显示当前时间
PUSHACC;闪烁
MOVA,#0C0H
LCALLLIGHT
POPACC
JBP3.2,$;等待再次按键修改小时十位
LCALLRDKEY;读取所按键值
SWAPA;将键值数据处理成小时数据的十位
ANL14H,#0FH
ORL14H,A;将处理好的小时十位送14H单元
LCALLWR8563;将修改后的参数送PCF8563T
LCALLDISPLAY
JBP3.2,$;等待再次按键修改小时个位
LCALLRDKEY
ANL14H,#0F0H;将键值数据处理成小时的个位
ORL14H,A
LCALLWR8563;将修改后的参数送PCF8563T
LCALLDISPLAY
LJMPDOWN
CMP1:
CJNEA,#0BH,CMP2;是否按B键修改分钟,不是的话判断是否是按C键修改秒
AKEY2:
LCALLDISPLAY
PUSHACC
MOVA,#18H
LCALLLIGHT
POPACC
JBP3.2,$;等待再次按键修改分钟十位
LCALLRDKEY;读取所按键值
SWAPA;将键值数据处理成分钟数据的十位
ANL13H,#0FH
ORL13H,A;将处理好的分钟十位送13H单元
LCALLWR8563;将修改后的参数送PCF8563T
LCALLDISPLAY
JBP3.2,$;等待再次按键修改分钟个位
LCALLRDKEY
ANL13H,#0F0H;将键值数据处理成分钟的个位
ORL13H,A
LCALLWR8563;将修改后的参数送PCF8563T
LCALLDISPLAY
LJMPDOWN
CMP2:
CJNEA,#0CH,CMP3;是否按C键修改秒,不是的话判断是否按D键显示日期
AKEY3:
LCALLDISPLAY
PUSHACC
MOVA,#03H
LCALLLIGHT
POPACC
JBP3.2,$;等待再次按键修改秒十位
LCALLRDKEY;读取所按键值
SWAPA;将键值数据处理成秒数据的十位
ANL12H,#0FH
ORL12H,A;将处理好的秒十位送12H单元
LCALLWR8563;将修改后的参数送PCF8563T
LCALLDISPLAY
JBP3.2,$;等待再次按键修改秒个位
LCALLRDKEY
ANL12H,#0F0H;将键值数据处理成秒的个位
ORL12H,A
LCALLWR8563;将修改后的参数送PCF8563T
LCALLDISPLAY
LJMPDOWN
CMP3:
CJNEA,#0DH,CMP4;是否按D键显示日期,不是的话判断是否按E键显示温度
MOVR7,#08H
MOVR2,#10H
MOVR3,#WSLA_7290
MOVR0,#28H
LCALLWRNBYT;显示
JBP3.2,$
LJMPDOWN
CMP4:
CJNEA,#0EH,BB;是否按E键显示温度,不是的话退出
SJMPLP1
BB:
LJMPDOWN
LP1:
LCALLGET_TEMPER;从DS18B20读出温度数据
LCALLTEMPER_COV;转换读出的温度数据并保存
LCALLTEMPER_COV10;将温度转换成10进制
;**************************************************************
;小数部分
;**************************************************************
MOVA,TEMPER0
CJNEA,00H,X1;小数部分为0000
MOVDATA_1,#00H
MOVDATA_1+1,#00H
MOVDATA_1+2,#00H
MOVDATA_1+3,#00H
LCALLSHOW
LJMPNEXT
X1:
CJNEA,#01H,X2;小数部分为0001
MOVDATA_1,#05H
MOVDATA_1+1,#02H
MOVDATA_1+2,#06H
MOVDATA_1+3,#00H
LCALLSHOW
LJMPNEXT
X2:
CJNEA,#02H,X3;小数部分为0010
MOVDATA_1,#00H
MOVDATA_1+1,#05H
MOVDATA_1+2,#02H
MOVDATA_1+3,#01H
LCALLSHOW
LJMPNEXT
X3:
CJNEA,#03H,X4;小数部分为0011
MOVDATA_1,#05H
MOVDATA_1+1,#07H
MOVDATA_1+2,#08H
MOVDATA_1+3,#01H
LCALLSHOW
LJMPNEXT
X4:
CJNEA,#04H,X5;小数部分为0100
MOVDATA_1,#00H
MOVDATA_1+1,#00H
MOVDATA_1+2,#05H
MOVDATA_1+3,#02H
LCALLSHOW
LJMPNEXT
X5:
CJNEA,#05H,X6;小数部分为0101
MOVDATA_1,#05H
MOVDATA_1+1,#02H
MOVDATA_1+2,#01H
MOVDATA_1+3,#03H
LCALLSHOW
LJMPNEXT
X6:
CJNEA,#06H,X7;小数部分为0110
MOVDATA_1,#00H
MOVDATA_1+1,#05H
MOVDATA_1+2,#07H
MOVDATA_1+3,#03H
LCALLSHOW
LJMPNEXT
X7:
CJNEA,#07H,X8;小数部分为0111
MOVDATA_1,#05H
MOVDATA_1+1,#07H
MOVDATA_1+2,#03H
MOVDATA_1+3,#04H
LCALLSHOW
LJMPNEXT
X8:
CJNEA,#08H,X9;小数部分为1000
MOVDATA_1,#00H
MOVDATA_1+1,#00H
MOVDATA_1+2,#00H
MOVDATA_1+3,#05H
LCALLSHOW
LJMPNEXT
X9:
CJNEA,#09H,X10;小数部分为1001
MOVDATA_1,#05H
MOVDATA_1+1,#02H
MOVDATA_1+2,#06H
MOVDATA_1+3,#05H
LCALLSHOW
LJMPNEXT
X10:
CJNEA,#0AH,X11;小数部分为1010
MOVDATA_1,#00H
MOVDATA_1+1,#05H
MOVDATA_1+2,#02H
MOVDATA_1+3,#06H
LCALLSHOW
LJMPNEXT
X11:
CJNEA,#0BH,X12;小数部分为1011
MOVDATA_1,#05H
MOVDATA_1+1,#07H
MOVDATA_1+2,#08H
MOVDATA_1+3,#06H
LCALLSHOW
LJMPNEXT
X12:
CJNEA,#0CH,X13;小数部分为1100
MOVDATA_1,#00H
MOVDATA_1+1,#00H
MOVDATA_1+2,#05H
MOVDATA_1+3,#07H
LCALLSHOW
LJMPNEXT
X13:
CJNEA,#0DH,X14;小数部分为1101
MOVDATA_1,#05H
MOVDATA_1+1,#02H
MOVDATA_1+2,#01H
MOVDATA_1+3,#08H
LCALLSHOW
LJMPNEXT
X14:
CJNEA,#0EH,X15;小数部分为1110
MOVDATA_1,#00H
MOVDATA_1+1,#05H
MOVDATA_1+2,#07H
MOVDATA_1+3,#08H
LCALLSHOW
LJMPNEXT
X15:
MOVDATA_1,#05H;小数部分为1111
MOVDATA_1+1,#07H
MOVDATA_1+2,#03H
MOVDATA_1+3,#09H
LCALLSHOW
;*****************************************************************
;温度大于上限报警
;*****************************************************************
NEXT:
MOVA,TEMPER
CJNEA,TEM,XX
XX:
JCNEXT1
LCALLRING
NEXT1:
MOV20H,#0FCH;使得数码管显示最后一位为0
MOVR7,#08H;8位数码管显示温度
MOVR2,#10H
MOVR0,#20H
MOVR3,#WSLA
LCALLWRNBYT
LCALLDELAY
JBP3.2,AA
SJMPDOWN
AA:
LJMPLP1
DOWN:
CLRIE1;清标志
POPPSW
POPACC
POP07H
POP04H
POP03H
POP02H
POP00H
RETI
RDKEY:
MOVR0,#1FH;键值缓冲单元
MOVR7,#01H;取第一个数据(键值)
MOVR2,#01H;指向内部数据键值寄存器地址
MOVR3,#WSLA_729
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 单片机 综合 设计