单片机原理及应用综合性实验报告.docx
- 文档编号:26930798
- 上传时间:2023-06-24
- 格式:DOCX
- 页数:21
- 大小:1.08MB
单片机原理及应用综合性实验报告.docx
《单片机原理及应用综合性实验报告.docx》由会员分享,可在线阅读,更多相关《单片机原理及应用综合性实验报告.docx(21页珍藏版)》请在冰豆网上搜索。
单片机原理及应用综合性实验报告
单片机原理及应用
综合性实验报告
姓名:
学号
班级:
指导教师:
单片机原理及应用实验报告
实验项目名称:
键盘、数码管显示综合实验
实验日期:
2014.12.22实验成绩:
实验评定标准:
1)实验报告是否按照规定格式
A()B()C()
2)实验内容及说明是否完整
A()B()C()
3)实验步骤及说明是否正确
A()B()C()
4)实验结果及分析是否合理
A()B()C()
1、实验目的
1.通过实验,掌握单片机在输入输出口线不够用时,怎样扩展接口的方法来支持8位LED显示和16键盘集成实现。
2.熟悉8255、8279等芯片性能;掌握其编程方法。
3.掌握键盘子程序调试方法,掌握按一个键并将键值显示出来的编程方法,这是诊断硬件、测试硬件、产品开发、软件编程必须掌握的方法。
2、实验器材
PC机一台以及Keil、Proteus软件
表1以8155为扩展方式的器件表
80C51.BUS
CRYSTAL
PHYC0402NP022P
7404
7SEG-MPX6-CC-BLUE
RESPACK-8
8155
HITEMP10U50V
BUTTON
MINRES10K
表2实验原理图元件清单表
元件名称
单片机
电容
晶振
数码管
扩展芯片
非门
排阻
按键
发光二级管
电阻
规格
89C52
30PF
12M
六位7段
8255
7404
220*8
Button*16
红、黄、绿各一个
3个10KΩ
3、实验内容
(1)基本内容
1.编写并调试出一个键盘实验子程序
2.用子程序调用方法,分别调用键盘子程序和显示子程序,将按一个键的键值,在数码管上显示出来。
3.通过8155芯片的扩展功能,建立描述线与数据线同步功能,如图3.1。
图3.1键盘显示器原理图
图3.2数码管管脚及电路连接图
(2)扩展内容
模拟控制以红、绿、黄3个发光二极管表示交通信号灯。
还有有两位数码倒计时显示。
具体要求:
上电红灯亮并且数码管倒计时30秒,最后5秒黄灯闪烁,倒计时完毕,绿灯亮并且数码管倒计时60秒,最后5秒黄灯闪烁,如此循环。
4、实验步骤
(1)仿真实验过程:
1.打开Keil程序,执行菜单命令“Project”à“NewProject”创建“键盘数码管显示综合实验”项目,并选择单片机型号为AT89C52.BUS。
图4.1创建工程
图4.2选择单片机类型
2.执行菜单命令“File”à“New”创建文件,输入源程序,保存为“键盘数码管显示综合实验.A51或键盘数码管显示综合实验.c”。
在“Project”栏的File项目管理窗口中右击文件组,选择“AddFilestoGroup‘SourceGroup1’”将源程序“键盘数码管显示综合实验.A51或键盘数码管显示综合实验.c”添加到项目中。
图4.3创建文件
图4.4添加源程序
3.执行菜单命令“Project”à“OptionsforTarget‘Target1’”,在弹出的对话框中选择“Output”选项卡,选中“GreateHEXFile”。
图4.5创建HEX文件
4.执行菜单命令“Project”à“BuildTarget”,编译源程序。
如果编译成功,则在“OutputWindow”窗口中显示没有错误,并创建了“键盘数码管显示综合实验.HEX”文件。
图4.6编译源程序
(2)软件仿真
在proteus仿真平台上建立如图3.1参考图系统,检查无误后,就编一段测试程序,仿真测试或固化测试均行,下面分别叙述。
①仿真调试
在PE状态下输入以下程序
②固化调试
固化后,按0-F键数码管应有显示。
并将程序上载到虚拟芯片上调试及运行。
(3)扩展功能实现
在proteus仿真平台上建立如图4.7参考图系统,并将程序上载到虚拟芯片上调试及运行。
图4.7交通灯仿真图
5、实验结果及分析
(1)实验结果
1.数码管显示键值运行结果
图5.1实验运行结果图
图5.2按键对应键值在数码管上显示(十六进制)
2.交通灯运行结果
图图5.3交通红、黄、绿灯倒计时显示
(2)实验结果分析
1.数码管显示键值结果分析
如图5.4所示,为键盘显示流程图,即为键盘控制数码管实现将按键值显示出来的程序思路。
在未按下任何键时,正常显示“1,2,3,4,5,6”。
将键盘以列划分,形成0、1、2、3列,键盘扫描按列纵向扫描完16个键盘,当按下对应的键时,便在第一个数码管上显示出如图3.1显示的当前对应的键值。
图5.4键盘显示程序框图
2.交通灯结果分析
下一个颜色灯亮
如下图5.5所示,是交通灯的程序流程图,从此图可以知道交通灯运行的过程,交通灯是两位数码管通过控制两个共阴脚进行静态显示,从而实现倒计时显示,三个彩灯通过中断转换状态。
图5.5交通灯程序流程图
(3)实验心得体会
1.这次的综合实验虽然比较复杂,但是通过这次努力地分析实现过程和询问老师,也通过自己以前参加比赛自学单片机的精神查找资料,最终完成了此次的实验,也完成了扩展功能,加强了我的过程设计能力,让我也更加熟悉proteus的仿真搭建。
2.通过此次实验,我掌握了单片机在输入输出口线不够用时,怎样用扩展接口的方法来支持8位LED显示和16键盘集成实现,也熟悉了8255等芯片性能,掌握了其编程方法。
3.我也掌握了键盘子程序调试方法,掌握按一个键并将键值显示出来的编程方法,这是诊断硬件、测试硬件、产品开发、软件编程必须掌握的方法。
比较可惜的是这次实验没能够进行硬件实践,硬件和软件仿真会有很大差别,仿真出来正确,可能实践出来就是不对的,如果做出来一个东西自己会很有成就感。
4.这次实验的线路比较复杂,一不小心可能就会出现错误,最开始我把程序下载到数码管显示键值的电路图的单片机上时,显示不出来,经过仔细检查了好久之后才排除了线路中的错误。
所以在实验过程中,细心仔细是必要的,否则会做很多无用功。
5.由于仿真和实际是有很大差别的,在做扩展功能交通灯时,最开始我写数码管倒计时显示时,在仿真上仿真是正确显示的,但是担心真正实践运用时会出现不知道的错误,后来就把程序改成了静态显示程序。
总之,这次实验收获很多,以后我也会自主地加强自己的仿真能力,也尝试加强自己的动手能力。
附录:
实验程序
(1)数码管显示键值:
8155芯片支持的扩展系统程序
ORG0000H
START:
LJMPMAIN
ORG0030H
MAIN:
MOVSP,#60H
MOV7AH,#00
MOV7BH,#01
MOV7CH,#02
MOV7DH,#03
MOV7EH,#04
MOV7FH,#05
MOVDPTR,#7300H;8155命令口地址
MOVA,#89H;置8155PA、PB口为输出,PC口为输入
MOVX@DPTR,A
LOOP:
LCALLDISP
LCALLKEY
MOVA,R4
CJNEA,#88H,DSP
SJMPLOOP
DSP:
MOV7AH,A;键值送入显示缓冲区单元7AH
MOV7BH,#010H
MOV7CH,#010H
MOV7DH,#010H
MOV7EH,#010H
MOV7FH,#010H
SJMPLOOP
;按键识别子程序
KEY:
MOVR4,#00H;0→键号寄存器R4
MOVR2,#01H;扫描模式01H→R2
KEY1:
MOVDPTR,#7100H
MOVA,R2
MOVX@DPTR,A;扫描模式→8155PB口
INCDPTR
movdptr,#7200H;
MOVXA,@DPTR;读8155PC口
JBACC.0,KEY2;0列无键闭合,转判1列
MOVA,#00H;0列有键闭合,0→A
AJMPKEY5
KEY2:
JBACC.1,KEY3;1列无键闭合,转判2列
MOVA,#01H;1列有键闭合,列线号01H→A
AJMPKEY5
KEY3:
JBACC.2,KEY4;2列无键闭合,转判3列
MOVA,#02H;2列有键闭合,02H→A
AJMPKEY5
KEY4:
JBACC.3,NEXT;3列无键闭合,转判下一行
MOVA,#03H;3列有键闭合,03H→A
KEY5:
ADDA,R4;列线号+(R4)作为键值→A
MOVR4,A;键值→R4
RET;返回
NEXT:
MOVA,R4;
ADDA,#04;键号寄存器加4
MOVR4,A
MOVA,R2
JBACC.3,NEXT1;判别是否已扫描到最后一行
RLA;扫描模式左移一位
MOVR2,A
AJMPKEY1;重新开始扫描下一行
NEXT1:
MOVR4,#88H;扫描到最后一行仍无按键置无键闭合标志
RET
;数码管显示组程序
DISP:
MOVR0,#7AH;置显示缓冲器指针初值
MOVR3,#01H;置扫描模式初值
DISPB1:
MOVDPTR,#7100H;8155PB口地址
MOVA,#0h;熄灭所有LED
MOVX@DPTR,A
MOVDPTR,#7000H;8155PA口地址
MOVA,@R0;取显示数据
ADDA,#014H;加偏移量
MOVCA,@A+PC;查表取段码
MOVX@DPTR,A;段码→8155PA口
MOVA,R3
MOVDPTR,#7100H;8155PB口地址
MOVX@DPTR,A;扫描模式→8155PB口
ACALLDELAY;延时
INCR0
MOVA,R3
JBACC.6,DISPB2;判6位LED显示完否
RLA;扫描模式左移1位
MOVR3,A
AJMPDISPB1
DISPB2:
MOVR3,#01H
RET
SEGPT2:
Db3fh,06h,5bh,4fh,66h,6dh,7dh,07h;段码表
db7fh,6fh,77h,7ch,39h,5eh,79h,71h
db00h,02h,08h,00h,59h,0fh,76h
;延时子程序
DELAY:
MOVR4,#0FFH
DELAY1:
DJNZR4,DELAY1
RET
END
(2)扩展内容:
交通灯显示
#include
#defineucharunsignedchar
#defineuintunsignedint
uchart=0;
ucharw=0;
codeuchartab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//数码管共阴
//codeuchartab[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};//数码管共阳
sbitd1=P1^1;//d1作为高位数码管
sbitd2=P1^2;//d2作为低位数码管
sbitred=P0^2;
sbitgreen=P0^1;
sbityellow=P0^0;
uinta=30;
uintb=30;
uintc=60;
uinti;//用于动态显示字符
uintj;//用于动态显示字符
voidinit()
{TMOD=0x01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
EA=1;
ET0=1;
TR0=1;
}
voiddelay(uintz)
{uinti;
for(i=0;i } voiddisplay(intc) {uinta=c; i=a/10; j=a%10; //以下是动态显示, d1=0;d2=1;//若是共阳,位选d1,d2取值相反 P2=tab[i]; delay(30); P2=0x00; delay(30); d1=1;d2=0;//若是共阳,位选d1,d2取值相反 P2=tab[j]; delay(30); P2=0x00; delay(30); } voidtimer0()interrupt1 { TR0=0; TH0=(65536-50000)/256; TL0=(65536-50000)%256; TR0=1; t++; if(t%10==0) { a=a-1;t=0; } if(a<=5&&t%2==0) { yellow=~yellow; if(a==0) {w++; red=~red;green=~green;yellow=0; if(w%2==1)a=c; elsea=b; } } } voidmain() {green=0; yellow=0; red=1; init(); while (1) { display(a); } }
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 单片机 原理 应用 综合性 实验 报告