- 24
- 0
- 约2.3千字
- 约 11页
- 2021-01-10 发布于山东
- 举报
一、实验目的
、熟悉 Proteus 软件和 Keil 软件的使用方法 。
、熟悉单片机应用电路的设计方法 。
、掌握单片机并行 I/O 口的直接应用方法 。
、掌握单片机应用程序的设计和调试方法。二、设计要求
1 、 用 Proteus 软件 画出电路 原理图。 要求 在至口线 上分 别接
LED0至 LED7八个发光二极管,在口线上接一蜂鸣器。
、编写程序:要求 LED0至 LED7以秒速率循环右移。
、编写程序:要求 LED0至 LED7以秒速率循环左移。
、编写程序:要求在灯移动的同时,蜂鸣器逐位报警。三、实验程序流程框图和程序清单
延时程序流程框图 :
执行循环体
N
延时程序入口
设置循环体 1的循环次数为
设置循环体 2的循环次数为
设置循环体 3的循环次数为
判断循环体 3是否到达循环次
数
Y
判断循环体 2是否到达循环次
数
Y
判断循环体 1是否到达循环次
数
Y
返回
执行循环体
执行循环体
实验程序流程框图 :
开始
初始化
#FE A,#FF P1,设置
循环次数为七次
P1,延迟左移一位
P3.0清零 延迟 再将 N
P3.0置1
判断是否循环 7次
Y
Y
设置循环次数为 7次
延迟 ,(A) P1,左移一
位
P3.0清零 延迟 再将 N
P3.0置1
判断是否循环 7次
结束
汇编程序 :
ORG 0000H
MOV A, #B
MOV
P3,
#0FFH
MAIN : MOV
R0,
#07H
LOOP1: LCALL
DELAY
MOV
P3,
A
RL
A
CLR
LCALL
DELAY
SETB
DJNZ
R0,
LOOP1
MOV
R0,
#07H
LOOP2: LCALL
DELAY
MOV
P3,
A
RR
A
CLR
LCALL
DELAY
SETB
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;i7;i++)
{
temp=_crol_(temp,1);
speaker=0;
delay();
speaker=1;
delay();
P3=temp;
}
for(i=0;i7;i++)
{
speaker=0;
temp=_cror_(temp,1);
delay();
speaker=1;
delay();
P3=temp;
}
}
}
void delay(void)
{
unsigned char a,b,c;
for(c=167;c0;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.
六、实验总结
通过本次实验, 我复习了 Proteus 软件的使用方法, 学习了更多的对 KEIL 的调试方法,
对 keil 和 Proteus 的使用更加熟悉了,通过用 Proteus 软件画图,熟悉了单片机电路基本
的设计方法, 掌握了单片机并行 I/O 口的直接应用方法, 对子程序的调用左移、 右移指令可
以灵活的运用,同时对 keil 产生的 HEX型的文件的有了新的认识和应用
七、思考题
1、编程实现 LED0至 LED7以十六进制计数规律亮灯
程序设计流程框图如下:
开始
初始化
#FF P1,#FF A,
P1
P3.0清零 延迟 再将
P3.0置1 再延时
A的内容自减1
汇编实验程序:
ORG 0000H
MAIN: MOV
P3,
#256
MOV A, #0FFH
LOOP:
MOV
P3,
A
CLR
LCALL
DELAY
SETB
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
语言程序:
#include
#include
unsigned char temp;
int i;
void delay(void);
sbit speaker=P3^
原创力文档

文档评论(0)