江苏大学电气学院单片机课程设计Word文件下载.docx

上传人:b****6 文档编号:18371890 上传时间:2022-12-15 格式:DOCX 页数:15 大小:160.38KB
下载 相关 举报
江苏大学电气学院单片机课程设计Word文件下载.docx_第1页
第1页 / 共15页
江苏大学电气学院单片机课程设计Word文件下载.docx_第2页
第2页 / 共15页
江苏大学电气学院单片机课程设计Word文件下载.docx_第3页
第3页 / 共15页
江苏大学电气学院单片机课程设计Word文件下载.docx_第4页
第4页 / 共15页
江苏大学电气学院单片机课程设计Word文件下载.docx_第5页
第5页 / 共15页
点击查看更多>>
下载资源
资源描述

江苏大学电气学院单片机课程设计Word文件下载.docx

《江苏大学电气学院单片机课程设计Word文件下载.docx》由会员分享,可在线阅读,更多相关《江苏大学电气学院单片机课程设计Word文件下载.docx(15页珍藏版)》请在冰豆网上搜索。

江苏大学电气学院单片机课程设计Word文件下载.docx

本设计采用8155接口芯片构成的4*8键盘的接口电路,其中A口为输出,作为列线;

C口为输入,作为行线。

当所有的键没有被按下时,C口输入均为高;

若某列线为低,恰好该列上有键被按下,则键所在的行线为低。

三.设计原理

系统中使用20BY-0型号步进电机,它使用+5V直流电源,步距角为18度,电机线圈由A、B、C、D四相组成。

步进电机驱动原理是通过对它每相线圈中的电流的顺序切换来使电机旋转,驱动电路由脉冲信号来控制,所以调节脉冲信号的频率便可改变步进电机的转速。

BA、BB、BC、BD即为脉冲信号输入插孔,驱动器输出A、B、C、D接步进电机。

四.连线图

步进电机模块插头接实验系统J3插座,(顺接)把P1.0~P1.3分别接到BA~BD插孔。

五.设计说明及流程

1.数码管显示字形

LED显示器是由发光二极管构成的字段组成的显示器。

显示程序任务:

设置显示缓冲区(7EH-79H),存放待显示数据和字符(位置码)。

显示译码:

程序存储器中建立字形码常数表,查表得出对应数据和字符的字形码。

输出显示:

输出字形码到显示端口

2.字位口表(从高位起)

3.键盘显示原理图

(1)显示子程序模块

采用动态显示方式,即一位一位地轮流点亮(扫描)6位显示器。

在8032RAM存储器中设置六个显示缓冲区单元7EH-79H,分别存放6位显示器的显示数据(从高到低)。

(2)键盘输入模块

实验系统有4×

8的键盘结构(见键扫显示原理图)。

键盘的行线通过电阻接+5V,当键盘上没有键闭合时所有的行线和列线都断开,行线都为高电平。

当键盘上某一键闭合时,则该键所对应的行线和列线都短路。

CPU逐行逐列地检查键盘的状态,可判断键盘上有无键闭合。

CPU对键盘上闭合键的键号确定,可根据行线和列线的状态计算求得,也可以根据行线和列线的状态查表求得。

说明:

实际的键盘分布如图所示,每个方框代表一个键,中间的数字代表键值,及键盘上印着的数字,每个键上方的小数字代表键在扫描时的键号:

(3)步进电机控制模块

实现步进电机的转动方式以及转速控制原理:

四相四拍运行方式,即AB-BC-CD-DA-AB或A-B-C-D-A或者四相八拍方式,即A-AB-B-BC-C-CD-D-DA-A-AB实验时控制P1口对应位为“1”。

通过控制每一拍的间隔来控制电机的转速。

内存使用分配表

步序

控制位

工作

状态

控制

模型

P1.7

P1.6

P1.5

P1.4

P1.3D相

P1.2

C相

P1.1

B相

P1.0

A相

1

1

AB

03H

2

BC

06H

3

CD

OCH

4

DA

09H

6.程序清单

ORG0000H

AJMPMAIN

ORG001BH;

设置中断服务程序跳转

LJMPT1INT

ORG0300H

MAIN:

ACALLSHURU;

调用输入程序,等待确认后返回

MOVR1,79H

MOVR2,7AH

MOVR3,7BH

MOVR4,7CH

MOVR5,#00H

MOVA,7DH;

读取设定的速度等级0-F

MOVR6,#4;

循环左移4位

N1:

RLA

DJNZR6,N1

MOVTMOD,#10H;

T1模式1,16位记数模式

MOVTH1,A;

左移后的速度等级存放到TH1

MOVTL1,#00H;

按此装载则0等级的定时最长,转速最慢,F等级的转速最快。

SETBEA;

开中断

SETBET1

SETBTR1

WAIT:

ACALLXS;

调用显示子程序并等待T1中断

JNBET1,N5;

若中断关闭则步数已减为零,重新执行主程序

SJMPWAIT

N5:

AJMPMAIN

RM:

DB03H,06H,0CH,09H,00H;

正转控制字

LM:

DB03H,09H,0CH,06H,00H;

反转控制字

T1INT:

PUSHACC;

T1中断服务程序

PUSHPSW;

保护现场

PUSHDPH

PUSHDPL

MOVA,7EH;

读取转向

JNZLEFT;

A中内容不为0,则转反转

MOVDPTR,#RM

AJMPN2

LEFT:

MOVDPTR,#LM

N2:

MOVA,R5;

设置R5作为RM或LM的偏移量

MOVCA,@A+DPTR

MOVP1,A

INCDPTR

MOVA,R5

MOVCA,@A+DPTR;

取下一步控制字

JNZNEXT1;

如不等于0则R5自增1,否则R5清零

MOVR5,#00H

AJMPN3

NEXT1:

INCR5

N3:

CJNER1,#00H,M1;

执行步数减1并判断是否为0

CJNER2,#00H,M2

CJNER3,#00H,M3

CJNER4,#00H,M4

CLRET1;

步数减为0,关闭中断

CLREA

M4:

DECR4

MOVR3,#09H

MOV7CH,R4

AJMPM43

M3:

DECR3

M43:

MOVR2,#09H

MOV7BH,R3

AJMPM32

M2:

DECR2

M32:

MOVR1,#09H

MOV7AH,R2

AJMPM21

M1:

DECR1

M21:

MOV79H,R1

MOVA,7DH

MOVR6,#4

N4:

DJNZR6,N4

MOVTH1,A

MOVTL1,#00H

POPDPL;

恢复现场

POPDPH

POPPSW

POPACC

RETI;

中断返回

SHURU:

MOVR0,#7EH;

置显缓指针初值

MOVR1,#7EH;

置键入缓冲指针初值

MOV79H,#00H;

初始化设定值

MOV7AH,#00H

MOV7BH,#00H

MOV7CH,#00H

MOV7DH,#00H

MOV7EH,#00H

MOVR3,#06H;

存放未设置数码管个数

SHURU1:

ACALLKS1;

判断是否有键闭合

JZXY;

(A)=0,无键闭合,调显示延时

ACALLXD;

(A)/=0,有键闭合,进行消抖延时

CJNEA,#16H,XY

判断是否是确认键按下,如不是,继续输入;

如是,返回主程序

RET

XY:

ACALLXS

AJMPSHURU1

XD:

ACALLT12ms;

消抖,延时12ms

ACALLKS1;

延时后看是否仍有键闭合

JNZN0;

仍有键闭合,转扫描程序

N0:

ACALLSAOM1

SAOM1:

MOVR2,#0FEH;

R2记列的扫描字

MOVR4,#0H;

R4记列号

SAOM2:

MOVDPTR,#0FFDDH;

将扫描字送列

MOVA,R2

MOVX@DPTR,A

INCDPTR;

指向行地址

MOVXA,@DPTR;

读取行值

JBACC.0,LONE;

第0行无键按下,转查第

MOVA,#00H;

第0行有键按下,置0行首键号#00H

AJMPQJH;

转求键号

LONE:

JBACC.1,LTWO

MOVA,#08H

AJMPQJH

LTWO:

JBACC.2,LTHR

MOVA,#10H

LTHR:

JBACC.3,NEXT

MOVA,#18H

QJH:

ADDA,R4;

键号=行首键号+列号

PUSHACC;

键号进栈保护

SAOM3:

等待键释放

JNZSAOM3

POPACC;

键释放,返回,A中存键号

CJNEA,#16H,AAA;

根据键号判断是否是确认键

AJMPCHS

AAA:

ACALLQJZ;

以键号求键值,返回值A中为待显示数值

MOV@R1,A

DJNZR3,CHS

若按键数超过6个,则R3重新赋值,重新设置设定值

MOVR3,#06H

MOVR1,#7EH

CHS:

NEXT:

INCR4;

增加列号值

JNBACC.7,CHS;

第8列是否已经扫描

RLA;

第8列未扫描,转下一列扫描

MOVR2,A

AJMPSAOM2

QJZ:

MOVDPTR,#TAB1;

求键值子程序

MOVCA,@A+DPTR

TAB1:

DB7,4,8,5,9,6,0AH,0BH

按顺序为键号从0-31,表中为对应键值

DB1,0,2,0FH,3,0EH,0CH,0DH

DB0,1,0,1,0,1,0,1

DB2,3,2,3,2,3,2,3

XS:

MOV30H,#20H;

30H单元存放字位码

XS1:

MOVDPTR,#TAB

MOVA,@R0;

R0指向7E-79H单元

查表得R0所指单元的值的字形码

MOVDPTR,#0FFDCH;

字形口地址

MOVX@DPTR,A;

送字形口地址

字位码地址

MOVA,30H

送字位码

ACALLT1ms;

延时1ms

DECR0

JBACC.0,XS2

判断是否已显示最右边数码管,是则重置指针R0

RRA

MOV30H,A

AJMPXS1

XS2:

MOVR0,#7EH

TAB:

DB0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H

DB80H,90H,88H,83H,0C6H,0A1H,86H,8EH

T1ms:

MOVR7,#02H;

延时1ms

L4:

MOVR6,#0F8H

L3:

DJNZR6,L3

DJNZR7,L4

T12ms:

MOVR7,#18H;

延时12ms程序

L6:

L5:

DJNZR6,L5

DJNZR7,L6

KS1:

MOVDPTR,#0FFDDH

判键闭合子程序,有键闭合则A不为0

MOVA,#00H

MOVXA,@DPTR

CPLA

ANLA,#0FH

END

7.心得体会

这次单片机课程设计为期五天,课题是步进电机控制,具体要求是:

从键盘上输入正、反转命令,转速参数(16级)和转动步数显示在LED显示器上。

显示器上显示:

单片机依显示器上显示的正、反转命令,转速级数和转动步数进行相应动作,转动步数减为零时停止转动。

前两天,我完成了按键与显示程序,在调试按键程序的时候,一直出现显示与按键不对应的情况,摸索了很久,才弄明白实验箱的按键的键号与单片机书上又些许不同。

找出了出错的原因,很快就把程序调试成功了。

后两天,主要编写电机控制主程序,以及整体程序的调试。

在此过程中,我们遇到了很多困难。

首先,第一次尝试时数码管根本没有反应,跟别谈转动电机,对着程序看了很久,才意识到可能是寄存器中的值在不断调用中出现错误了。

解决方法是运用定时器中断来控制电机转动。

这样,经过好几次修改,程序终于运作成功了。

通过这次课程设计,我明白了我们要抓住有限的机会去认真完成课程设计,就拿单片机这门课来说,离考试已经有一段时间,也许你会有这个发现:

部分考试时记住的内容现在已经忘了,但认真完成课程设计之后,你会发现,你对知识的理解会更加

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

当前位置:首页 > 工程科技 > 电力水利

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

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