程序简单花样齐全的流水灯
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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(略)