1. 实验目的
熟悉 Proteus 仿真软件,掌握单片机原理图的绘图方法;熟悉 uVision3 编
译软件,掌握 C51 编程与调试方法。
2. 实验内容
(1)熟悉 Proteus 软件,了解软件的结构组成与功能;
(2)熟悉 uVision3 编译软件,了解软件的结构组成与功能;
(3)学习 C51 语言的程序设计方法;
(4)学会在 uVision3 中进行 C51 程序录入、编译和调试;
(5)理解 Proteus 与 Keil 联合仿真原理,实现 LED 指示灯循环控制功能。
3. 实验步骤
① 按照下图,在 ISIS 中绘制电路原理图,将元件添加到编辑环境中;
② 在 uVision3 中编写 C51 程序;
③ 利用 uVision3 的编译调试功能检查程序的语法和逻辑错误;
④ 下载可执行文件,在 Proteus 中观察仿真结果,检验程序的正确性。
图中8只 LED 指示灯接于P1口,且都接有上拉电阻。时钟电路、复位电路与前面的实验电路相同。
在编程软件的配合下,要求实现如下功能:8只LED做循环点亮控制,且亮灯顺序为D1→D2→D3→…→D8→D7→…→D1,无限循环,两次亮灯的时间间隔约为0.5s。
软件编程原理为:
首先使 P1.0←0,其余端口←1,这样可使最右侧D1灯亮,其余灯灭;软件延时0.5s 后,使 P1 口整体左移 1 位,得到 P1.1←0,其余端口←1,这样可使 D2 灯亮其余灯灭;照此思路 P1 整体左移7次,再右移7次,如此无限往复即可实现上述功能。
4. 实验程序
#include <reg51.h>
unsigned char led[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f}; //LED灯的花色数据
void delay(unsigned int time) //延时函数
{unsigned int j=0;
for(;time>0;time--)
for(j=0;j<125;j++);
}
void main()
{char i;
while(1)
{
for(i=0;i<=8;i++) //从右向左循环控制(变量i的初值为1,终值小于8,增量为+1)
{P1=led[ i];
delay(300); //调用函数delay,传入参数值为300ms
}
for(i=7;i>1;i--) //从左往右循环控制(变量i的初值为7,终值大于1,增量为-1)
{P1=led[i-1];
delay(300); //调用函数delay,传入参数值为300ms
}
}
}
|