第(2)次实验报告_第1页
第(2)次实验报告_第2页
第(2)次实验报告_第3页
第(2)次实验报告_第4页
第(2)次实验报告_第5页
已阅读5页,还剩3页未读 继续免费阅读

付费下载

下载本文档

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

文档简介

《单片机基础》第2次实验报告实验内容实验十P1口应用实验(实验手册P29页)实验目的熟悉单片机P1口作为输入、输出口的使用方法姓名学号实验箱编号01班级电信12一、实验准备在D:盘根目录下创建一个以“学号”命名的空文件夹,并将这个空文件夹复制并粘贴到1/李俊萩/上传/单片机实验报告(电信12)/。将“C:\Keil\单片机实验程序”路径下的ZYP1.ASM文件复制到D:盘刚才创建的空文件夹里。在KeilC51环境下新建一个名为“ZYP1”的工程,并按照《单片机实验说明》文档中的第8步进行工程属性的设置。将汇编源程序“ZYP1.ASM”添加到新创建的工程里。编译程序,并进行仿真调试。二、该实验实现的功能开关LED灯K3 K2 K1 K00 0 0 00 0 0 10 0 1 00 0 1 10 1 0 00 1 0 11 x x xL3 L2 L1 L0全亮全暗一灯亮,其余灯暗,左环移一灯亮,其余灯暗,右环移一灯暗,其余灯亮,左环移一灯暗,其余灯亮,右环移显示开关状态,如果Ki=0则Li灯亮注意:LED灯是共阳极接法,0亮1灭 ORG 0STRT: MOV A,P1;(A)=(P1) SWAP A ;将A的高,低4个字节互换 ANL A,#0FH ;A与上0F,得到的值放在A中 MOV 41H,A ;(41H)=(A)MOV 40H,#0FFH ;(40H)=(0FFH)MLP0: ;MLP0标号开始的程序段实现分支选择,根据各种开关状态控制LED灯的亮灭CJNE A,#6,$+3 ;A中的值与6比较,无论等与不等都执行下条语句 JNC PK6 ;若(A)>6,则跳转到PK6 MOV DPTR,#CTAB ;若(A)<6,则将CTAB的首地址给DPTR MOV R1,A ;(R1)=(A) RL A ;将A左移1位 ADD A,R1 ;(A)=(A)+(R1) JMP @A+DPTR ;指令跳转到(A中的值+DPTR中的值)CTAB: LJMP PK0 ;长跳转到PK0 LJMP PK1 ;长跳转到PK1 LJMP PK2 ;长跳转到PK2 LJMP PK3 ;长跳转到PK3 LJMP PK4 ;长跳转到PK4 LJMP PK5 ;长跳转到PK5PK6: ;PK6标号开始的程序段处理“开关值>6”的情况——MOV 42H,A ;(42H)=(A)LJMP MLP1 ;长跳转到MLP1PK5: ;PK5标号开始的程序段处理“开关值==5”的情况——MOV A,40H ;(A)=(40H) CJNE A,#0FFH,PK51 ;A中的值与FFH比较,不等则跳转到PK51 MOV 42H,#01 ;(42H)=01 LJMP MLP1 ;长跳转到MLP1PK51: MOV A,42H ;(A)=(42H) LCALL RR7 ;长调用指令RR7 ANL A,#0FH ;A中的值与上FH,得到的值放在A中 JNZ PK52 ;若A中的值不等于0,则跳转到PK52 MOV A,#1 ;若A中的值等于0,则(A)=1PK52: MOV 42H,A ;(42H)=(A) LJMP MLP1 ;长跳转到MLP1PK4: ;PK4标号开始的程序段处理“开关值==4”的情况——MOV A,40H ;(A)=(40H) CJNE A,#0FFH,PK41 ;A中的值与FFH比较,不等则跳转到PK41 MOV 42H,#1 ;(42H)=1 LJMP MLP1 ;长跳转到MLP1PK41: MOV A,42H ;(A)=(42H) LCALL RL9 ;长调用指令RL9 ANL A,#0FH ;A中的值与上FH,得到的值放在A中 JNZ PK42 ;若A中的值不等于0,则跳转到PK42 MOV A,#1 ;若A中的值等于0,则(A)=1PK42: MOV 42H,A ;(42H)=(A) LJMP MLP1 ;长跳转到MLP1PK3: ;PK3标号开始的程序段处理“开关值==3”的情况——MOV A,40H ;(A)=(40H)=FFH CJNE A,#0FFH,PK31 ;A中的值与FFH比较,不等,则跳转到PK31 MOV 42H,#0FEH ;(42H)=FE LJMP MLP1 ;长跳转到MLP1PK31: MOV A,42H ;(A)=(42H) LCALL RR7 ;长调用指令RR7 ANL A,#0FH ;A与上0F,得到的值放在A中 CJNE A,#0FH,PK32 ;A中的值与FH比较,不等,则跳转到PK32 MOV A,#0FEH ;A中的值与FH比较,相等,则(A)=(FEH)PK32: ORL A,#0F0H ;A中的值或上F0的值,放在A中 MOV 42H,A ;(42H)=(A) LJMP MLP1 ;长跳转到MLP1PK2: ;PK2标号开始的程序段处理“开关值==2”的情况——MOV A,40H CJNE A,#0FFH,PK21 MOV 42H,#0FEH LJMP MLP1 PK21: MOV A,42H RL A ANL A,#0FH CJNE A,#0FH,PK22 MOV A,#0FEH PK22: ORL A,#0F0H MOV 42H,A LJMP MLP1 PK1: ;PK1标号开始的程序段处理“开关值==1”的情况——MOV 42H,#0FH ;(42H)=(FH) LJMP MLP1 ;长跳转到MLP1PK0: ;PK0标号开始的程序段处理“开关值==0”的情况——MOV 42H,#0 ;(42H)=(0)MLP1: ;MLP1标号开始的程序段是根据(42H)单元存放的数值控制LED灯的亮灭MOV A,42H ;(A)=(42H)=FEH ORL A,#0F0H ;A中的值或上F0的值,放在A中 MOV P1,A ;(P1)=(A) MOV R7,#0 ;(R7)=0 MOV R6,#0 ;(R6)=0DEL1: DJNZ R6,DEL1 ;R6减1不为0,则跳转到DEL1 DJNZ R7,DEL1 ;R7减1不为0,则跳转到DEL1 MOV A,P1 ;(A)=(P1),输入开关值 SWAP A ;将A中的高、低4位字节互换 ANL A,#0FH ;A中的值与上0F,得到的值放在A中 CJNE A,41H,MLP2;A中的值与41H(原开关的值)比较,不等则跳转到MLP2 MOV 40H,#0 ;若A中的值与41H的值相等,则40H中放0 LJMP MLP0 ;长跳转到MLP0MLP2: ;MLP2标号开始的程序段是处理开关值有变化的情况MOV 41H,A ;(42H)=(A) MOV 40H,#0FFH ;(40H)=(FFH) LJMP MLP0 ;长跳转到MLP0RR9: RR A ;A右移一位 RR ARR7: RRA ;A右移一位 RRA RRA RRA RRA RRA RRA RETRL9: RL A ;A左移一位 RL ARL7: RLA ;A左移一位 RLA RLA RLA RLA RLA RLA RET END三、将C源程序粘贴在此处(为每个子函数添加功能性注释) #include<reg51.h>#include<intrins.h>//----------------------------------------------------------------//功能:// K3 K2 K1 K0 L3 L2 L1 L0// 0 0 0 0 全亮// 0 0 0 1 全暗// 0 0 1 0 一灯亮,其余灯暗,左环移// 0 0 1 1 一灯亮,其余灯暗,右环移// 0 1 0 0 一灯暗,其余灯亮,左环移// 0 1 0 1 一灯暗,其余灯亮,右环移// 1 x x x 显示开关状态,如果Ki=0则Li灯亮// 注意:LED灯是共阳极接法,0亮1灭。以P1口实现该功能,//高四位接开关,低四位接LED灯L3、L2、L1、L0。//----------------------------------------------------------------voidAllLight(); //k3,k2,k1,k0=0实现全亮voidAllNotLight(); //k3,k2,k1=0,k0=1实现全暗voidOneLightLeftCycle();//k3,k2,k0=0,k1=1实现一灯亮,其余灯暗,左环移voidOneLightRightCycle();//k3,k2=0,k1,k0=1实现一灯亮,其余灯暗,右环移voidOneNotLightLeftCycle();//k3,k0=0,k1,k2=1实现一灯暗,其余灯亮,左环移voidOneNotLightRightCycle();//k3,k1=0,k2=0,k0=1实现一灯暗,其余灯亮,右环移voidTempFun(); //空方法voidKeyStyle(unsignedcharKEY);//实现开关状态voidDelay();//延时方法voidmain(void){ unsignedchartemp,KEY; while(1){ temp=P1; KEY=P1&0xf0; switch(KEY){ case0x00:AllLight();break; case0x10:AllNotLight();break; case0x20:OneLightLeftCycle();break; case0x30:OneLightRightCycle();break; case0x40:OneNotLightLeftCycle();break; case0x50:OneNotLightRightCycle();break; case0x60: case0x70:TempFun();break; default:KeyStyle(KEY); } P1=0xf0|temp; }}//-------------------------------------------------------//实现功能的函数//-------------------------------------------------------//k3,k2,k1,k0=0实现全亮voidAllLight(){ P1=0x00;}//k3,k2,k1=0,k0=1实现全暗voidAllNotLight() { P1=0x0f;}//k3,k2,k0=0,k1=1实现一灯亮,其余灯暗,左环移voidOneLightLeftCycle(){ staticunsignedcharled=0xfe; P1=led; led=_crol_(led,1); if(0x0f==(0x0f&led))led=0xfe; Delay();}//k3,k2=0,k1,k0=1实现一灯亮,其余灯暗,右环移voidOneLightRightCycle(){ staticunsignedcharled=0xf7; P1=led; led=_cror_(led,1); if(0x0f==(0x0f&led))led=0xf7; Delay();}//k3,k0=0,k1,k2=1实现一灯暗,其余灯亮,左环移voidOneNotLightLeftCycle(){ staticunsignedcharled=0xf1; P1=led; led=_crol_(led,1); if(P1==0xf8)led=0xf1; Delay();}//k3,k1=0,k2=0,k0=1实现一灯暗,其余灯亮,右环移voidOneNotLightRightCycle(){staticunsignedcharled=0xf8; P1=led; led=_cror_(led,1); if(P1==0xf1)led=0xf8; Delay();}//空方法voidTempFun(){}//实现K3开关控制状态voidKeyStyle(unsignedcharKEY){ switch(KEY){ case0x80:P1=0x07;break; case0x90:P1=0x06;break; case0xa0:P1=0x05;break; case0xb0:

温馨提示

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

评论

0/150

提交评论