基于51单片机的流水灯设计说明

  • 格式:docx
  • 大小:50.66 KB
  • 文档页数:6

下载文档原格式

  / 6
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
RESET:重置引脚,高电平动作,当要对晶体重置时,只要对此引脚电平提升至高电平并保持两个及其周期以上的时间便能完成系统重置的各项动作,使得部特殊功能寄存器容均被设成已知状态。
P3:端口3是具有部提升电路的双向I/O端口,通过控制各个端口的高低电平了实现LED流水灯的控制。
1.2
如图所示,当按下按键时,就能完成整个系统的复位,使得程序从新运行。
}
}
图3.复位电路
1.3
时钟电路用于产生单片机工作所需要的时钟信号,单片机本身就是一个复杂的同步时序电路,为了保证同步工作方式的实现,电路应在唯一的时钟信号控制下严格地按时序进行工作。
在AT89C51芯片部有一个高增益反相放大器,其输入端为芯片引脚X1,输出端为引脚X2,在芯片的外部跨接晶体振荡器和微调电容,形成反馈电路,就构成了一个稳定的自激振荡器。 此电路采用12MHz的石英晶体。
基于
一.
利用AT89c51作为主控器组成一个LED流水灯系统,实现8个LED灯的左、右循环显示。
二.
图1.总设计图
1.
1.1
图2.AT89C51
XTAL1:单芯片系统时钟的反向放大器输入端。
XTAL2:系统时钟的反向放大器输出端,一般在设计上只要在XTAL1和XTAL2上接上一只石英震荡晶体系统就可以工作了,此外可以在两引脚与地之间加入20PF的小电容,可以使系统更稳定,避免噪音干扰而死机。
#define kou P3
uchar code dp1[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
uchar code dp2[]={0x80,0x40,0x20};
void delayms(Baidu Nhomakorabeaint z)//延时函数
{
uint i,j;
for(i=z;i>0;i--)
图4.时钟电路
2.
图5.流水灯电路
三.
3.1
本设计选择C语言作为编程语言。C语言虽然执行效率没有汇编语言高,但语言简洁,使用方便,灵活,运算丰富,表达化类型多样化,数据结构类型丰富,具有结构化的控制语句,程序设计自由度大,有很好的可重用性,可移植性等特点。而汇编语言使用起来并没有这么方便。
本设计选用了Keil作为编程软件,.Keil C51生成的目标代码效率非常之高,多数语句生成的汇编代码很紧凑,容易理解。在开发大型软件时更能体现高级语言的优势。
}
for(i=0;i<2;i++)
{
kou=dp1[i]+0x04;
delayms(500);
}
for(i=0;i<1;i++)
{
kou=dp1[i]+0x02;
delayms(500);
}
for(i=0;i<3;i++)
{
kou=0x00;
delayms(500);
kou=0xff;
delayms(500);
delayms(500);
}
for(i=0;i<5;i++)
{
kou=dp1[i]+0x20;
delayms(500);
}
for(i=0;i<4;i++)
{
kou=dp1[i]+0x10;
delayms(500);
}
for(i=0;i<3;i++)
{
kou=dp1[i]+0x08;
delayms(500);
for(j=110;j>0;j--);
}
void main()
{
int i;
for(i=0;i<8;i++)
{
kou=dp1[i];
delayms(500);
}
for(i=0;i<7;i++)
{
kou=dp1[i]+0x80;
delayms(500);
}
for(i=0;i<6;i++)
{
kou=dp1[i]+0x40;
3.2 LED
LED灯在低电平,即I/O口置‘0’时,会亮,相反就灭。此设计就是通过程序来控制I/O口的电平变化来实现流水灯左右循环闪烁。
四.
#include<reg52.h>
#include<intrins.h>
#define uint unsigned int
#define uchar unsigned char