1、1、实验目的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、编写程序:要求在灯移动的同时,蜂鸣器逐位报警。三、实验程序流程框图和程序清单延时程序流程框图:延时
2、程序入口设 置循环体1 的循环次数为设 置循环体2 的循环次数为设 置循环体3 的循环次数为判断循环体3 是否到达循环次数判断循环体2 是否到达循环次数判断循环体1 是否到达循环次数执行 循环体NY执行 循环体YN返回执行 循环体YN实验程序流程框图:开始初始化 # F E A , # F F P 1 , 设置循环 次 数为七次 ,( A ) P 1 , 延迟 左 移一位, ,P 3 . 0 清零 延迟 再将P 3 . 0 置1判断是 否循环7 次延迟, ( A ) P 1 , 左移一位, ,P 3 . 0 清零 延迟 再将P 3 . 0 置1判断是 否循环7 次N设置循 环次数为7 次YNY
3、结束 汇编程序:ORG 0000HMOV A, #11111110BMOV P3, #0FFHMAIN : MOV R0, #07H LOOP1: LCALL DELAYMOV P3, A RL A CLR P2.0LCALL DELAYSETB P2.0DJNZ R0, LOOP1MOV R0, #07H LOOP2: LCALL DELAYMOV P3, A RR A CLR P2.0LCALL DELAYSETB P2.0DJNZ R0, LOOP2 LJMP MAIN DELAY: MOV R7, #17HDL1: MOV R6, #98HDL0: MOV R5, #46HDJNZ R
4、5, $DJNZ R6, DL0DJNZ R7, DL1RETENDC 语言程序:#include#includeunsigned char temp; int i; void delay(void);sbit speaker=P20;void main() temp=0xfe; P3=temp; while(1) for(i=0;i0;c-)for(b=171;b0;b-)for(a=16;a0;a-);_nop_; 四:电路原理图:五:实验结果1. 2. 3. 4. 5. 6. 7. 8. 9. 10.11. 12.13. 14. 15. 16. 六、实验总结通过本次实验,我复习了 Pro
5、teus 软件的使用方法,学习了更多的对 KEIL 的调试方法,对 keil 和 Proteus 的使用更加熟悉了,通过用 Proteus 软件画图,熟悉了单片机电路基本的设计方法,掌握了单片机并行 I/O 口的直接应用方法,对子程序的调用左移、右移指令可以灵活的运用,同时对 keil 产生的 HEX 型的文件的有了新的认识和应用7、思考题1、编程实现 LED0 至 LED7 以十六进制计数规律亮灯 ?程序设计流程框图如下:开始初始化 # F F P 1 , # F F A ,( A ) P 1, ,P 3 . 0 清零 延迟 再将,P 3 . 0 置 1 再延时A 的内 容自减1汇编实验程序
6、:ORG 0000HMAIN: MOV P3, #256MOV A, #0FFHLOOP: MOV P3, ACLR P2.0LCALL DELAYSETB P2.0LCALL DELAYDEC ALJMP LOOPDELAY: MOV R7, #17HDL1: MOV R6, #98HDL0: MOV R5, #46HDJNZ R5, $DJNZ R6, DL0DJNZ R7, DL1RETENDC 语言程序: #include#includeunsigned char temp; int i; void delay(void);sbit speaker=P31;void main() P3=0X00;temp=0xFF; while(1) for(i=0;i0;c-)for(b=171;b0;b-)for(a=16;a0;a-);_nop_; 结果如下图所示:1. 2. 3. 4.5. 6.7. 8.9. 10.11. 12.