简易串口控制器设计报告.docx
- 文档编号:30715146
- 上传时间:2023-08-19
- 格式:DOCX
- 页数:25
- 大小:288.32KB
简易串口控制器设计报告.docx
《简易串口控制器设计报告.docx》由会员分享,可在线阅读,更多相关《简易串口控制器设计报告.docx(25页珍藏版)》请在冰豆网上搜索。
简易串口控制器设计报告
单片机课程设计报告
简易串口控制器
一、设计要求
基本要求:
1单片机2的显示电路为一个数码管,单片机1的键盘为2个按键;
2单片机系统中的按键1按下时单片机系统2的数码管显示的值加1,单片机系统1中的按键2按下时单片机系统2中的数码管显示的值减1。
扩展功能:
①单片机系统2中的显示电路为8个动态数码管,并用其实现一个电子时钟的功能,该时钟的设置通过单片机系统1中按键来进行;
②在双机通信过程中考虑通信出错的问题,且给出错后的解决方案。
二、整体方案设计
设计功能:
本次单片机课程设计过程中,根据设计题目要求,我们决定采取结合题目1:
简易电子密码锁,题目2:
简易数字时钟,题目3:
简易串口控制器这三项来进行此次课程设计。
计划实现功能如下:
1、8位数字时钟显示:
通过两个按键控制时钟的分钟和小时位的加减以调整时间。
2、时钟定时:
通过1号开关来确定时钟的预定时间设置,通过两个按键设置定时的小时和分钟位。
3、矩阵按键电子密码锁:
利用4X4矩阵键盘通过2号开关来选择密码设置以及密码输入,密码通过四位数码管显示。
4、双向串口控制:
用单片机系统1通过MAX232控制单片机2号的数字时钟显示。
程序流程图:
单片机程序流程图如下:
三、电路硬件设计
一、矩阵按键模块:
(1.4×4矩阵键盘识别处理
(2.每个按键有它的行值和列值 ,行值和列值的组合就是识别这个按键的编码。
矩阵的行线和列线分别通过两并行接口和CPU通信。
每个按键的状态同样需变成数字量“0”和“1”,开关的一端(列线)通过电阻接VCC,而接地是通过程序输出数字“0”实现的。
键盘处理程序的任务是:
确定有无键按下,判断哪一个键按下,键的功能是什么;还要消除按键在闭合或断开时的抖动。
两个并行口中,一个输出扫描码,使按键逐行动态接地,另一个并行口输入按键状态,由行扫描值和回馈信号共同形成键编码而识别按键,通过软件查表,查出该键的功能。
4X4矩阵按键
二、数字显示部分
世面上的四位一体的数码管一般都没有datasheet,所以掌握他们管脚的分布是很重要的一个环节。
下面是一张四位一体数码管引脚分布图
4位一体数码管,其内部段已连接好,引脚如图所示(正面朝自己,小数点在下方)。
a、b、c、d、e、f、g、dP为段引脚,1、2、3、4分别表示四个数码管的位。
。
。
。
。
。
。
1af23b
。
。
。
。
。
。
eddpcg4
即:
12-9-8-6为公共端,A-11B-7C-4D-2E-1F-10G-5DP-3
三、1号单片机系统
该部分用1号单片机STC89C51实现密码锁功能以及时钟调整功能。
附带显示4位密码的数码显示管和串口通信所需的MAX232以及控制密码设置和输入开关和时钟调整按键。
四、2号单片机系统
该部分用2号单片机STC89C52实现数字时钟定时设置和定时闹铃功能
三、电路的软件设计
串口1源程序:
HOUREQU40H
MINUTEEQU43H
CHOOSEEQU42H
ORG0000H
LJMPMAIN
ORG000BH
LJMPITOP
ORG0100H
MAIN:
MOVSCON,#0D1H
MOVTMOD,#21H
MOVTH1,#0E8H
MOVTL1,#0E8H
MOVTH0,#0FCH
MOVTL0,#21H
MOVDPTR,#TAB
MOVCHOOSE,#0FEH
MOV31H,#10H
MOV32H,#10H
MOV33H,#10H
MOV34H,#10H
MOV35H,#02H
MOV36H,#03H
MOV37H,#09H
MOV38H,#00H
SETBEA
SETBET0
SETBTR1
SETBTR0
HERE:
MOVA,31H
CJNEA,35H,LOOP//判断密码是否正确
MOVA,32H
CJNEA,36H,LOOP
MOVA,33H
CJNEA,37H,LOOP
MOVA,34H
CJNEA,38H,LOOP
LCALLANJIAN//密码正确,调用串口调整时间程序
SJMPLOOP7
LOOP:
SETBP3.5
LCALLLOOP2//调用判断是否有密码输入程序
LOOP7:
JBP3.4,OVER3//判断设置密码按键是否按下
LCALLMS10
JBP3.4,OVER3
MOVR3,#01H
MOVP2,#0FFH
LCALLLOOP1
MOV38H,A
LCALLSHOW
MOVP2,#0F7H
LCALLLOOP1
MOV37H,A
LCALLSHOW
MOVP2,#0F3H
LCALLLOOP1
MOV36H,A
LCALLSHOW
MOVP2,#0F1H
LCALLLOOP1
MOV35H,A
LCALLSHOW
MOVP2,#0F0H
HERE5:
JNBP3.4,HERE5//判断设置密码按键是否断开
LCALLMS10
JNBP3.4,HERE5
MOVR3,#00H
OVER3:
LJMPHERE
ITOP:
PUSHPSW//定时0中断入口,实现动态显示
PUSHACC
MOVTH0,#0FCH
MOVTL0,#21H
CJNER3,#01H,SCAN//R3为1,则不扫描
SJMPOVER
SCAN:
MOVA,CHOOSE
CJNEA,#0FEH,NEXT1
MOVR1,#31H
SJMPGOON
NEXT1:
CJNEA,#0FDH,NEXT2
MOVR1,#32H
SJMPGOON
NEXT2:
CJNEA,#0FBH,NEXT3
MOVR1,#33H
SJMPGOON
NEXT3:
CJNEA,#0F7H,SKIP
MOVR1,#34H
GOON:
RLA
MOVP2,#0FFH
MOVP2,CHOOSE
MOVCHOOSE,A
MOVA,@R1
MOVCA,@A+DPTR
MOVP0,A
SJMPOVER
SKIP:
MOVCHOOSE,#0FEH
OVER:
POPACC
POPPSW
RETI
LOOP1:
MOVP1,#0F0H//密码设置时,是否有按键按下的程序
MOVA,P1
XRLA,#0F0H
CJNEA,#00H,EXIT
SJMPLOOP1
EXIT:
LCALLMS10
MOVA,P1
XRLA,#0F0H
CJNEA,#00H,LOCKL
SJMPLOOP1
LOCKL:
MOVA,P1
XRLA,#0F0H
MOVR6,A//R6为按键所在行的第一个按键的数字
LOCKH:
MOVP1,#0FH//可能为1,2,4,8
MOVA,P1
XRLA,#0FH
MOVR7,A//R7为按键所在的列
STAY:
MOVA,P1
XRLA,#0FH
CJNEA,#00H,STAY
LCALLMS10
MOVA,P1
XRLA,#0FH
CJNEA,#00H,STAY
LCALLCHANGE
MOVA,R7
SWAPA
MOVR7,A
LCALLCHANGE1
MOVA,R6
ADDA,R7
RET
LOOP2:
MOVP1,#0F0H//输入密码是,是否有按键按下的程序
MOVA,P1
XRLA,#0F0H
CJNEA,#00H,EXIT2
RET
EXIT2:
LCALLMS10
MOVA,P1
XRLA,#0F0H
CJNEA,#00H,LOCKL2
RET
LOCKL2:
MOVA,P1
XRLA,#0F0H
MOVR6,A
LOCKH2:
MOVP1,#0FH
MOVA,P1
XRLA,#0FH
MOVR7,A
STAY2:
MOVA,P1
XRLA,#0FH
CJNEA,#00H,STAY2
LCALLMS10
MOVA,P1
XRLA,#0FH
CJNEA,#00H,STAY2
LCALLCHANGE
MOVA,R7
SWAPA
MOVR7,A
LCALLCHANGE1
MOVA,R6
ADDA,R7
MOV34H,33H
MOV33H,32H
MOV32H,31H
MOV31H,A
RET
ANJIAN:
CLRP3.5//当密码正确时,调整单片机2的时间
JBP3.2,OVER1
LCALLMS10
JBP3.2,OVER1
HERE1:
JNBP3.2,HERE1
LCALLMS10
JNBP3.2,HERE1
INCMINUTE
MOVR0,#MINUTE
CJNE@R0,#5AH,MINUTE1
MOVMINUTE,#00H
SJMPTAKE1
MINUTE1:
MOVA,MINUTE
ANLA,#0FH
CJNEA,#0AH,TAKE1
MOVA,MINUTE
ADDA,#06H
MOVMINUTE,A
SJMPTAKE1
OVER1:
JBP3.3,OVER7
LCALLMS10
JBP3.3,OVER7
HERE2:
JNBP3.3,HERE2
LCALLMS10
JNBP3.3,HERE2
INCHOUR
MOVR0,#HOUR
CJNE@R0,#24H,HOUR1
MOVHOUR,#00H
SJMPTAKE2
HOUR1:
MOVA,HOUR
ANLA,#0FH
CJNEA,#0AH,TAKE2
MOVA,HOUR
ADDA,#06H
MOVHOUR,A
SJMPTAKE2
OVER2:
SJMPOVER7
TAKE1:
MOVA,MINUTE
CLRTB8
MOVSBUF,A
HERE3:
JBCTI,OVER7
SJMPHERE3
TAKE2:
MOVA,HOUR
SETBTB8
MOVSBUF,A
HERE4:
JBCTI,OVER7
SJMPHERE4
OVER7:
RET
CHANGE:
CJNER6,#01H,NEXT6//把R6变成相应的数字
MOVR6,#00H//1到0,2到4,4到8,8到C
SJMPNEXT9
NEXT6:
CJNER6,#02H,NEXT7
MOVR6,#04H
SJMPNEXT9
NEXT7:
CJNER6,#04H,NEXT8
MOVR6,#08H
SJMPNEXT9
NEXT8:
CJNER6,#08H,NEXT9
MOVR6,#0CH
NEXT9:
RET
CHANGE1:
CJNER7,#01H,NEXT10//把R7变成相应的数字
MOVR7,#00H//1到0,2到1,4到2,8到3
SJMPNEXT13
NEXT10:
CJNER7,#02H,NEXT11
MOVR7,#01H
SJMPNEXT13
NEXT11:
CJNER7,#04H,NEXT12
MOVR7,#02H
SJMPNEXT13
NEXT12:
CJNER7,#08H,NEXT13
MOVR7,#03H
NEXT13:
RET
SHOW:
MOVA,#11H//显示设置密码时的断码“-”
MOVCA,@A+DPTR
MOVP0,A
RET
MS10:
MOVR5,#14H//延时10ms
HE:
MOVR4,#0FFH
HH:
DJNZR4,HH
DJNZR5,HE
RET
TAB:
DB3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,77H,7CH,39H,5EH,79H,71H,00H,40H
END
串口2源程序:
HOUREQU40H
COUNT1EQU39H
COUNT2EQU41H
CHOOSEEQU42H
MINUTEEQU43H
DINGEQU50H
ORG0000H
LJMPMAIN
ORG000BH
LJMPITOP
ORG0100H
MAIN:
MOVSP,#60H
MOV33H,#10H
MOV36H,#10H
MOV48H,#02H
MOV49H,#01H
CLRP1.3
MOVDING,#12H
MOVSCON,#0D1H
MOVTMOD,#21H
MOVTH1,#0E8H
MOVTL1,#0E8H
MOVTH0,#0FCH
MOVTL0,#17H
MOVCHOOSE,#0FEH
MOVCOUNT1,#00H
SETBEA
SETBET0
SETBTR1
SETBTR0
HERE:
JBCRI,GO//判断串口是否有信息到
MOVA,HOUR
CJNEA,DING,HERE14//判断闹铃时间是否到了
MOVA,34H
CJNEA,46H,HERE14
MOVA,35H
CJNEA,47H,HERE14
SETBP1.3
LCALLS10
HERE14:
CLRP1.3
JBP1.0,HERE//闹铃设置开关是否按下
LCALLMS10
JBP1.0,HERE
MOVR7,#01H
HERE2:
LCALLYNSWICH1//增加闹铃的分钟
LCALLYNSWICH2//增加闹铃的时钟
JNBP1.0,HERE2
LCALLMS10
JNBP1.0,HERE2
MOVR7,#00H
SJMPHERE
GO:
MOVA,SBUF//处理串口来的信息
MOVC,RB8
JNCCHANGM
MOVHOUR,A
ANLA,#0F0H
SWAPA
MOV38H,A
MOVA,HOUR
ANLA,#0FH
MOV37H,A
SJMPHERE
CHANGM:
MOVMINUTE,A
ANLA,#0F0H
SWAPA
MOV35H,A
MOVA,MINUTE
ANLA,#0FH
MOV34H,A
SJMPHERE
ITOP:
PUSHPSW//定时0的终端入口
PUSHACC
MOVTH0,#0FCH
MOVTL0,#17H
INCCOUNT1
MOVA,COUNT1
CJNEA,#250,SCAN
MOVCOUNT1,#00H
INCCOUNT2
MOVA,COUNT2
CJNEA,#04H,SCAN
MOVCOUNT2,#00H
LCALLADD1S
SCAN:
CJNER7,#00H,SCAN2//R7为0,则显示当前时间
SCAN1:
MOVA,CHOOSE//R7为1,则显示闹铃时间
CJNEA,#0FEH,NEXT1
MOVR1,#31H
SJMPGOON
NEXT1:
CJNEA,#0FDH,NEXT2
MOVR1,#32H
SJMPGOON
NEXT2:
CJNEA,#0FBH,NEXT3
MOVR1,#33H
SJMPGOON
NEXT3:
CJNEA,#0F7H,NEXT4
MOVR1,#34H
SJMPGOON
NEXT4:
CJNEA,#0EFH,NEXT5
MOVR1,#35H
SJMPGOON
NEXT5:
CJNEA,#0DFH,NEXT6
MOVR1,#36H
SJMPGOON
NEXT6:
CJNEA,#0BFH,NEXT7
MOVR1,#37H
SJMPGOON
NEXT7:
CJNEA,#7FH,SCAN
MOVR1,#38H
SJMPGOON
SCAN2:
MOVA,CHOOSE
CJNEA,#0FEH,NEXT8
MOVR1,#44H
SJMPGOON
NEXT8:
CJNEA,#0FDH,NEXT9
MOVR1,#45H
SJMPGOON
NEXT9:
CJNEA,#0FBH,NEXT10
MOVR1,#33H
SJMPGOON
NEXT10:
CJNEA,#0F7H,NEXT11
MOVR1,#46H
SJMPGOON
NEXT11:
CJNEA,#0EFH,NEXT12
MOVR1,#47H
SJMPGOON
NEXT12:
CJNEA,#0DFH,NEXT13
MOVR1,#33H
SJMPGOON
NEXT13:
CJNEA,#0BFH,NEXT14
MOVR1,#48H
SJMPGOON
NEXT14:
CJNEA,#7FH,SCAN2
MOVR1,#49H
GOON:
RLA
MOVP2,#0FFH
MOVP2,CHOOSE
MOVCHOOSE,A
MOVDPTR,#TAB1
MOVA,@R1
MOVCA,@A+DPTR
MOVP0,A
POPACC
POPPSW
RETI
ADD1S:
INC31H//当前时间增加1s的程序
MOVR0,#31H
CJNE@R0,#0AH,OVER1
MOV31H,#00H
INC32H
MOVR0,#32H
CJNE@R0,#06H,OVER1
MOV32H,#00H
INC34H//秒钟满60,分钟进1
MOVR0,#34H
CJNE@R0,#0AH,OVER1
MOV34H,#00H
INC35H
MOVR0,#35H
CJNE@R0,#06H,OVER1
MOV35H,#00H
INCHOUR
MOVR0,#HOUR
CJNE@R0,#24H,HOUR1
MOVHOUR,#00H
MOV37H,#00H//分钟满60,时钟进1
MOV38H,#00H
SJMPOVER1
HOUR1:
MOVA,HOUR
ANLA,#0FH
CJNEA,#0AH,HOUR2
MOV37H,#00H
INC38H
MOVA,HOUR
ADDA,#06H
MOVHOUR,A
SJMPOVER1
HOUR2:
MOV37H,A
OVER1:
RET
YNSWICH1:
JBP1.1,OVER2//判断闹铃分钟增加按键是否按下
LCALLMS10
JBP1.1,OVER2
HERE3:
JNBP1.1,HERE3
LCALLMS10
JNBP1.1,HERE3
INC46H
MOVR0,#46H
CJNE@R0,#0AH,OVER2
MOV46H,#00H
INC47H
MOVR0,#47H
CJNE@R0,#06H,OVER2
MOV47H,#00H
OVER2:
RET
YNSWICH2:
JBP1.2,OVER3//判断闹铃时钟增加按键是否按下
LCALLMS10
JBP1.2,OVER3
HERE4:
JNBP1.2,HERE4
LCALLMS10
JNBP1.2,HERE4
INCDING
MOVR0,#DING
CJNE@R0,#24H,DING11
MOVDING,#00H
MOV48H,#00H
MOV49H,#00H
SJMPOVER3
DING11:
MOVA,DING
ANLA,#0FH
CJNEA,#0AH,DING12
MOV48H,#00H
INC49H
MOVA,DING
ADDA,#06H
MOVDING,A
SJMPOVER3
DING12:
MOV48H,A
OVER3:
RET
MS10:
MOVR5,#14H//延时10ms
HE:
MOVR4,#0FFH
HH:
DJNZR4,HH
DJNZR5,HE
RET
S10:
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 简易 串口 控制器 设计 报告