江苏大学 单片机课程设计文档格式.docx

上传人:b****4 文档编号:16542847 上传时间:2022-11-24 格式:DOCX 页数:13 大小:121.29KB
下载 相关 举报
江苏大学 单片机课程设计文档格式.docx_第1页
第1页 / 共13页
江苏大学 单片机课程设计文档格式.docx_第2页
第2页 / 共13页
江苏大学 单片机课程设计文档格式.docx_第3页
第3页 / 共13页
江苏大学 单片机课程设计文档格式.docx_第4页
第4页 / 共13页
江苏大学 单片机课程设计文档格式.docx_第5页
第5页 / 共13页
点击查看更多>>
下载资源
资源描述

江苏大学 单片机课程设计文档格式.docx

《江苏大学 单片机课程设计文档格式.docx》由会员分享,可在线阅读,更多相关《江苏大学 单片机课程设计文档格式.docx(13页珍藏版)》请在冰豆网上搜索。

江苏大学 单片机课程设计文档格式.docx

用89C51的P1.1、P1.2、P1.3分别按图1所示的A、B、C三信号格式送数即可,正转时输出的顺序为02H→06H→04H→0CH→08H→0AH→02H,反转时输出的顺序为02H→0AH→08H→0CH→04H→06H→02H。

2.2专用键盘显示接口芯片8279

8279是专用键盘/显示器控制芯片,能对显示器自动扫描,能识别键盘上按下键的键号;

可充分提高CPU的工作效率。

8279与MCS-51接口方便,由它构成的标准键盘/显示器接口在微机应用系统中使用越来越广泛。

2.2.18279特征

●能同时执行键盘与显示器操作。

●扫描式键盘工作方式。

●有8个键盘FIFO(FirstinFirstout)存储器。

●带触点去抖动的双键锁定或N键巡回功能。

●两个8位或16位的数字显示器。

●可左/右输入的16字节显示用RAM。

●由键盘输入产生中断信号。

●扫描式传感器工作方式。

●用选通方式输入信号。

●单个16字符显示器。

●可编程扫描定时。

●工作方式可由CPU编程。

图2-18279芯片示意图

2.2.28279命令状态字

表1命令状态字

表2命令状态字

2.3其他器件选择

1.74LS373:

74LS373是八D锁存器(三态).一个封装中有八个锁存器,三态总线驱动输出,置数全并行存取,缓冲控制输入,时钟/使能输入有改善抗扰度的滞后作用。

在电路中的作用是:

由于P0口既是数据口又是地址口,所以加一个锁存器锁存地址。

2.74LS138为3线-8线译码器共有54/74S138和54/74LS138两种线路结构型式。

利用G1、/(G2A)和/(G2B)可级联扩展成24线译码器;

若外接一个反相器还可级联扩展成32线译码器。

若将选通端中的一个作为数据输入端时,74LS138还可作数据分配器。

电路中的作用是:

使器件的地址连续,用三根线控制八根线。

3.74LS240:

八单线驱动器。

(反码,三态输出),这种八缓冲器和线驱动器是为提高三态输出存储地址驱动器,时钟驱动器和总线定向接收器和发射器的性能可和集成度而特意设计的。

4.7451:

8路驱动器,增强数码管显示的亮度。

2.4电路原理图及说明

MCS-51采用8279扩展的键盘、显示器的接口电路控制三相步进电机的运转,P1.1、P1.2、P1.3分别接三相步进电机的A、B、C三相,构成一个完整的单片机应用系统,设计20个键组成的键盘以输入数据与命令,8只LED显示器用于系统显示输出。

采用89C51的P1口输出信号,经放大驱动一台步进电机,电路图见附录1。

第三章系统软件设计

3.1程序流程图:

图3-1

3.2程序清单(详见附录2)

3.3调试过程

1)在调试过程中,我们遇到了以下问题:

i.按EXEC键后的速度不明显。

ii.当输入200步,1000步后,步进电机不按步数进给,无法停止。

2)问题解决方案:

i.我们将EXEC键的处理程序L3中设置步数的部分放到延时程序中LATE2,可以使调速变得明显

ii.我们将LOOP9后的程序“DJNZR4,LOOP8改为”CJNER4,#00H,LOOP8

DJNZR3,LOOP9”CJNER3,#00H,LOOP9

这样就不会让R3为0时再自减。

第四章总结

十天时间转眼间就过去了,不得不说这十天过的很充实。

刚开始,看到一切都是那么的陌生,经过三天的摸索,终于能够看懂程序,好的开始就是成功的一般,看懂了程序,心中就有了计划,第四天开始尝试着编写程序,写程序要求要求的是严谨的思维,一丝不苟的态度,以及较强的逻辑思维能力,我并不是一个专业的程序员,以前也没写过这么复杂的程序。

于是,我把程序的要求和程序的运行步骤详细的写了出来,一步一步踏踏实实,经过四天的尝试,各个程序模块已经完成,实践是检验真理的唯一标准,第一次编译出错是难免的,几个比较严重的错误已经在上面调试过程中列了出来,功夫不负有心人,在同学老师的帮助下,一个完整的程序终于写好了。

在这次实习过程中,我锻炼自己的思考能力,动手能力。

总而言之,纸上得来终觉浅,绝知此事要躬行。

附录1硬件逻辑图

附录图1

附录2程序清单

DAT_8279EQU0C000H;

键盘显示接口

COM_8279EQU0C001H

ORG0000H

NOP

AJMPMAIN

ORG0030H

MAIN:

CLREA;

内外程序存储器选择端,可以使用内部存储器

MOVSP,#60H;

设置堆栈指针

CLRA

MOVPSW,A;

程序状态字清零

MOVIE,A;

中断允许寄存器清零

MOVR0,#7FH

INIT:

MOV@R0,A;

清除CPURAM

DJNZR0,INIT

INIT8279:

MOVDPTR,#COM_8279;

初始化8279

MOVX@DPTR,A

MOVA,#34H;

分频设置

ACALLOFFLED;

调用子程序清除8279RAM

MOVDPTR,#COM_8279

MOVA,#80H;

写显示RAM命令,从左面第一个LED开始进行

BACK:

MOVDPTR,#DAT_8279;

写入数据进行显示

MOVA,#81H

MOVX@DPTR,A;

LED数码管显示为q

MOV30H,#80H;

LED数值所在地址放入30H

MOV31H,#40H;

存放熟知的地址在31H,

WAIT:

ACALLSCANKEY

JNCWAIT;

无键跳转

MOVA,R1

JBACC.4,COMMKEY;

判断是否为命令键,是则跳转,不是则顺序执行

KEYNUM:

MOVA,30H;

有键赋值,LED数值给A

MOVDPTR,#COM_8279

把LED数值送到端口地址

MOVA,R1;

键值给A

MOVR0,31H

将键盘真实值送到40H中(此程序保证键盘真实值被保留)

INC31H;

31H自加,指向41H

MOVDPTR,#DISPCODE;

段代码给数据指针

MOVCA,@A+DPTR;

键值是多少就偏移多少单元

MOVDPTR,#DAT_8279

将键值的段代码送到显示接口

INC30H;

30H内容加一,LED数值加一

LED数值送给A

CJNEA,#88H,WAIT;

判断LED八个显示是否全部被操作,若没有则返回继续读键值

全部被操作后,从最左边重新开始

MOV31H,#40H

SJMPWAIT;

以上程序保证了8个数码管全部显示

COMMKEY:

MOVDPTR,#PROGCOMM;

其它键的处理与命令,PROGCOMM首地址给数据指针

ANLA,#03H;

00000011相与,只看后两位

RLA;

PROGCOMM中各句程序间相隔两个单元,保证跳转正常

JMP@A+DPTR;

判断执行哪部操作

PROGCOMM:

AJMPLASTP

AJMPNEXTP

AJMPEXECP

LASTP:

MOVR2,#00H;

实现电机的点动正转

MOVDPTR,#NUMBER1;

正转首地址

L1:

MOVA,R2

MOVCA,@A+DPTR

MOVP1,A;

电动机六拍依次给P1口,每输入一次调用一次延时,共六次

ACALLDELAY

INCR2

CJNEA,#06H,L1

RET

NEXTP:

实现电机的点动反转

MOVDPTR,#NUMBER2;

反转首地址

L2:

CJNEA,#06H,L2

EXECP:

ACALLTIME;

调用步进停止转动电机

OFFLED:

MOVA,#0DFH;

共阳极数码管,11011111,显示RAM置为FF,数码管关闭

将状态字送给端口地址

OFFLED1:

MOVXA,@DPTR

JBACC.7,OFFLED1

RET;

判断是否清0完毕,清除完则返回主程序

SCANKEY:

等待按键

MOVXA,@DPTR;

接口地址得到的数值给A

ANLA,#07H;

00000111相与,只看后三位状态

CJNEA,#00H,HAVEKEY;

后三位不为零则有键输入,跳转到HAVEKEY

CLRC;

无按键C清零

返回

HAVEKEY:

有键读键值

MOVB,A;

备份键值

MOVR1,#00H

MOVDPTR,#KEYCODE;

;

查键值表,首地址取出,放到数据指针中

KEYLOOP:

CLRA

首地址键值给A

CJNEA,B,NOKEY;

比较A与读入键值大小,若相等则找到键值,否则继续寻找

AJMPFOUNDKEY;

找到键值,进行处理

NOKEY:

INCDPTR;

指针偏移一个单元

INCR1;

键值大小增加一

AJMPKEYLOOP;

未找到循环继续找

FOUNDKEY:

键值大小给A

SETBC;

C置一并返回

NUMBER1:

DB02H,06H,04H,0CH,08H,0AH

NUMBER2:

DB02H,0AH,08H,0CH,04H,06H

LATE:

MOVA,44H;

调速延时循环

SWAPA

ORLA,45H

MOVR7,A

L3:

DJNZR7,L3

DJNZR6,LATE

RET

DELAY:

MOVR7,#20H;

点动延时循环

DELAY1:

MOVR6,#0EFH

DJNZR6,$

DJNZR7,DELAY1

KEYCODE:

DB0C1H,0C8H,0C9H,0D0H,0D8H,0E0H,0C2H,0CAH

DB0D1H,0D9H,0DAH,0C3H,0CBH,0D2H,0D3H,0DBH

COMCODE:

DB0E3H,0E2H,0E1H,00H

DISPCODE:

DB0CH,9FH,4AH,0BH,99H,29H,28H,8FH

DB08H,09H,88H,38H,6CH,1AH,68H,0E8H

DB0C8H,3AH,0ECH,0FFH

TIME:

MOVA,40H;

把千位百位放到R3

SWAPA;

高低四位交换

ORLA,41H;

逻辑或

MOVR3,A

MOVA,42H;

把十位个位放到R4

ORLA,43H

MOVR4,A

L5:

MOVR2,#00H

L4:

电机开始步进转动

MOVP1,A

ACALLLATE

ACALLCTIME1;

调用步距程序

CJNEA,#06H,L4

AJMPL5

CTIME1:

CJNER4,#00H,MM1;

R4不为零则转移

CJNER3,#00H,MM2;

R3不为零则转

AJMPMM4;

都为零时转到MM4

MM1:

DJNZR4,MM5;

R4减1,不为零则转移

AJMPMM6;

为零则转移到MM6

MM6:

LCALLSHOW1;

调用显示程序

SJMPCTIME1

MM2:

DECR3;

R3减1

SJMPMM1

MM4:

LCALLSHOW1

LJMPBACK;

步进到零时回到初值

MM5:

SHOW1:

MOVR0,#40H;

把改变后的千位百位值再送回显示的地址

MOVA,R3

ANLA,#0F0H

MOV@R0,A

INCR0

ANLA,#0FH

INCR0

MOVA,R4;

把改变后的十位个位值再送回显示的地址

MOVA,R4

MOV@R0,A

LCALLSHOW2

SHOW2:

把改变后的值都显示出来

MOVR5,#08H;

一共八位

L6:

MOVA,30H

MOVR0,31H;

取40H中的数据送给R0

MOVA,@R0

取段代码

送键盘显示接口

送下一位数据

INC30H

DJNZR5,L6;

送完八位结束

END

 

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

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

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

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