键盘、数码管显示综合实验_第1页
键盘、数码管显示综合实验_第2页
键盘、数码管显示综合实验_第3页
键盘、数码管显示综合实验_第4页
键盘、数码管显示综合实验_第5页
已阅读5页,还剩6页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、单片机原理及应用实验报告姓 名: 学 号 班 级: 指导教师: 许 强 单 片 机 原 理 及 应 用 实 验 报 告实验项目名称: 键盘、数码管显示综合实验 实验日期: 2013.12.10 实验成绩: 实验评定标准:1)实验报告是否按照规定格式A( )B( )C( )2)实验内容及说明是否完整A( )B( )C( )3)实验步骤及说明是否正确A( )B( )C( )4)实验结果及分析是否合理A( )B( )C( )一、 实验目的 通过实验,掌握单片机在输入输出口线不够用时,怎样扩展接口的方法来支持8位LED显示和16键盘集成实现。 熟悉8155、8279等芯片性能;掌握其编程方法。掌握键盘

2、子程序调试方法,掌握按一个键并将键值显示出来的编程方法,这是诊断硬件、测试硬件、产品开发、软件编程必须掌握的方法。二、 实验器材安装有keil uVision和proteus软件的PC机一台以8155为扩展方式的器件80C51.BUS CRYSTAL PHYC0402NP022P7404 7SEG-MPX6-CC-BLUERESPACK-88155 HITEMP10U50VBUTTON MINRES10K三、 实验内容 编写并调试出一个键盘实验子程序; 用子程序调用方法,分别调用键盘子程序和显示子程序,将按一个键的键值(0 F),在数码管上显示出来。四、 实验步骤 (1)仿真实验过程: 打开K

3、eil程序,执行菜单命令“Project”“New Project”创建“键盘数码管显示综合实验”项目,并选择单片机型号为AT89C52.BUS。 执行菜单命令“File”“New”创建文件,输入源程序,保存为“键盘数码管显示综合实验.A51或键盘数码管显示综合实验.c”。在“Project”栏的File项目管理窗口中右击文件组,选择“Add Files to Group Source Group1”将源程序“键盘数码管显示综合实验.A51或键盘数码管显示综合实验.c”添加到项目中。 执行菜单命令“Project”“Options for Target Target 1”,在弹出的对话框中选择

4、“Output”选项卡,选中“Greate HEX File”。 执行菜单命令“Project” “Build Target” , 编译源程序。 如果编译成功, 则在 “Output Window”窗口中显示没有错误,并创建了“键盘数码管显示综合实验.HEX”文件。 在proteus仿真平台上建立如图2.5.5(1)或图2.5.5(2)参考图系统,并将程序上载到虚拟芯片上调试及运行。 (2)实作实验 (1)线路连接 按图2.5.5(1)或图2.5.5(2)将组合最小系统板、14 脚插座板、20 脚插座板、六位数显板、按键拼集成焊接,并连好每条线,检查无误后,进行下一步。 (2)硬件好坏诊断 由

5、于键盘电路比较特殊,按键有没有效,要用软硬件综合考虑、检测,一般的方法是先用万用表欧姆档测量一下,线是否连好,若连好了,就编一段测试程序,仿真测试或固化测试均行,下面分别叙述。 仿真调试 在PE 状态下输入以下程序 固化调试 固化后,按0F 键数码管应有显示。五、 实验结果及分析8255修改后:8155汇编程序: ORG 0000HSTART: LJMP MAIN ORG 0030HMAIN: MOV SP,#60H MOV 7AH,#00 MOV 7BH,#01 MOV 7CH,#02 MOV 7DH,#03 MOV 7EH,#04 MOV 7FH,#05 MOV DPTR,#7F00H;8

6、155命令口地址 MOV A,#03H MOVX DPTR,ALOOP: LCALL DISP LCALL KEY MOV A,R4 CJNE A,#88H,DSP SJMP LOOPDSP: MOV 7AH,A;键值送入显示缓存区单元7AH MOV 7BH,#010H MOV 7CH,#010H MOV 7DH,#010H MOV 7EH,#010H MOV 7FH,#010H SJMP LOOP ;按键识别子程序KEY: MOV R4,#00H MOV R2,#01HKEY1: MOV DPTR,#7F02H MOV A,R2 MOVX DPTR,A INC DPTR MOVX A,DPT

7、R JB ACC.0,KEY2 MOV A,#00H AJMP KEY5KEY2: JB ACC.1,KEY3 MOV A,#01H AJMP KEY5KEY3: JB ACC.2,KEY4 MOV A,#02H AJMP KEY5KEY4: JB ACC.3,NEXT MOV A,#03HKEY5: ADD A,R4 MOV R4,A RETNEXT: MOV A,R4 ADD A,#04 MOV R4,A MOV A,R2 JB ACC.3,NEXT1 RL A MOV R2,A AJMP KEY1NEXT1: MOV R4,#88H RET ;数码管显示组程序DISP: MOV R0,#

8、7AH MOV R3,#01HDISPB1: MOV DPTR,#7F02H MOV A,#0H MOVX DPTR,A MOV DPTR,#7F01H MOV A,R0 ADD A,#014H MOVC A,A+PC MOVX DPTR,A MOV A,R3 MOV DPTR,#7F02H MOVX DPTR,A ACALL DELAY INC R0 MOV A,R3 JB ACC.6,DISPB2 RL A MOV R3,A AJMP DISPB1DISPB2: MOV R3,#01H RETSEGPT2: Db 3fh,06h,5bh,4fh,66h,6dh,7dh,07h db 7fh

9、,6fh,77h,7ch,39h,5eh,79h,71h db 00h,02h,08h,00h,59h,0fh,76h ;延时子程序DELAY: MOV R4,#0FFHDELAY1: DJNZ R4,DELAY1 RET ENDC语言:#include#include#includetypedef unsigned int uint;typedef unsigned char uchar;#define com8255 XBYTE0x7fff#define PA8255 XBYTE0x7cff#define PB8255 XBYTE0x7dff#define PC8255 XBYTE0x7e

10、ffsbit gw=P10;sbit sw=P11;uchar code scancode4=0xfe,0xfd,0xfb,0xf7; uchar code ledlight=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71;uchar temp;void delay(uint i)uint j;while(i-) for(j=0;j125;j+); void init8255(void)com8255=0x82;void scan()uchar tem;PC8255=0x00;tem

11、=PB8255; if(tem) delay(10);PC8255=0x00;tem=PB8255; if(tem) PC8255=scancode0; tem=PB8255; if(tem) switch(tem) case 0xfe:temp=0;break; case 0xfd:temp=4;break; case 0xfb:temp=8;break; case 0xf7:temp=12;break; while(tem) PC8255=scancode0; tem=PB8255; PC8255=scancode1; tem=PB8255; if(tem) switch(tem) cas

12、e 0xfe:temp=1;break; case 0xfd:temp=5;break; case 0xfb:temp=9;break; case 0xf7:temp=13;break; while(tem) PC8255=scancode1; tem=PB8255; PC8255=scancode2; tem=PB8255; if(tem) switch(tem) case 0xfe:temp=2;break; case 0xfd:temp=6;break; case 0xfb:temp=10;break; case 0xf7:temp=14;break; while(tem) PC8255

13、=scancode2; tem=PB8255; PC8255=scancode3; tem=PB8255; if(tem) switch(tem) case 0xfe:temp=3;break; case 0xfd:temp=7;break; case 0xfb:temp=11;break; case 0xf7:temp=15;break; while(tem) PC8255=scancode3; tem=PB8255; void Delay10us()/12.000MHzunsigned char i;_nop_();_nop_();i = 27;while (-i);void display() if(temp=10) PA8255=ledlighttemp/10;sw=0;Delay10us();sw=1;PA8255=ledlighttemp-10;gw=0;Delay10us();gw=1;void main()init8255();while(1) scan(); display(); 自由状态:按下键时:实验结果分析: 本实验通过8155芯片的扩

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论