单片机并行IO口的应用实验
一、实验目的
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, #0FFH MAIN : 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
END
C语言程序:
#include
#include
unsigned char temp;
int i;
void delay(void);
sbit speaker=P2^0;
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 0000H
MAIN: MOV P3, #256
MOV A, #0FFH
LOOP: 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
#include
unsigned char temp;
int i;
void delay(void);
sbit speaker=P3^1;
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.