单片机交流
直播中

小镇故事多

12年用户 439经验值
擅长:模拟技术
私信 关注
[问答]

如何利用AT89C51单片机实现简易流水灯设计?

如何利用AT89C51单片机实现简易流水灯设计?

回帖(1)

刘倩

2021-11-2 11:30:22
  一、功能介绍

  此程序是基于C51的程序编写,利用C语言进行编写,区别于汇编语言。
在进行单片机学习时,流水灯是基础的练习,了解单片机程序编程的基本语句。本文章的流水灯仅仅实现简单的单个LED依次亮灭。在后续文章会给出多种流水灯的实现方式。
  二、代码展示


#include
#include "intrins.h"//库文件名


#define uchar unsigned char
#define uint unsigned int//定义uchar和uint分别来代替无符号的字符型和整型变量
uchar  p1_data[]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe};//段码值,这里根据芯片与LED的连接次序来确定段码值


void DelayMs(uint n)//延时秒函数定义,这里使用的是晶振频率为12MHz,若为11.0592MHz,则j<113
{
  uchar j;
  while(n--)
  {for(j=0;j<123;j++);
  }
}


void main(void)//主函数编写
{ uchar i;
   while(1)//循环体
  {
    for(i=0;i<8;i++)
    {P1=p1_data;
        DelayMs(1000);


        }
   }
}
   三、仿真

  
  

  

  四、总结

  (一)思考题

  ①如何改变延时时间常数,使发光二极管闪亮时间改变?
  

void main(void)
{ uchar i;
   while(1)
  {
    for(i=0;i<8;i++)
    {P1=p1_data;
        DelayMs(400);


        }
   }
}
在这个void main(void)函数中,将最后一个DelayMs(400)中的400进行改变,比如在实验中将400改为1000使得发光二极管闪亮时间明显减慢。
  ②如何修改程序,使发光二极管移动方向改变?
         将uchar  p1_data[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};这串代码中的0xfe-0x7f改变顺序就会使发光二极管的移动方向发生改变,比如改成uchar  p1_data[]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe};发光二极管就会与原来发光二极管的移动方向正好相反。   (二)注意的问题

  ①在控制灯亮灭的时候要注意码值对应;
②仿真时注意设置生成hex文件的相关参数。
举报

更多回帖

×
20
完善资料,
赚取积分