单片机实验报告.docx
- 文档编号:7915500
- 上传时间:2023-01-27
- 格式:DOCX
- 页数:17
- 大小:794.37KB
单片机实验报告.docx
《单片机实验报告.docx》由会员分享,可在线阅读,更多相关《单片机实验报告.docx(17页珍藏版)》请在冰豆网上搜索。
单片机实验报告
系别:
电力工程系
班别:
姓名:
学号:
指导老师:
2009年12月25日
目录
1、实习目的..............................................3
二、实习内容..............................................3
3、基本要求..............................................3
4、强化要求..............................................3
五、实习器材..............................................3
六、设计方案..............................................4
7、设计的程序..........................................6
八、实习小结..............................................13
1、实习目的
通过实习,使学生进一步弄懂所学到的课本知识,巩固和深化对单片机的结构、指令系统、中断系统、键盘/显示系统、接口技术、系统扩展、定时/控制、程序设计、应用开发、等基本理论知识的理解,提高单片机应用于技术的实践操作技能,掌握单片机应用系统设计、研制的方法,培养利用单片机进行科技革新、开发和创新的基本能力,为毕业后从事与单片机相关的工作打下一定的基础。
二、实习内容
利用软件MAVE2007在V51-S型实验板上设计键盘扫描+流水灯显示。
三、基本要求
要求所设计的键盘扫描+流水灯显示具有如下功能:
1、流水灯不停地工作。
2、按键从K0到KF显示对应的数字,同时流水灯速度越来越慢,并且交替显示学号。
四、强化要求
在以上效果不变的同时加入按键控制流水灯方向的功能
五、实习器材
V51-S型实验板
六、设计方案
1、分析
该程序可分为四个模块,分别是流水灯模块、显示模块、矩阵扫描显示模块、中断模块
分别画出各模块的程序框图,如下所示:
流水灯模块:
显示模块:
矩阵扫描模块:
中断模块:
2、方案
以流水灯模块为主程序,其他模块为子程序。
本实习提供了一个4×4小键盘,向P2口的低四位逐个输出高电平,如果有键按下,则相应输出高,如果没有键按下,则输出为低,通过输出的列码和读取的行码来判断按下什么键,在有键按下后要有一定的延时,防止抖动.
七、程序设计
;将4个7段数码显示器显示的内容放在4个显存中,4个显存空间定义如下
LED0EQU30H
LED1EQU31H
LED2EQU32H
LED3EQU33H
DEL17EQU34H
AKBIT30H
DELEQU35H
ORG0000H
LJMPMAIN
ORG0023H;;;;中断程序入口
LJMPXQ
ORG0040H
MAIN:
MOVSP,#60H
START:
MOVP0,#00H;使显示器不显示
MOVP1,#00H
MOVP3,#00H
MOVLED0,#0;初始界面'-''-''-''0'
MOVLED1,#16
MOVLED2,#16
MOVLED3,#16
MOVDEL17,#1;流水灯切换速度(值越大,速度越慢)
MOVDEL,#10;显示管切换速度(值越大,速度越慢)
MOVTMOD,#01H;设T0为工作方式1
MOVTH0,#00H
MOVTL0,#00H;22.1184M晶振?
SETBEA
SETBET0
SETBTR0
CLRAK
MOVA,#01H
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;主程序
XM:
MOVP1,A
RLA;流水灯方向由上至下
PUSHA
MOVR1,DEL17;用DEL17来控制流水灯速度
D31:
MOVR2,#10
D21:
MOVR3,#100
D11:
LCALLSKLOOP
DJNZR3,D11
DJNZR2,D21
DJNZR1,D31
POPA
LJMPXM
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;扫描键盘子程序
SKLOOP:
MOVP0,#00H
MOVP2,#11110111B;P2.3口输出低电平,扫描K0,K1,K2,K3
LCALLDISLED3
SK0:
JBP2.4,SK1;P2.4为高电平扫描K0
LCALLDELAY;延时去除抖动
LCALLOPRK0;P2.4为低电平执行K0对应子程序
RET
SK1:
JBP2.5,SK2
LCALLDELAY;延时去除抖动
LCALLOPRK1
RET
SK2:
JBP2.6,SK3
LCALLDELAY;延时去除抖动
LCALLOPRK2
RET
SK3:
JBP2.7,NP2;换一次输出位
LCALLDELAY;延时去除抖动
LCALLOPRK3
RET
NP2:
MOVP0,#00H
MOVP2,#11111011B;P2.2口输出低电平,扫描K4,K5,K6,K7
LCALLDISLED2
SK4:
JBP2.4,SK5;P2.4为高电平扫描K5
LCALLDELAY;延时去除抖动
LCALLOPRK4;P2.4为低电平执行K5对应子程序
RET
SK5:
JBP2.5,SK6
LCALLDELAY;延时去除抖动
LCALLOPRK5
RET
SK6:
JBP2.6,SK7
LCALLDELAY;延时去除抖动
LCALLOPRK6
RET
SK7:
JBP2.7,NP3;换一次输出位
LCALLDELAY;延时去除抖动
LCALLOPRK7
RET
NP3:
MOVP0,#00H
MOVP2,#11111101B;P2.1口输出低电平,扫描K8,K9,KA,KB
LCALLDISLED1
SK8:
JBP2.4,SK9;P2.4为高电平扫描K8
LCALLDELAY;延时去除抖动
LCALLOPRK8;P2.4为低电平执行K8对应子程序
RET
SK9:
JBP2.5,SKA
LCALLDELAY;延时去除抖动
LCALLOPRK9
RET
SKA:
JBP2.6,SKB
LCALLDELAY;延时去除抖动
LCALLOPRKA
RET
SKB:
JBP2.7,NP4;换一次输出位
LCALLDELAY;延时去除抖动
LCALLOPRKB
RET
NP4:
MOVP0,#00H
MOVP2,#11111110B;P2.0口输出低电平,扫描KC,KD,KE,KF
LCALLDISLED0
SKC:
JBP2.4,SKD;P2.4为高电平扫描KC
LCALLDELAY;延时去除抖动
LCALLOPRKC;P2.7为低电平执行KC对应子程序
RET
SKD:
JBP2.5,SKE
LCALLDELAY;延时去除抖动
LCALLOPRKD
RET
SKE:
JBP2.6,SKF
LCALLDELAY;延时去除抖动
LCALLOPRKE
RET
SKF:
JBP2.7,NP5;换一次输出位
LCALLDELAY;延时去除抖动
LCALLOPRKF
RET
NP5:
RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;按键值,改变显示数据和流水灯速度
OPRK0:
MOVLED0,#0;显示管切换速度(值越大,速度越慢)
MOVDEL17,#1;流水灯切换速度(值越大,速度越慢)
RET
OPRK1:
MOVLED0,#1;显示管切换速度(值越大,速度越慢)
MOVDEL17,#1;流水灯切换速度(值越大,速度越慢)
RET
OPRK2:
MOVLED0,#2;显示管切换速度(值越大,速度越慢)
MOVDEL17,#2;流水灯切换速度(值越大,速度越慢)
RET
OPRK3:
MOVLED0,#3;显示管切换速度(值越大,速度越慢)
MOVDEL17,#3;流水灯切换速度(值越大,速度越慢)
RET
OPRK4:
MOVLED0,#4;显示管切换速度(值越大,速度越慢)
MOVDEL17,#4;流水灯切换速度(值越大,速度越慢)
RET
OPRK5:
MOVLED0,#5;显示管切换速度(值越大,速度越慢)
MOVDEL17,#5;流水灯切换速度(值越大,速度越慢)
RET
OPRK6:
MOVLED0,#6;显示管切换速度(值越大,速度越慢)
MOVDEL17,#6;流水灯切换速度(值越大,速度越慢)
RET
OPRK7:
MOVLED0,#7;显示管切换速度(值越大,速度越慢)
MOVDEL17,#7;流水灯切换速度(值越大,速度越慢)
RET
OPRK8:
MOVLED0,#8;显示管切换速度(值越大,速度越慢)
MOVDEL17,#8;流水灯切换速度(值越大,速度越慢)
RET
OPRK9:
MOVLED0,#9;显示管切换速度(值越大,速度越慢)
MOVDEL17,#9;流水灯切换速度(值越大,速度越慢)
RET
OPRKA:
MOVLED0,#10;显示管切换速度(值越大,速度越慢)
MOVDEL17,#10;流水灯切换速度(值越大,速度越慢)
RET
OPRKB:
MOVLED0,#11;显示管切换速度(值越大,速度越慢)
MOVDEL17,#11;流水灯切换速度(值越大,速度越慢)
RET
OPRKC:
MOVLED0,#12;显示管切换速度(值越大,速度越慢)
MOVDEL17,#12;流水灯切换速度(值越大,速度越慢)
RET
OPRKD:
MOVLED0,#13;显示管切换速度(值越大,速度越慢)
MOVDEL17,#13;流水灯切换速度(值越大,速度越慢)
RET
OPRKE:
MOVLED0,#14;显示管切换速度(值越大,速度越慢)
MOVDEL17,#14;流水灯切换速度(值越大,速度越慢)
RET
OPRKF:
MOVLED0,#15;显示管切换速度(值越大,速度越慢)
MOVDEL17,#15;流水灯切换速度(值越大,速度越慢)
RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;显示子程序
DISLED0:
MOVDPTR,#TAB
MOVA,LED0
MOVCA,@A+DPTR
MOVP0,A
NOP
RET
DISLED1:
MOVDPTR,#TAB
MOVA,LED1
MOVCA,@A+DPTR
MOVP0,A
NOP
RET
DISLED2:
MOVDPTR,#TAB
MOVA,LED2
MOVCA,@A+DPTR
MOVP0,A
NOP
RET
DISLED3:
MOVDPTR,#TAB
MOVA,LED3
MOVCA,@A+DPTR
MOVP0,A
NOP
RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;中断改变前三位显示子程序
XQ:
MOVTH0,#00H
MOVTL0,#00H
MOVR4,DEL
DECR4
MOVDEL,R4
CJNER4,#0,ENDRE
MOVDEL,#10
JBAK,APP
MOVLED3,#16;最高三位分别显示'-''4''2'
MOVLED2,#4
MOVLED1,#2
CPLAK
RETI
APP:
MOVLED3,#3;最高三位分别显示'3''8''-'
MOVLED2,#8
MOVLED1,#16
CPLAK
ENDRE:
RETI
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;廷时子程序
DELAY:
MOVR5,#1;
D1:
MOVR6,#200;
D2:
MOVR7,#200;
DJNZR7,$;
DJNZR6,D2;
DJNZR5,D1;
RET;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;段码表
TAB:
DB3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,77H,7CH,39H,5EH,79H,71H,40H,
;'0''1''2''3''4''5''6''7''8''9''A''B''C''D''E''F''-'
;012345678910111213141516
80H,73H,00H
'.''P'''
171819
END;结束程序
程序改进:
增加按键改变流水灯方向的功能,要实现这个功能,我们利用进出栈来延时,程序如下:
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;主程序
LOOP2:
POPACC
LOOP:
MOVP1,A
RLA
PUSHACC
MOVR1,DEL17;用DEL17来控制流水灯速度
D31:
MOVR2,#10
D21:
MOVR3,#100
D11:
LCALLSKLOOP
DJNZR3,D11
DJNZR2,D21
DJNZR1,D31;将A寄存器中的数从P1端口输出
JNBP3.2,LOOP1
POPACC;将A寄存器中的数向左移动一位
SJMPLOOP;跳转到LP标号循环
LOOP1:
POPACC
LOOP3:
MOVP1,A
RRA
PUSHACC
MOVR1,DEL17;用DEL17来控制流水灯速度
D61:
MOVR2,#10
D51:
MOVR3,#100
D41:
LCALLSKLOOP
DJNZR3,D41
DJNZR2,D51
DJNZR1,D61
JNBP3.3,LOOP2
POPACC;调用延时子程序A
LJMPLOOP3
8、实习小结
单片机应用实习小结
随着电子技术的发展,特别是随着大规模集成电路的产生,给人们的生活带来了根本性的变化,如果说微型计算机的出现使现代的科学研究得到了质的飞跃,那么可编程控制器的出现则是给现代工业控制测控领域带来了一次新的革命。
在现代社会中,温度控制不仅应用在工厂生产方面,其作用也体现到了各个方面。
本学期我们就学习了单片机这门课程,感觉是有点难呢。
也不知道整个学习过程是怎么过来得,可是时间不等人。
时光飞逝,一转眼,一个学期又进尾声了,本学期的单片机实习课题也在一周内完成了。
俗话说“好的开始是成功的一半”。
说这次实习,我认为最重要的就是做好程序调试,认真的研究老师给的题目。
其次,老师对实验的讲解要一丝不苟的去听去想,因为只有都明白了,做起产品就会事半功倍,如果没弄明白,就迷迷糊糊的去做,到头来一点收获也没有。
最后,要重视程序的模块化,修改的方便,也要注重程序的调试,掌握其方法。
虽然这次的实习算起来在实验室的时间只有几天,不过因为我们都有自己的实验板,所以在宿舍里做实验的时间一定不止三天。
硬件的设计跟焊接都要我们自己动手去焊,软件的编程也要我们不断的调试,最终一个能完成课程设计的劳动成果出来了,很高兴它能按着设计的思想与要求运动起来。
当然,这其中也有很多问题,第一、不够细心比如由于粗心大意焊错了线,由于对课本理论的不熟悉导致编程出现错误。
第二,是在学习态度上,这次课设是对我的学习态度的一次检验。
对于这次单片机综合课程实习,我的第一大心得体会就是作为一名工程技术人员,要求具备的首要素质绝对应该是严谨。
我们这次实习所遇到的多半问题多数都是由于我们不够严谨。
第三,在做人上,我认识到,无论做什么事情,只要你足够坚强,有足够的毅力与决心,有足够的挑战困难的勇气,就没有什么办不到的。
通过这次单片机实习,我不仅加深了对单片机理论的理解,将理论很好地应用到实际当中去,而且我还学会了如何去培养我们的创新精神,从而不断地战胜自己,超越自己。
创新可以是在原有的基础上进行改进,使之功能不断完善,成为真己的东西。
设计结果能够符合题意,成功完成了此次实习要求,我们不只在乎这一结果,更加在乎的,是这个过程。
这个过程中,我们花费了大量的时间和精力,更重要的是,我们在学会创新的基础上,同时还懂得合作精神的重要性,学会了与他人合作。
作为一名电子专业的学生,我觉得做单片机实习是十分必要的。
在已度过的大学时间里,我们大多数接触的是专业课。
我们在课堂上掌握的仅仅是专业课的理论知识,如何去锻炼我们的实践能力?
如何把我们所学的专业基础课理论知识运用到实践中去呢?
我想做类似实习就为我们提供了良好的实践平台。
首先在做本次实习的过程中,我感触最深的当属查阅大量的设计资料了。
为了让自己的设计更加完善,查阅这方面的设计资料是十分必要的,同时也是必不可少的。
我们是在做单片机实习,但我们不是艺术家,他们可以抛开实际尽情在幻想的世界里翱翔,而我们一切都要有据可依,有理可寻,不切实际的构想永远只能是构想,永远无法升级为设计。
其次,在这次课程设计中,我们运用到了以前所学的专业课知识,如:
汇编语言、模拟和数字电路知识等。
虽然过去从未独立应用过它们,但在学习的过程中带着问题去学我发现效率很高,这是我做这次课程设计的又一收获。
最后,在实习之前,我们要对所用单片机的内部结构有一个系统的了解,知道该单片机内有哪些资源;要有一个清晰的思路和一个完整的的软件流程图;在设计程序时,不能妄想一次就将整个程序设计好,反复修改、不断改进是程序设计的必经之路;要养成注释程序的好习惯,一个程序的完美与否不仅仅是实现功能,而应该让人一看就能明白你的思路,这样也为资料的保存和交流提供了方便;在实习过程中遇到问题是很正常的,但我们应该将每次遇到的问题记录下来,并分析清楚,以免下次再碰到同样的问题。
但是从中学到的知识会让我受益终身。
发现、提出、分析、解决问题和实践能力提高都会受益于我在以后的学习、工作和生活中。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 单片机 实验 报告
![提示](https://static.bdocx.com/images/bang_tan.gif)