标题: 51单片机指示灯循环控制实验 [打印本页]

作者: yingyin    时间: 2020-5-23 09:57
标题: 51单片机指示灯循环控制实验
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
}
}
}



作者: 135=ghyg    时间: 2020-5-24 10:34
刚好要做这个实验,多谢




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1