单片机课程设计报告硬件图源程序.docx

上传人:b****7 文档编号:11390835 上传时间:2023-02-28 格式:DOCX 页数:28 大小:290.02KB
下载 相关 举报
单片机课程设计报告硬件图源程序.docx_第1页
第1页 / 共28页
单片机课程设计报告硬件图源程序.docx_第2页
第2页 / 共28页
单片机课程设计报告硬件图源程序.docx_第3页
第3页 / 共28页
单片机课程设计报告硬件图源程序.docx_第4页
第4页 / 共28页
单片机课程设计报告硬件图源程序.docx_第5页
第5页 / 共28页
点击查看更多>>
下载资源
资源描述

单片机课程设计报告硬件图源程序.docx

《单片机课程设计报告硬件图源程序.docx》由会员分享,可在线阅读,更多相关《单片机课程设计报告硬件图源程序.docx(28页珍藏版)》请在冰豆网上搜索。

单片机课程设计报告硬件图源程序.docx

单片机课程设计报告硬件图源程序

中原工学院

《单片机与接口技术》课程设计报告

 

 

一、引言······························3

二、设计任务··························3

三、硬件电路图的设计··················5

四、软件的编写·······················10

1)程序流程图······················11

2)实验源程序······················15

五、心得体会·························26六、参考文献························27

七、附录····························28

一、引言

单片微型运算机简称单片机,又称微操纵器(MCU),它的显现是运算机进展史上的一个重要的里程碑,它以体积小、功能全、性价比高等诸多优势独具特色,在工业操纵、尖端武器、通信设备、信息处置、家用电器等嵌入式应用领域中独占鳌头。

本次课设采纳的STC89C51单片机是51系列单片机的一种代表,目前51系列单片机是国内目前应用最普遍的一种单片机之一。

单片机以其系统硬件构架完整、价钱低廉、学生能动手等特点,成为工科学生硬件设计的基础课。

本次课程设计要紧目的是为了更进一步学会利用和了解单片机,增强学生的动手能力,让咱们更透彻的将平常所做的实验吃透学懂。

 

二、设计任务

一、所需设备:

伟福系列单片机仿真实验箱、PC机及实验指导书

二、设计内容

题目1:

数据搜集系统

  从键盘中任意选出6个键作为系统的功能键和LED数码显示一路组成一个单片机键盘显示系统(小的监控程序),并通过实验箱上的接口芯片实现相应的功能(注:

这些硬件电路全在实验箱上,但自己要能设计)。

要求设计相应的硬件电路,并画出实现题目要求功能的流程图,编写、调试相应的程序。

编程要求:

  开机后显示班级号(4位),学号(2位)(复位状态),然后通过功能键设置参数,而后运行主程序。

6个功能键为:

设定

加一

减一

确定

运行

     

 换位

 

设置参数步骤:

复位状态下,按下“设定”键后6位显示的状态为:

显示设定值              显示参数行号

 

8

8

8

8

0

1

 

 

四位设定值中的某一名小数点亮(或整个值闪烁),表示对该位进行设置。

用“加一”、“减一”键改变该位的值,

用“换位”键改变设置位(由左到右),

用“确信”键保留设定的值。

 

本次设计要求能设置四行参数即可,每行参数在0-9999之间,当持续按“确信”键时,对应的行号(上图)从01-04循环转变。

按下“运行”键,执行数据搜集程序(参考实验箱相应的硬件电路,但要求不同),搜集模拟量0-5V,显示对应的物理量在0000-最大值之间转变。

5V对应的显示值(最大值)是多少能够在设按时通过某行(四行参数中的一行)参数设置的数值选择确信。

 

三、硬件电路图的设计

实验中要紧用STC89C51单片机做处置器,第一的确保一个单片机最小系统,因此第一绘制的是单片机最小系统的电路图,以下图是上次做小车时绘制的最小系统电路图:

 

要用到键盘和六个数码管显示,故需对其接口进行扩展,所用的器件有74HC138与P2口的高四位相连接,进行译码,译码以后和锁存器

74LS373所存P0口的位数相与,对数码管的段码和位码进行片选选定,同时也可对键盘的读取接口和数据搜集芯片进行片选选通,从而给定一个确信的地址,如此单片机就能够够与外接电路进行数据的搜集,键盘的判定,及数字的显示等工作。

以下图为74HC138的连接电路

 

其中接138的E3脚,E1和E2都接在低电平上,/别离和138的C/B/A引脚连接,如此地址片选就能够够达到从8000H到FFFF的地址。

以下图为单片机P0口接74LS373锁存器

数码管段码接口和位码接口都用的是74LS374芯片,片选信号由138译码器和74LS373锁存器所给地址决定,键盘的读取用芯片74LS245芯片来扩展,本电路主若是参考平常所作实验,及实验的电路连接来设计的。

 

以下图为段码接口,位码接口及键盘读入口的接线电路:

 

键盘及数码管显示电路设计好以后,接下来要设计的确实是数据搜集系统的电路,由于我选的题目是任务一里的第一个任务,因此数据搜集系统利用的的是AD转换,将5V的电压通过电位器的调剂,也确实是模拟量通过AD0809芯片转换成数字量,在单片机上显示出来。

 

以下图即为AD0809与单片机的接口电路:

 

AD0809其中D0—D7与P0口相接,由P0口的数据选择哪一路的输入,EOC与单片机口相连接,转换完后产生中断延时让其显示,片选线由138的Y1输出口和单片机的读口即通过一个或非门相连。

如此0809的地址即为9000H,由P0口给定的值决定是IN口口的输入,实验箱上只有两个输入口,我在编程时选定IN0口输入,IN0口接一个连了五伏电压的电位器。

 

四、软件的编写

软件所要实现的功能:

一、开机后显示班级、学号10-212;

二、用的是实验箱键盘最后一排的六个键,依次为:

“设定”“加一""减一""换位””确信“”运行“;

3、按“设定”键,默许第一名闪烁,现在按“加一”和“减一”键能够调整数值;

4、设定完一名后,按“换位”键能够对下一名进行设定;

五、四位都设定完以后,按“确信”键,去闪烁,并将参数01下设定的值保留;

六、再按下“确信”键,跳至参数02,现在能够依照步骤3对其进行设置;

7、参数0一、0二、03、04设定好以后,能够按“确信”键对设定的值查询;

八、在不同的参数下,按下“运行”键能够将以该设定值最大值,0为最小值的AD转换结果显示到前四位数码管上。

明确软件所要达到的目的以后,第一得先清楚实验中数码管和键盘的读入地址和数码管的位码地址,为编程序确信键值及参数会起到一个直接的作用,只有清楚这些了才能为所欲为的设定没一个功能键的位置。

 

(1)程序流程图

流程图是一个程序的骨干,也确实是说程序是成立在一个流程图的主体框架之上的,有流程图程序才能够有层次的进行编写.

下面为实验程序的流程图

 

N

 

Y

 

N

 

 

 

 

 

 

 

 

 

 

 

 

 

(2)实验源程序

WEIEQU08002H;位

DUANEQU08004H;段

INEQU08001H;键盘读入口

CS0809EQU09000H

LEDBUFEQU30H;显示缓冲区

CANSHUEQU51H;参数1234

ORG0000H

LJMPSTART

ORG0020H

START:

MOV25H,#00H

MOVLEDBUF,#01H;班级、学号的序码

MOVLEDBUF+1,#00H

MOVLEDBUF+2,#012H

MOVLEDBUF+3,#02H

MOVLEDBUF+4,#01H

MOVLEDBUF+5,#02H

MOV36H,#00H

MOV40H,#00H;参数1缓冲区

MOV41H,#00H

MOV42H,#00H

MOV43H,#00H

MOV44H,#00H;参数2缓冲区

MOV45H,#00H

MOV46H,#00H

MOV47H,#00H

MOV48H,#00H;参数3下缓冲区

MOV49H,#00H

MOV4AH,#00H

MOV4BH,#00H

MOV4CH,#00H;参数4下缓冲区

MOV4DH,#00H

MOV4EH,#00H

MOV4FH,#00H

MOV50H,#00H

MOVCANSHU,#01H;参数

L2:

MOVR0,#LEDBUF;显示班级、学号

LCALLDISPLAYLED1;显示子程序,R0为参数

LCALLTESTKEY;判定“有效键”是不是按下?

JNB,L2;没有键按下,那么继续显示班级、学号

L3:

MOV25H,#00H

MOVA,CANSHU

MOVB,#04H

MULAB

ADDA,#3CH;将参数首地址存入R0

MOVR0,A;第一次有键按下默许显示参数1下设定的值,即:

显示从40H单元开始的内容

LCALLDISPLAYLED2;挪用设定参数显示子程序

LCALLTESTKEY;检测是不是有键按下

JNB,L3;没有键按下,那么继续显示参数1下设定的值

LCALLPAZ;有键按下,那么判定运行键是不是按下

CJNER5,#05H,QD1

LJMPSD;R5=5

QD1:

LJMPS44

SD:

SETB

MOV36H,#00H

MOVA,CANSHU

MOVB,#04H

MULAB

ADDA,#3CH;通过参数来选择设定值的缓冲区

ADDA,36H

MOVR0,A

MOV90H,@R0;将闪值保留至90H单元

H1:

MOVA,CANSHU

MOVB,#04H

MULAB

ADDA,#3CH

ADDA,36H

MOVR0,A;R0指向闪烁寄放字节处

JB,S1

MOV@R0,#10H

SETB

LJMPDS1

S1:

MOV@R0,90H;将闪烁字节的值显示出来

CLR

DS1:

MOVA,CANSHU

MOVB,#04H

MULAB

ADDA,#3CH

MOVR0,A;R0指向显示首区

LCALLDISPLAYLED2

LCALLTESTKEY

JNB,H1

LCALLPAZ

CJNER5,#02H,S11;换位

MOVA,CANSHU

MOVB,#04H

MULAB

ADDA,#3CH

ADDA,36H

MOVR0,A

MOV@R0,90H

INC36H

HW1:

MOVA,CANSHU

MOVB,#04H

MULAB

ADDA,#3CH

ADDA,36H

MOVR0,A

MOV90H,@R0

MOVA,36H

CJNEA,#04H,H1

MOV36H,#00H

LJMPHW1

S11:

CJNER5,#04H,S22;加1

INC70H;闪烁值加1

MOVA,90H

CJNEA,#0AH,H1

MOV90H,#00H

LJMPH1

S22:

CJNER5,#03H,S33;减1

DEC70H;闪烁值减1

MOVA,70H

CJNEA,#0FFH,H2

MOV90H,#09H

H2:

LJMPH1

S33:

CJNER5,#01H,H2;确信1(去掉闪烁,并将该参数下的设定值保留到对应的缓冲区)

MOVA,CANSHU

MOVB,#04H

MULAB

ADDA,#3CH

ADDA,36H

MOVR0,A

MOV@R0,90H

LJMPL3

S44:

CJNER5,#01H,W1;确信2(将参数加1,并将该参数下的设定值显示到数码管上)

INCCANSHU;参数加1,指向下一个参数

MOVA,CANSHU

CJNEA,#05H,L22

MOVCANSHU,#01H

LJMPL3

W1:

CJNER5,#00H,L22

YX:

LCALLAD;搜集(挪用AD转换子程序,取得AD值)

LCALLTESTKEY

JB,L22

LJMPYX;运行

L22:

LJMPL3

;判定"有效按键"子程序

TESTKEY:

MOVDPTR,#WEI

MOVA,#00H

MOVX@DPTR,A;6条列线全置0

MOVDPTR,#IN

MOVXA,@DPTR;读入键状态(哪一排有键按下,那么对应的位为:

0)

ANLA,#01H;假设是最后一排有键按下,那么ANL以后A=0,不然A=1

CJNEA,#01,B1;判定按下的是不是是最后一排的键(有效按键)?

CLR;A=1,那么最后一排没有键按下,将清0

LJMPFH

B1:

SETB;A=0,那么最后一排有键按下,将置1

FH:

RET

;判定键位,通过R5返回,运行--00H,确信-01H,换位--02H,减1--03H,加1--04H,设定--05H

PAZ:

MOVR4,#0FEH;11111110B

MOVR5,#0FFH;11111111B

NEXT:

MOVDPTR,#WEI

MOVA,R4

MOVX@DPTR,A;只将第6列置0

MOVDPTR,#IN

MOVXA,@DPTR

;读入键状态

ANLA,#01H;假设“运行”键按下,那么ANL以后A=0;

CJNEA,#01H,QDZ;判定“运行”键是不是按下?

(依次判定最后一排的键)

MOVA,R4

RLA;否,那么左移一名

MOVR4,A

INCR5;执行后,R5=00H

LJMPNEXT

QDZ:

INCR5;按下“运行”键,那么跳至此处,执行后,R5=00H

MOVLEDBUF,R5;假设前面没有按“运行”键,那么R5=01H;有,那么R5=00H

LOOP:

LCALLTESTKEY

JB,LOOP;有键按,那么循环检测按键

RET

;显示1子程序(班级、学号)

DISPLAYLED1:

MOVR2,#20H;选通第1位数码管

MOVR3,#06H;6位数码管显示,操纵循环6次

L1:

MOVDPTR,#WEI

MOVA,R2

MOVX@DPTR,A

RRA;右移一名,选通下一名数码管

MOVR2,A

MOVA,@R0

MOVDPTR,#LEDTAB

MOVCA,@A+DPTR;由序码求段码

MOVDPTR,#DUAN

MOVX@DPTR,A;输出段码

LCALLDELAY;挪用延时

INCR0;指向下一个要显示的段码

DJNZR3,L1

RET

;显示2子程序(设定值和参数)

DISPLAYLED2:

MOVR2,#20H;选通第1位数码管

SETB;将置1

MOVR3,#06H;6位数码管显示,操纵循环6次

L12:

MOVDPTR,#WEI

MOVA,R2

MOVX@DPTR,A

RRA;右移一名,选通下一名数码管

MOVR2,A

CJNEA,#02H,L44;没选通第五位数码管(00000010B),那么跳转,正常显示

CLR;选通了第五位数码管,那么将清0

L44:

MOVA,@R0

MOVDPTR,#LEDTAB

MOVCA,@A+DPTR;由序码求段码

MOVDPTR,#DUAN

MOVX@DPTR,A;输出段码

LCALLDELAY;挪用延时

JB,H11;等于1,即没选通第五位数码管,那么跳转

MOVR0,#4FH;选通了第五位数码管,那么给R0初始地址4FH

SETB

H11:

INCR0;(50H)=00H,第五位数码管显示“0”;(51H)=01H,第六位数码管显示“1”

DJNZR3,L12;直到六位数码管都显示一遍,返回

RET

;AD转换子程序

AD:

LCALLPXS;调系数

MOVDPTR,#CS0809;搜集

MOVA,#00H

MOVX@DPTR,A

JNB,$:

利用ADC0809的EOC信号触发中断INT0(口)

MOVXA,@DPTR

LCALLZHUANHUAN

MOVR0,#60H

LCALLDISPLAYLED2

MOVP1,#80H

RET

;判系数子程序

PXS:

MOVA,CANSHU

MOVB,#04H

MULAB

ADDA,#3CH

MOVR0,A

MOVR1,A

MOVA,@R0

SWAPA

INCR0

ADDA,@R0

MOV53H,A

INCR0

MOVA,@R0

SWAPA

INCR0

ADDA,@R0

MOV54H,A

MOVA,53H

ANLA,#0F0H

CJNEA,#00,DYYQ

MOV25H,#01H

INCR1

MOVA,@R1

SWAPA

INCR1

ADDA,@R1

MOV53H,A

INCR1

MOVA,@R1

SWAPA

ADDA,#00

MOV54H,A

DYYQ:

MOV57H,#02H

MOV58H,#55H

MOV55H,#00H

MOV56H,#00H

MOV22H,#00H

MOVR0,#0FFH

LOOP5:

INCR0

CLRC

MOVA,56H

ADDA,58H

DAA

MOV56H,A

MOVA,55H

ADDCA,57H

DAA

MOV55H,A

CLRC

MOVA,56H

SUBBA,54H

MOV,C

MOVA,55H

SUBBA,53H

MOV,C

MOVR2,22H

CJNER2,#00,NEXT5

MOVA,56H

CJNEA,54H,NEXT5

INCR0

NEXT5:

MOVC,

JCLOOP5

MOV22H,#00H

CLRC

MOVB,R0

RET

;转换子程序

ZHUANHUAN:

MULAB

MOV6AH,B

MOV6BH,A

MOV6CH,#03H

MOV6DH,#0E8H

MOVR0,#0FFH

LOOP1:

INCR0;判定千位

MOVA,6BH

MOV2BH,6BH

SUBBA,6DH

MOV6BH,A

MOVA,6AH

MOV2AH,6AH

SUBBA,6CH

MOV6AH,A

NEXT1:

JNCLOOP1

MOV60H,R0

MOV6AH,2AH

MOV6BH,2BH

MOV22H,#00H;判定百位

CLRC

MOV6CH,#00H

MOV6DH,#64H

MOVR0,#0FFH

LOOP2:

INCR0

MOVA,6AH

CJNEA,#00H,BW1

MOVA,6BH

MOV2BH,6BH

SUBBA,6DH

MOV6BH,A

LJMPNEXT2

BW1:

MOVA,6BH

SUBBA,6DH

MOV6BH,A

MOVA,6AH

SUBBA,6CH

MOV6AH,A

LJMPLOOP2

NEXT2:

JNCLOOP2

MOV61H,R0

MOV6BH,2BH

MOV22H,#00H;判定十位

CLRC

MOV6DH,#0AH

MOVR0,#0FFH

LOOP3:

INCR0

MOVA,6BH

MOV2BH,6BH

SUBBA,6DH

MOV6BH,A

NEXT3:

JNCLOOP3

MOV62H,R0

MOV63H,2BH

MOVA,25H

CJNEA,#01H,TZ1

MOV63H,62H

MOV62H,61H

MOV61H,60H

MOV60H,#00H

TZ1:

RET

;延时子程序

DELAY:

MOVR6,#06

D1:

MOVR7,#210

DJNZR7,$

DJNZR6,D1

RET;显示字形

LEDTAB:

DB3FH,06H,5BH,4FH,66H;01234

DB6DH,7DH,07H,7FH,67H;56789

DB77H,7CH,39H,5EH,79H;ABCDE

DB71H,00H,76H,40H;F灭H-

END

五、心得体会

关于这次课设,整体感觉还能够,比上学期参加培训时学习单片机的成效好多了,上学期就在张教师的率领下在周末进行电子设计大赛培训,总结一下上学期的收成确实是熟悉了结了单片机。

这学期通过五月份的一次只能小车的设计,对单片机的熟练程度明显增强了,那一次的竞赛能够说是我将书本知识运用于实践的第一次。

这学期相当于再次把单片机的讲义又随着教师学了一遍,此刻关于单片机尽管还有些地址有些迷惑,但整体上来讲51单片机的了解仍是相对透彻的,通过这么长时刻的单片机学习,我感觉到只有不断的去实验,不断地去验证,才能够将理论转化为实践,因为有些时候分析的想的会和实际发生的成效完全不同,只有不断的去实验去实践,才能够真正把握一门技术。

这次课程设计尽管实间有两个礼拜,可是实验室相对紧张,咱们上学期自己利用的板子有些功能尚未添加,相对来讲硬件仍是有点欠缺,因现在刻仍是很紧张的,因为一周只有在实验室能呆上一天多点,如此就对咱们仍是组成了挑战。

我选的是实验一的第一个题目,尽管有些子程序是平常做实验所做过的,可是整体来讲程序仍是比较复杂,用的汇编语言编程最大的一点短处确实是程序太长,调试起来比较费力,有时一个小小的问题就得调试一两个小时,我最长的一次是AD转换成255后欲将其转换成所设置的最大数的问题,关于那个参数拿个笔计算起来几分钟的时刻,可是要在实验箱上显示出来没有误差还真是不容易,就一个参数的取值问题我就在程序调试上花了近五个小时,最后的结果是把误差缩减到最小是15左右,最终实验结果是完成出来了,可是仍是感觉不太理想。

我感觉单片机确实是一个不断的实验和不断的实践的课程,只有自己不断地去练习才能够把握其真理。

通过过这次实训,我对单片机的有了更近一步的了解而且熟悉了单片机各个管脚的功能。

我深刻地熟悉到实践操作的重要性,同时理论知识必需与实践操作紧密相结合,二者缺一不可,这也是教学环节中的一个重要环节,只有坚持理论与实践相结合,才能更好的提高自己的动手操作能力,而且能够从中培育自己独立试探问题和解决问题的能力。

这次实训实现了软件与硬件的有效结合,将书本知识运用到实践中,让我收成颇丰。

六、参考文献

《单片机原理、接口技术及应用(含C51)》(西安电子科技大学出版社主编杨学昭王东云)

《电路》(高等教育出版社第五版邱关源)

《电子技术基础》上下册(高等教育出版社康华光)

《新概念51单片机C语言教程》(电子工业出版社郭天祥)

七、附录

整体硬件电路图:

 

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

当前位置:首页 > 职业教育 > 职业技术培训

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

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