您的位置:首页 > 编程语言 > C语言/C++

基于proteus的51单片机仿真实例五十一、基于P2口的流水灯

2017-05-08 21:22 232 查看
1、本实例运行时,连接P2口的8个LED左右来回循环点亮。

2、在proteus中新建仿真文件ex39.dsn,输入以下电路图,本例中8个LED连接在P2端口,LED的阳极连接到端口,阴极通过限流电阻接地,对于P0端口,使用这种连接方式时,即使端口输出0xFF,LED也不会被点亮(想一想,这是为什么?)



3、程序设计:

由于本例中led采用的阳极接端口,阴极接地,所以只有相应端口输出1时,与之相对的LED才会被点亮。为产生单个LED循环滚动效果,P2口的初始值设置为0x01,这样先使第一个LED点亮,然后在主程序中使用循环移位函数实现8个led轮流点亮。

另外请注意:两个循环的次数是7次而不是8次,思考一下这是为什么?

在keil c51中新建工程ex39,输入以下程序代码,编译并生成ex39.hex文件:

//实例39:利用循环移位库函数在P2口实现流水灯

#include <reg51.h>                //包含头文件

#include <intrins.h>     //包含移位库函数头文件

void delay(void)      //延时函数

{

 unsigned char i,j;

 for(i = 0;i < 252;i++)

  for(j = 0;j < 252;j++);

}

void main(void)

{

  unsigned char i;

 P2 = 0x01;     //P2口初始化

 while(1)

 {

   for(i = 0;i < 7;i++)

  {

    P2 = _crol_(P2,1);    //P2端口向左循环移动1位

   delay();  

  }

  for(i = 0;i < 7;i++)

  {

    P2 = _cror_(P2,1);    //P2端口向右循环移动1位

   delay();  

  }

 }

}

 

4、将ex39.hex文件载入at89c51中,启动仿真,观察运行效果。下图是某一时刻的执行结果。



 

5、调试本例后,可以将LED改为共阳极连接,修改程序,观察运行结果,比较这两种接法的异同。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐