流水灯在Proteus下的仿真实现

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

流水灯在Proteus下的仿真实现
重庆邮电大学
微处理器与嵌入式系统设计
课程实验报告
实验名称:流水灯在Proteus下的仿真实现
学期:2014-2015学年第2学期
班级:
学号:
学生姓名:
任课教师:
实验教室:
二〇一五年〇四月十四日
【实验名称】流水灯在proteus下的仿真实现
实验要求:
1、基本要求:4个流水灯循环闪烁,1、3、
2、4流水灯交替闪烁;
2、扩展要求:8个流水灯依次闪烁,1、
3、5、7、2、
4、6、8流水灯交替闪烁,流水灯逐渐亮1、1-2、1-3、1-4、1-
5、1-
6、1-
7、1-8。

实验目的:
1、熟悉proteus 软件,了解proteus 软件的结构组成和功能,掌握 Proteus软件在单片机仿真中的应用,为开发、调试单片机应用系统做准备;
2、熟练掌握 isis 环境中电路图的绘制;
3、熟悉keil c51软件的程序设计方法;
4、掌握keil c51软件与proteus软件联合仿真调试的方法。

实验方法:
1、通过proteus软件绘制出由单片机和LED构成的仿真电路;
2、通过keil软件编写控制单片机并点亮LED的程序;
3、将keil生成的hex文件导入proteus中的单片机中,实现仿真。

4、观察仿真现象。

实验步骤:
1、打开软件:双击ISIS 7 Professional 图标,随后就进入了 Proteus ISIS 集成环境。

2、添加元器件:单击pick from libraries,通过搜索栏搜索所需元件(如:AT89C52、LED),根据元件预览区域的显示,双击所需元件,元件则出现在原理图编辑环境的元件列表区。

用同样方法找出原理图所需全部元件。

3、放置元器件:在元件列表区单击所需放置的元件,将鼠标置于图形编辑窗口该对象的欲放位置,单击鼠标左键,该对象完成放置。

同样方法放置原理图所需全部元件。

4、放置电源和地:选择terminal mode选择电源和地,以放置元器件相同的放法放置电源和地。

5、连接电路。

6、编程:通过keil软件编写控制单片机并点亮LED的程序。

7、导入:将keil生成的hex文件导入proteus 中的单片机中,实现仿真。

8、根据仿真现象优化代码。

实验效果:
1、4个流水灯循环闪烁,1、3、
2、4流水灯交替闪烁;
2、8个流水灯依次闪烁,1、
3、5、7、2、
4、6、8流水灯交替闪烁,流水灯逐渐亮1、1-2、1-3、1-4、1-
5、1-
6、1-
7、1-8;
实验代码:
#include<reg52.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
uchar xx,i;
uchar code table[]={0xfe,0xfd,0xfb,0xf7}; void delayms(uint);
//延时
void delayms(uint z) {
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--); }
void main()
{
while(1)
{
//数组实现1、2、3、4个流水灯循环闪烁for(i=0;i<4;i++)
{
P0=table[i];
delayms(500);
}
//总线控制1、3、2、4流水灯交替闪烁P0=0xfe;
delayms(500);
P0=0xfb;
delayms(500);
P0=0xfd;
delayms(500);
P0=0xf7;
delayms(500);
//8个流水灯依次闪烁
xx=0xfe;
for(i=8;i>0;i--)
{
P0=xx;
delayms(500);
xx=_crol_(xx,1);
}
//1、3、5、7流水灯交替闪烁 xx=0xfe;
for(i=4;i>0;i--)
{
P0=xx;
delayms(500);
xx=_crol_(xx,2);
}
//2、4、6、8流水灯交替闪烁
xx=0xfd;
for(i=4;i>0;i--)
{
P0=xx;
delayms(500);
xx=_crol_(xx,2);
}
//流水灯逐渐亮1、1-2、1-3、1-4、1-5、1-6、1-7、1-8
xx=0xfe;
for(i=8;i>0;i--)
{
P0=xx;
delayms(500);
xx=xx<<1;
}
}
}
心得体会:
在实现实验要求时原打算使用循环移位函数,在真正实现时发现控制4个流水灯循环闪烁不同于控制8个流水灯,需要限制循环移动的位数,故使用了for循环进行限制。

在实现流水灯的过程中,进行思考,发现可以采用很多方法,如:位控制、总线控制还可以设置数组,每次在数组中去总线端口的数据闪烁LED。

在进行循环移位时要注意》移位每次补0。

流水灯实验并不困难,但在实现过程中的思考是从未有过的。

相关文档
最新文档