单片机并行IO口的应用实验(8页).doc
-一、 实验目的 1、熟悉Proteus软件和Keil软件的使用方法 。 2、熟悉单片机应用电路的设计方法 。 3、掌握单片机并行I/O口的直接应用方法 。 4、掌握单片机应用程序的设计和调试方法。 二、设计要求 1、用Proteus软件画出电路原理图。要求在P1.0至P1.7口线上分别接 LED0至LED7八个发光二极管,在P3.0口线上接一蜂鸣器。 2、编写程序:要求LED0至LED7以秒速率循环右移。 3、编写程序:要求LED0至LED7以秒速率循环左移。 4、编写程序:要求在灯移动的同时,蜂鸣器逐位报警。三、实验程序流程框图和程序清单 延时程序流程框图: 实验程序流程框图: 汇编程序: ORG 0000H MOV A, #11111110B MOV P3, #0FFHMAIN : MOV R0,#07H LOOP1: LCALL DELAY MOV P3, A RL A CLR P2.0 LCALL DELAY SETB P2.0 DJNZ R0, LOOP1 MOV R0,#07H LOOP2: LCALL DELAY MOV P3, A RR A CLR P2.0 LCALL DELAY SETB P2.0 DJNZ R0, LOOP2 LJMP MAIN DELAY: MOV R7,#17H DL1: MOV R6,#98H DL0: MOV R5,#46H DJNZ R5,$ DJNZ R6,DL0 DJNZ R7,DL1 RET ENDC语言程序:#include<reg52.h>#include<intrins.h> unsigned char temp; int i; void delay(void); sbit speaker=P20; void main() temp=0xfe; P3=temp; while(1) for(i=0;i<7;i+) temp=_crol_(temp,1);speaker=0; delay();speaker=1;delay(); P3=temp;for(i=0;i<7;i+) speaker=0; temp=_cror_(temp,1); delay(); speaker=1; delay(); P3=temp;void delay(void) unsigned char a,b,c; for(c=167;c>0;c-) for(b=171;b>0;b-) for(a=16;a>0;a-); _nop_; 四:电路原理图:五:实验结果1. 2. 3. 4. 5. 6. 7. 8. 9. 10.11. 12.13. 14. 15. 16. 六、实验总结通过本次实验,我复习了Proteus软件的使用方法,学习了更多的对KEIL的调试方法,对keil和Proteus的使用更加熟悉了,通过用Proteus软件画图,熟悉了单片机电路基本的设计方法,掌握了单片机并行I/O口的直接应用方法,对子程序的调用左移、右移指令可以灵活的运用,同时对keil产生的HEX型的文件的有了新的认识和应用七、 思考题1、编程实现LED0至LED7以十六进制计数规律亮灯 ? 程序设计流程框图如下:汇编实验程序: ORG 0000HMAIN: MOV P3, #256 MOV A, #0FFHLOOP: MOV P3, A CLR P2.0 LCALL DELAY SETB P2.0 LCALL DELAY DEC A LJMP LOOP DELAY:MOV R7,#17H DL1:MOV R6,#98H DL0:MOV R5,#46H DJNZ R5,$ DJNZ R6,DL0 DJNZ R7,DL1 RET END C语言程序: #include<reg52.h>#include<intrins.h>unsigned char temp; int i; void delay(void); sbit speaker=P31;void main() P3=0X00; temp=0xFF; while(1) for(i=0;i<0XFF;i+) speaker=0x00;delay(); speaker=0x01; P3=temp ; temp=temp-1; void delay(void) unsigned char a,b,c; for(c=167;c>0;c-) for(b=171;b>0;b-) for(a=16;a>0;a-); _nop_; 结果如下图所示:1. 2. 3. 4.5. 6.7. 8.9. 10.11. 12. -第 8 页-