键盘控制流水灯.docx
《键盘控制流水灯.docx》由会员分享,可在线阅读,更多相关《键盘控制流水灯.docx(16页珍藏版)》请在冰豆网上搜索。
![键盘控制流水灯.docx](https://file1.bdocx.com/fileroot1/2023-1/3/b6d75fc0-788c-44af-b868-344086306ecc/b6d75fc0-788c-44af-b868-344086306ecc1.gif)
键盘控制流水灯
键盘控制流水灯
摘要
目前,一个学习与应用单片机的高潮正在工厂、学校及企事业单位大规模地兴起。
在电子领域尤其是自动化智能控制领域,传统的分立元件或数字逻辑电路构成的控制系统,正以前所未见的速度被单片机智能控制系统所取代。
单片机具有体积小、功能强、成本低、应用面广等优点,可以说,智能控制与自动控制的核心就是单片机。
随着时代的进步和发展,单片机技术已经普及到我们生活,工作,科研,各个领域,已经成为一种比较成熟的技术,本文将介绍一种基于单片机控制的流水灯,主要介绍了利用AT89C51制作一简易流水灯的软硬件设计过程,可实现花样流水灯的效果,同时画出总原理图、上电复位电路图、晶振电路图及其程序流程图,最后通过组装、调试电路,自行排除故障,最终实现流水灯功能。
关键字:
AT89C51,复位电路,晶振电路
1系统方案设计
1.1系统总体设计方案
在做此设计时,应先确定其系统框架,以下便是此设计的系统框图。
图1系统框图
2硬件组成
按照单片机系统扩展与系统配置状况,单片机应用系统可分为最小系统、最小功耗系统及典型系统等。
AT89C51单片机是美国ATMEL公司生产的低电压、高性能CMOS8位单片机,具有丰富的内部资源:
4kB闪存、128BRAM、32根I/O口线、2个16位定时/计数器、5个向量两级中断结构、2个全双工的串行口,具有4.25~5.50V的电压工作范围和0~24MHz工作频率,使AT89C51单片机时无须外扩存储器。
因此,本流水灯实际上就是一个带有八个发光二极管的单片机最小应用系统,即为由发光二极管、晶振、复位、电源等电路和必要的软件组成的单个单片机。
从图1中可以看出,如果要让接在P1.0口的LED1亮起来,那么只要把P1.0口的电平变为低电平就可以了;相反,如果要接在P1.0口的LED1熄灭,就要把P1.0口的电平变为高电平;同理,接在P1.1~P1.7口的其他7个LED的点亮和熄灭的方法同LED1。
因此,要实现流水灯功能,我们只要将发光二极管LED1~LED8依次点亮、熄灭,8只LED灯便会一亮一暗的做流水灯了。
其具体硬件组成如图2所示。
图2AT89C51单片机硬件组成图
2.1晶振震荡电路
1时钟信号的产生
在MCS-51芯片内部有一个高增益反相放大器,其输入端为芯片引脚XTAL1,其输出端为引脚XTAL2。
而在芯片的外部,XTAL1和XTAL2之间跨接晶体振荡器和微调电容,从而构成一个稳定的自激振荡器,这就是单片机的时钟电路,如图3所示。
图3晶体振荡电路
时钟电路产生的振荡脉冲经过触发器进行二分频之后,才成为单片机的时钟脉冲信号。
一般地,电容C1和C2取30pF左右,晶体的振荡频率范围是1.2~12MHz。
晶体振荡频率高,则系统的时钟频率也高,单片机运行速度也就快。
再此wo选用振荡频率为12MHz的晶振。
2.时序
时序是用定时单位来说明的。
MCS-51的时序定时单位共有4个,从小到大依次是:
节拍、状态、机器周期和指令周期。
下面分别加以说明。
1)节拍与状态
把振荡脉冲的周期定义为节拍(用P表示)。
振荡脉冲经过二分频后,就是单片机的时钟信号的周期,其定义为状态(用S表示)。
这样,一个状态就包含两个节拍,具前半周期对应的拍节叫节拍1(P1),后半周期对应的节拍叫节拍2(P2)。
2)机器周期
MCS-51采用定时控制方式,因此它有固定的机器周期。
规定一个机器周期的宽度为6个状态,并依次表示为S1~S6。
由于一个状态又包括两个节拍,因此,一个机器周期总共有12个节拍,分别记作S1P1、S1P2、…、S6P2。
由于一个机器周期共有12个振荡脉冲周期,因此机器周期就是振荡脉冲的十二分频。
当振荡脉冲频率为12MHz时,一个机器周期为1μs;当振荡脉冲频率为6MHz时,一个机器周期为2μs。
本设计采用的晶振频率为12MHz。
3)指令周期
指令周期是最大的时序定时单位,执行一条指令所需要的时间称为指令周期。
它一般由若干个机器周期组成。
不同的指令,所需要的机器周期数也不相同。
通常,包含一个机器周期的指令称为单周期指令,包含两个机器周期的指令称为双周期指令,等等指令的运算速度与指令所包含的机器周期有关,机器周期数越少的指令执行速度越快。
单片机执行任何一条指令时都可以分为取指令阶段和执行指令阶段。
ALE引脚上出现的信号是周期性的,在每个机器周期内出现两次高电平。
第一次出现在S1P2和S2P1期间,第二次出现在S4P2和S5P1期间。
ALE信号每出现一次,CPU就进行一次取指操作,但由于不同指令的字节数和机器周期数不同,因此取指令操作也随指令不同而有小的差异。
2.2按键复位电路
复位是单片机的初始化操作,其主要红能是把程序计数器PC内容初始化为0000H,也就是使单片机从0000H单元开始执行程序,同时使CPU和系统中的其他功能部件都处在一个确定的初始状态,并从这个状态开始工作。
8051单片机采用两种复位方式:
一种是加电自动复位,另一种为手动按键复位。
单片机复位的条件是:
必须使RST/VPD或RST引(9)加上持续两个机器周期(即24个振荡周期)的高电平。
2μs以上时间的高电平,在RST引脚出现高电平后的第二个机器周期执行复位。
上电复位电路是通过外部复位电路的电容充电来实现的,在电源Vcc的上升时间不超过1ms就可以实现自动上电复位,即接通电源就完成了系统的复位初始化。
在接电瞬间,RESET端的电位与VCC相同,随着充电电流的减少,RESET的电位逐渐下降。
只要保证RESET为高电平的时间大于两个机器周期,便能正常复位。
手动按键复位要求在电源接通的条件下,用按键开关操作使但单片机复位,如图4所示。
图4复位电路
2.3电源电路
本文电源使用的是其核心部件线性集成稳压器7805组成的一个稳压电路,从而为AT80C51提供+5V的电源,电源电路图如图5所示,7805稳压器的1脚接12V电源,2脚接地,3脚为5V电压的输出端此电路能够为单片机提供稳定的电源电压。
D1是二极管,用作电源整流。
C1~C4为电路中的滤波电容,大电容滤的是低频干扰,小电容滤的是高频干扰,C1、C2作为输入端的滤波电容接入7805的输入端,C3、C4作为输出端的滤波电容接入7805的输出端。
图5电源电路
38051单片机的基本组成
3.1中央处理器(CPU)
中央处理器是单片机的核心,完成运算和控制功能。
有运算电路和控制电路,其中控制电路是单片机的指挥控制部件,保证单片机各部分能自动而协调的工作。
例如定时控制电路和振荡电路均属于控制电路。
单片机执行程序就是在控制电路的控制下进行的。
首先从程序存储器读出指令,送指令寄存器保存;然后送指令译码器进行译码,译码结果送定时控制电路,有定时控制逻辑产生各种定时信号和控制信号;再送到系统的各个部件去控制相应的操作。
这就是执行一条指令的全过程,而执行程序就是不断地重复这一过程。
3.2内部数据存储器(内部RAM)
8051芯片中共有256个RAM单元,通常把这256个单元按其功能划分为两部分:
低128单元(单元地址00H~7FH)和高128单元(单元地址80H~FFH)。
内部RAM的高128单元是供给专用寄存器使用的,其单元地址为80H~FFH。
因这些寄存器的功能已作专门规定,故称之为专用寄存器(SpecialFunctionRegister),也可称为特殊功能寄存器SFR区。
但高128单元被专用寄存器占用,能作为寄存器供用户使用的只是低128单元,用于存放可读写的数据。
因此通常所说的内部数据存储器就是指前128单元,简称内部RAM。
片内低128字节RAM是用户真正可以存取随机数据的数据存储器,其地址为00H-7FH。
3.3内部程序存储器(内部ROM)
8051共有4KB掩膜ROM,用于存放程序、原始数据或表格,因此,称之为程序存储器,简称内部ROM。
它的片内ROM地址为0000H~0FFFH(4KB),它的片外ROM最大容量可为0000H~FFFFH。
片内与片外ROM在低4KB地址出现重叠,这种重叠的区分由8051的管脚
进行控制。
还有一组特殊单元是0003H~002AH,共40个单元。
这40个单元被均匀地分为5段,作为5个中断源的中断地址区。
中断响应后,按中断种类,自动转到各中断区的首地址去执行程序,因此在中断地址区中理应存放中断服务程序。
但通常情况下,8个单元难以存下一个完整的中断服务程序,因此通常也是从中断地址区首地址开始存放一条无条件转移指令,以便中断响应后,通过中断地址区,再转到中断服务程序的实际入口地址。
3.4定时/计数器
8051共有两个16位的定时/计数器,以实现定时或计数功能,并以其定时或计数结果对计算机进行控制。
3.5并行I/O口
8051共有4个8位的I/O口(P0、P1、P2、P3),以实现数据的并行输入/输出。
每个口都包含一个锁存器、一个输出驱动器和输入缓冲器。
实际上,它们已被归入专用寄存器之列,并且具有字节寻址和位寻址功能。
在访问片外扩展存储器时,低8位地址和数据由P0口分时传送,高8位地址由P2口传送。
在无片外扩展存储器的系统中,这4个口的每一位均可作为双向的I/O端口使用。
3.6串行口
MCS-51单片机有一个全双工的串行口,以实现单片机和其它设备之间的串行数据传送。
该串行口功能较强,既可作为全双工异步通信收发器使用,也可作为同步移位器使用。
3.7中断控制系统
MCS-51单片机的中断功能较强,以满足控制应用的需要。
8051共有5个中断源,即外中断两个,定时/计数中断两个,串行中断一个。
全部中断分为高级和低级共两个优先级别。
4 8051的引脚
MCS-51是标准的40引脚双列直插式集成电路芯片,引脚排列请参见图6。
图6MCS-51引脚图、逻辑符号图
下面按其引脚功能分为四部分叙述这40条引脚的功能。
4.1主电源引脚VCC和VSS
VCC——(40脚)接+5V电压;VSS——(20脚)接地。
4.2外接晶体引脚XTAL1和XTAL2
XTAL1(19脚)接外部晶体的一个引脚。
在单片机内部,它是一个反相放大器的输入端,这个放大器构成了片内振荡器。
当采用外部振荡器时,此引脚应接地;XTAL2(18脚)接外晶体的另一端。
在单片机内部,接至上述振荡器的反相放大器的输出端。
采用外部振荡器时,该引脚接外部振荡器的信号,即把外部振荡器的信号直接接到内部时钟发生器的输入端。
4.3控制或与其它电源复用引脚
4.3.1RST/VPD(9脚)
当振荡器运行时,在此脚上出现两个机器周期的高电平将使单片机复位。
推荐在此引脚与VSS引脚之间连接一个约8.2k的下拉电阻,与VCC引脚之间连接一个约10μF的电容,以保证可靠地复位。
VCC掉电期间,此引脚可接上备用电源,以保证内部RAM的数据不丢失。
当VCC主电源下掉到低于规定的电平,而VPD在其规定的电压范围(5±0.5V)内,VPD就向内部RAM提供备用电源。
4.3.2ALE/PROG(30脚)
在系统扩展时,ALE用于控制把P0口输出的低8位地址送入锁存器锁存起来,以实现低位地址和数据的分时传送。
4.3.3PSEN(29脚)
此脚的输出是外部程序存储器的读选通信号。
4.3.4EA/VPP(引脚)
当EA端保持高电平时,访问内部程序存储器,但在PC(程序计数器)值超过0FFFH时,将自动转向执行外部程序存储器内的程序。
当EA保持低电平时,则只访问外部程序存储器,不管是否有内部程序存储器。
4.4输入/输出(I/O)引脚P0、P1、P2、P3(共32根)
4.4.1P0口(39脚至32脚)
P0口是双向8位三态I/O口,在外接存储器时,与地址总线的低8位及数据总线复用。
4.4.2P1口(1脚至8脚)
P1口是准双向8位I/O口。
由于这种接口输出没有高阻状态,输入也不能锁存,故不是真正的双向I/O口。
4.4.3P2口(21脚至28脚)
P2口是准双向8位I/O口。
在访问外部存储器时,它可以作为扩展电路高8位地址总线送出高8位地址。
4.4.4P3口(10脚至17脚)
P3口是准双向8位I/O口,作为第二功能使用时,各引脚的定义如表1所示。
值得强调的是,P3口的每一条引脚均可独立定义为第一功能的输入输出或第二功能。
表1P3各口线的第二功能定义
口线
引脚
第二功能
P3.0
10
RXD(串行输入口)
P3.1
11
TXD(串行输出口)
P3.2
12
INT0(外部中断0)
P3.3
13
INT1(外部中断1)
P3.4
14
T0(定时器0外部输入)
P3.5
15
T1(定时器1外部输入)
P3.6
16
WR(外部数据存储器写脉冲)
P3.7
17
RD(外部数据存储器读脉冲)
5程序流程图
6程序清单
/////LYG流水灯///////
#include
#defineucharunsignedchar
#defineuintunsignedint
sbitKS=P3^0;
sbitK0=P3^1;
sbitK1=P3^2;
sbitK2=P3^3;
sbitK3=P3^4;
sbitK4=P3^5;
sbitZP=P3^6;
sbitJP=P3^7;
bita=0;
intK;
bitaa;
ucharshijian=400;
ucharcodetab0[]={0xff,0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80,0xff,0x00};//1灯亮
ucharcodetab1[]={0x00,0x01,0x05,0x15,0x55,0xff,0x00};//1灯间隔
ucharcodetab2[]={0x00,0x03,0x06,0x0c,0x18,0x30,0x60,0xc0,0x00};//两个亮交叉
ucharcodetab3[]={0x00,0x03,0x0c,0x30,0xc0,0xff,0x00};//两个亮独立
ucharcodetab4[]={0x00,0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80,0xff,0x00,0x80,0x40,0x20,0x10,0x08,0x04,0x02,0x01,0x00};//正反
ucharcodetab5[]={500,2000};
voidDelayMS(uintx)
{
uchart;
while(x--)
{
for(t=120;t>0;t--);
}
}
key1()
{
if(KS==0)
{
DelayMS(10);
if(KS==0)
{
aa=~aa;
}
returnaa;
}
;
}
///////////////////
key2()
{
if(K0==0)
{
DelayMS(10);
if(K0==0)
{
K=0;
}
returnK;
}
if(K1==0)
{
DelayMS(10);
if(K1==0)
{
K=1;
}
returnK;
}
if(K2==0)
{
DelayMS(10);
if(K2==0)
{
K=2;
}
returnK;
}
if(K3==0)
{
DelayMS(10);
if(K3==0)
{
K=3;
}
returnK;
}
if(K4==0)
{
DelayMS(10);
if(K4==0)
{
K=4;
}
returnK;
}
}
/////////////////////////////
key3()
{
ucharSJ;
if(ZP==0)
{
DelayMS(10);
if(ZP==0)
{
SJ++;
shijian=tab5[SJ];
}
returnshijian,SJ;
}
////////////////////////////
if(JP==0)
{
DelayMS(10);
if(JP==0)
{
SJ--;
shijian=tab5[SJ];
}
returnshijian,SJ;
}
}
///////////////////////////////
voidmain()
{
key1();
while(aa==1)
{key1();
if(aa==0)
break;
key2();
key3();
if(K==0)
{
ucharI;
for(i=0;i<12;i++)
{
P1=~tab0[i];
DelayMS(shijian);
if(i==12)
i=0;
}
}
/////////////////////////////////
if(K==1)
{
ucharI;
for(i=0;i<7;i++)
{
P1=~tab1[i];
DelayMS(400);
}
}
///////////////////
if(K==2)
{
ucharI;
for(i=0;i<9;i++)
{
P1=~tab2[i];
DelayMS(shijian);
}
}
if(K==3)
{
ucharI;
for(i=0;i<7;i++)
{
P1=~tab3[i];
DelayMS(shijian);
}
}
if(K==4)
{
ucharI;
for(i=0;i<20;i++)
{
P1=~tab4[i];
DelayMS(shijian);
}
}
}
//else
//{P1=0xff;}
}
结论
单片机将不断的引导电子产品的创新,所以学好单片机的相关知识是十分必要的,例如单片机的组成及结构知识,单片机的指令系统,程序设计,还有相关的扩展应用知识,本设计就是一个很典型的也很简单的单片机扩展应用,此外还有接口技术等等。
输入主程序及子程序;按子程序调试执行,先执行1灯流水,成功后复位;再执行2灯流水,1灯间隔,2灯间隔,快速/慢速,正流水/倒流水,循环。
任-流水灯执行中间改变控制方式,若不成功检查子程序能否返回主程序。
连续执行符合设计要求。
参考文献
[1]南建辉.熊鸣.王军茹MCS-51单片机原理及应用实例[M].清华大学出版社.2004年3月.
[2]何立民.单片机原理及系统设计(系统配置与接口技术)[M].北京航空航天大学出版社.1994年.
[3]张迎新.单片微型计算机原理、应用及接口技术[M].国防工业出版社.1993年.
[4]陈粤初.单片机应用系统设计与实践[M].北京航空航天大学出版社.1993年.
[5]孙涵芳.徐爱卿.MCS-51/96系列单片机原理及应用(修订版)[M].北京航空航天大学出版社.2000年.
[6]李广弟.朱月秀.冷祖祈.单片机基础(第三版)[M].北京航空航天大学出版社.2007年.