实验三P3完整版本.3口输入、P1口输出实验_第1页
实验三P3完整版本.3口输入、P1口输出实验_第2页
实验三P3完整版本.3口输入、P1口输出实验_第3页
实验三P3完整版本.3口输入、P1口输出实验_第4页
实验三P3完整版本.3口输入、P1口输出实验_第5页
全文预览已结束

下载本文档

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

文档简介

实验三4.1P3.3口输入、P1口输出实验系别专业:电子系12级电信2班学号:3121003210姓名:李书杰指导老师:刘志群老师4.1.1实验要求1.复习KeilC51调试硬件的操作方法。2.复习单片机作为通用I/O口的注意事项。3.复习单片机操作I/O口的程序设计方法。4.1.2实验设备PC机一台,TD-NMC+教学实验系统4.1.3实验目的1.熟悉单片机仿真实验软件KeilC51调试硬件的方法。2.了解P3、P1口作通用I/O口的使用方法。3.掌握延时子程序的编写和使用方法。4.了解单片机对简单I/O的扩展方法。4.1.4实验内容实验1根据TD-NMC+实验平台的单元电路,构建一个硬件系统,并编写实验程序实现如下功能:将P1口的低4位定义为输出,高4位定义为输入,数字量从P1口的高4位输入,从P1口的低4位输出控制发光二极管的亮灭。程序如下:KEY:MOVP1,#0F0H;令所有行为低电平KEY1:MOVR7,#0FFH;设置计数常数 DJNZR7,KEY1;延时MOVA,P1;读取P1口的列值ANLA,#0F0H;判别有键值按下吗?CPLA;求反后,有高电平就有键按下JZEKEY;无键按下时退出LCALLDEL20ms;延时20ms去抖动SKEY:MOVA,#00;下面进行行扫描,1行1行扫 MOVR0,A;R0作为行计数器,开始为0MOV R1,A;R1作为列计数器,开始为0MOV R3#0FEH;R3暂存行扫描字,低4位为行扫描字SKEY2:MOVA,R3MOVP1,A;输出行扫描字,高4位全1NOPNOPNOPMOV A,P1;读列值 MOV R1,A;暂存列值 ANL A,#0F0H;取列值 CPL A;高电平则有键闭合S123:JNZ SKEY3;有键按下转SKEY3 INC R0;行计数器加1 SETB C;准备将行扫描左移1位,;形成下一行扫描字,C=1保证输出行扫描字中高4位全为1,;为列输入作准备,低4位中只有1位为0 MOV A,R3;R3带进位C左移1位 RLC A MOV R3,A;形成下一行扫描字→R3 MOV A,R0 CJNE A,#04H,SKEY1;最后一行扫(4次)完了吗?EKEY:RET;列号译码SKEY3:MOVA,R1 JNB ACC.4,SKEY5 JNB ACC.5,SKEY6 JNB ACC.6,SKEY7 JNB ACC.7,SKEY8 AJMP EKEYSKEY5:MOV A,#00H MOV R2,A;存0列号 AJMP DKEYSKEY6:MOV A,#01H MOV R2,A;存1列号 AJMP DKEYSKEY7:MOV A,#02H MOV R2,A;存2列号 AJMP DKEYSKEY8:MOV A,#03H MOV R2,A;存3列号 AJMP DKEY;键位置译码DKEY:MOVA,R0;取行号 ACALL DECODE AJMP EKEY;键值(键号)译码DECODE:MOV A,R0;取行号送A MOV B,#04H;每一行按键个数 MUL AB;行号×按键数 ADD A,R2;行号×按键数+列号=键值 RET实验2根据TD-NMC+实验平台的单元电路,构建一个硬件系统,并编写实验程序实现如下功能:将P3.3口作状态输入口(接一个逻辑开关,即拨码开关),P1口做输入口(接八只发光二极管D0~D7)。当P3.3=1时循环轮流点亮一个LED灯;当P3.3=0时循环轮流点亮相邻两个LED灯。程序如下:BUFFEQU30HKEYADR:MOVA,BUFF;键号→ACJNEA,#0FH,KYARD1AJMPDIGPRO;等于F,转数字键处理KYARD1:JCDIGPRO;小于F,转数字键处理KEYTBL:MOVDPTR,#JMPTBL;送功能键地址表指针CLRC;请进位位SUBBA,#10H;功能键值(10H~1FH)减16RLA;(A)×2,使(A)为偶数:0,2,4,…JMP@A+DPTR;转相应的功能键处理程序JMPTBL:AJMPAAAAJMPBBBAJMPCCCAJMPDDDAJMPEEEAJMPFFFAJMPGGGAJMPHHHAJMPIIIAJMPJJJJAJMPKKKAJMPLLLAJMPMMMAAA:DIS: MOV R0,#7EH;显示缓冲区末地址→R0 MOV R2,#01H;位控字,先点亮最低位(右边) MOV A,R2 MOV DPTR,#TAB;字型表头地址→DPTRLP0: MOV P1,A MOV A,@R0;取显示数据 MOVC A,@A+DPTR;取出字形码 MOV P0,A;送出显示 ACALL D1MS;调延时子程序 DEC R0;数据缓冲区地址减1 MOV A,R2 JB ACC.5,LP1;扫描到最左面的显示器了吗? RL A;没有到,左移1位 MOV R2,A AJMP LP0LP1: RETTAB: DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH DB 6FH,77H,7CH,39H,5EH,79H,71H,40H,00HD1MS: MOV R7,#02H;延时1ms子程序DL: MOV R6,#0FFHDL1: DJNZ R6,DL1 DJNZ R7,DL RET4.1.5实验单元电路及连线开关及LED显示单元4.1.6实验说明1、P1口是准双向口,作输出口时与一般的双向口使用方法相同。由准双向口结构可知当P1口作输入口时,必须先对它置高电平,同时内接上拉电阻(20KΩ~40KΩ),使内部MOS截止,这样对外部输入不会产生影响,否则会使读入的数据不正确。2、由于机械键盘的抖动作用,常常通过硬件RS或软件延时的方法去除机械抖动。使用软件延时方法时注意延时子程序的编写。3、发光二极管的需要5~10mA的驱动电流,1.7~2.4V的驱动电压。4、循环轮流点亮LED,可以通过循环移位指令实现。4.1.7思考题1.8051系列单片机的四个并行口可以作准双向I/O使用,当它们作为输入口时,必须先向端口输入高电平,为什么?解:I/O是开漏的,如果输入低电平,该口无论输入高低电平都会被拉至低,所以电平,也就无法正确识别输入电平。编写按键(如拨码开关)程序时,应注意什么问题?解:根据不同的拨码开关状态,在程序里写相应拨码开关的程序。若系统晶振为12MHz,试编写一个延时10ms的程序段

温馨提示

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

评论

0/150

提交评论