找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1971|回复: 1
打印 上一主题 下一主题
收起左侧

51单片机指示灯循环控制实验

[复制链接]
跳转到指定楼层
楼主
ID:758013 发表于 2020-5-23 09:57 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
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
}
}
}


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:759680 发表于 2020-5-24 10:34 | 只看该作者
刚好要做这个实验,多谢
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表