程序简单花样齐全的流水灯

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

利用单片机实现五种花样流水灯

1.硬件电路图设计

本文仿真软件采用Proteus和Keil C51。其中Keil Proteus可以仿真、分析(SPICE)各种模拟器件和集成电路,C51可完成程序的编译链接和仿真调试,并能生成hex文件。通过Keil C51与Proteus的联调便可实现仿真实验。

硬件电路采用单片机最小系统(晶振电路+复位电路),利用P0口作为数据输出端口。由于P0口是一个8位漏极开路的的双向I/O口,必需外接上拉电阻才能有高电平输出。当单片机输出高电平时对应的LED灯熄灭,当输出低电平时则点亮。

2.C语言程序

程序定义了五个数组分别对应五种不同的花样流水灯方式,其中每个数组中的每个元素控制P0口的壮态,从而控制每个LED灯的壮态。另外,程序将流水灯每个壮态的间隙时间进行了宏定义,这使得修改每个壮态的保持时间十分方便。

#include //包含单片机头文件

#define uint unsigned int

#define uchar unsigned char

#define DataPort P0 //定义P0为数据输出端口

#define TIME 30 //设定流水灯每个状态的间隙时间

/************us级延时程序*************/

void Delayus2x(uint n)

{

while(--n);

}

/***********ms级延时程序*************/

void Delayms(uint n)

{

while(--n)

{Delayus2x(245);Delayus2x(245);}

}

/********************五个数组分别对应五种不同的流水灯******************/

uchar DB1[15]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe}; uchar DB2[15]={0xfe,0xfc,0xf8,0xf0,0xe0,0xc0,0x80,0x00,0x80,0xc0,0xe0,0xf0,0xf8,0xfc,0xfe}; uchar DB3[15]={0xe7,0xdb,0xbd,0x7e,0xbd,0xdb,0xe7,0xff,0xe7,0xc3,0x81,0x00,0x81,0xc3,0xe7}; ucharDB4[36]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f,0x7e,0x7d,0x7b,0x77,0x6f,0x5f,0x3f,0x3e, 0x3d,0x3b,0x37,0x2f,0x1f,0x1e,0x1d,0x1b,0x17,0x0f,0x0e,0x0d,0x0b,0x07,0x06,

0x05,0x03,0x02,0x01,0x00};

ucharDB5[36]={0x80,0x40,0xc0,0xa0,0x60,0xe0,0xd0,0xb0,0x70,0xf0,0xe8,0xd8,0xb8,0x78,0xf8, 0xf4,0xec,0xdc,0xbc,0x7c,0xfc,0xfa,0xf6,0xee,0xde,0xbe,0x7e,0xfe,0xfd,0xfb,0xf7,

0xef,0xdf,0xbf,0x7f,0xff};

/****************************主函数***************************************/

void main(void)

{

uint i=0;

while(1) //死循环,流水灯依次在五种方式中循环

{

DataPort=0xff; //灯全灭

Delayms(TIME);

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

{

DataPort=DB1[i];

Delayms(TIME);

}//第一种方式

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

{

DataPort=DB2[i];

Delayms(TIME);

}//第二种方式

DataPort=0xff;

Delayms(TIME);

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

{

DataPort=DB3[i];

Delayms(TIME);

}//第三种方式

DataPort=0xff;

Delayms(TIME);

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

{

DataPort=DB4[i];

Delayms(TIME);

}//第四种方式

DataPort=0x00;

Delayms(TIME);

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

{

DataPort=DB5[i];

Delayms(TIME);

}//第五种方式

}

}

3.软件仿真图

3.1第一种

3.2 第二种

3.3 第三种

3.4(略)3.5(略)

相关文档
最新文档