宁波技师学院
课 程 设 计 报 告
论文题目     键控流水灯 
专业班级               ___
             
              学生姓名              
指导教师             _____
宁波技师学院电气技术系
二零一三  9年21月
摘  要单片机是一种集成电路芯片,采用超大规模技术,把具有数据处理能力的微处理器、随机存取数据存储器、只读程序存储器、输入输出电路、可能还包括定时计数器、串口
通信口、显示驱动电路,脉宽调制电路、模拟多路转换器及A/D转换器等电路集成到一块芯片上,构成一个最小而完善的计算机系统。这些电路在软件的控制下准确、迅速、高效地完成程序设计者事先规定的任务。
键控流水灯设计通过编写代码实现16个LED灯5种流水灯显示方式。在设计中主要采用AT89C51这款芯片作为控制主体,用按钮来切换流水灯的发光方式来显示流水灯的发光模式。系统通过P1口外接16个发光二极管,P3口接2个按键,一个按键进行方式选择,数码管显示方式编号;用一个键来控制流水灯流动的速度。数码管接在AT89C51的P0和P2口上,而流水灯的发光二极管经过电阻接在P1口上。设计中辅以简单的设备和必要的电路,设计了一款流水灯,最终达到预期的目的。   

1  引言 
单片机控制系统能够取代以前利用复杂电子线路或者数字电路构成的控制系统,可以软件控制来实现,并能够实现智能化。现在的单片机的控制范畴无所不在,例如通信产品、家用电器、智能仪器仪表、过程控制和专用控制装置等等,单片机的应用领域越来越广泛。 
2  课题综述 
2.1课题来源与意义 
随着经济的发展、科技的突飞猛进,芯片业得到了迅速的发展,是单片机技术在各种民用和工业控制等领域得到更广泛的应用。单片机凭借其低成本、高性能的不可代替优势已经成为了微电脑 控制的主力军。学习单片机的有效方法是将理论与实践并重,因此通过对单片机可控流水灯的设计和研究,鼓励学生在熟悉基本原理的前提下,与实际应用相联系,提出自己的方案,来完善设计,使得他们更好的掌握单片机的应用。 
2.2面临的问题 
本次课程设计的要求是对16个LED灯设计5种流水灯显示方式,用一个按键进行方式选择,并用一个数码管显示方式编号;用一个键来控制流水灯流动的速度,并用一个数码管显示方式编号。 
所要解决的问题有流水灯显示方式的设计,LED灯的驱动问题,七段显示数码管的驱动问题以及系统对外界按钮的相应问题。下面将对各个问题展开论述。 
3  系统设计 
3.1总体设计 
实现这个课题我们使用AT89C51作为控制主体,使用十六个共阳极发光二极管作为LED显示流水灯,两个七段显示数码管来显示流水灯显示方式,外接两个按钮,其中用一个按键进行方式选择,并用一个数码管显示方式编号;用一个键来控制流水灯流动的速度,并用一个数码管显示方式编号。外接一个晶振来提供外接时钟脉冲。
                      单片机课程设计                   
- 2 - 模块图如下:
流程图如下:
3.2模块设计
3.2.1主体控制模块
芯片AT89C51是核心,P0、P1、P2、P3口均可以作为I/O口使用。两个数码管经过电阻接
在AT89C51的P0和P2口上,P1口外接16个发光二极管,P3口接2个按键,一个按键进行方式选择,数码管显示方式编号;用一个键来控制流水灯流动的速度,数码管显示方式编号。
                   
                      单片机课程设计                   
图3-3主体控制模块图
3.2.2按键控制模块、
按键控制模块采用独立式按键接口设计。独立式按键是每一个按键占用一根I/O端线。特点:各个按键相互独立,电路配置灵活;按键数量较多时,I/O端线耗费较多,电路复杂;软件结构简单
图3-4按钮控制模块图
3.2.3时钟模块 
时钟电路用于产生单片机工作时所需的时钟信号,在芯片的外部通过18脚、19脚接晶体振荡器和微调电容,形成反馈电路,构成一个稳定的自激振荡器。电路中的C1、C2取30Pf
左右,二晶体振荡器的频率范围通常是1.2-12MHZ,晶体振荡器的频率越高,振荡频率越高。
图3-5时钟模块图 
3.2.4 显示模块 
显示模块主体是八段显示数码管。共阳极数码管的8个发光二极管的阳极(二极管正端)连接在一起。通常,公共阳极接高电平(一般接电源),其它管脚接段驱动电路输出端。当某段驱动电路的输出端为低电平时,则该端所连接的字段导通并点亮。根据发光字段的不同组合可显示出各种数字或字符。
图3-4显示模块图       
3.2.5流水灯模块       
发光二极管就是LED,是一种由磷化镓等半导体材料制成的、能直接将电能转换成光能的发光显示器件。当其内部有一定电流通过时,就是发光。发光二极管具有功耗低、体积小、可靠性高、寿命长和相应快等优点。 
流水灯模块采用16个LED发光二极管,通过代码的编写,实现五种流水移动,其中电阻的作用是保护二极管,向它提供较小的电流,防止二极管因为电流过大而烧毁。 
设计中,发光二极管是共阳极接法的,我们只需要将其初值不断的左移就会看到LED轮流的被点亮,也就实现了流水灯的功能。
   
            图3-5流水灯模块图
3.3硬件设计
图3-6  键控流水灯图
4代码编写 
    #include<reg51.h>
    #define smg1    P0
    #define    lsd1    P1
    #define smg2    P2
   
    unsigned    int    i=1,u=7,j,n,c,k,h=7,s=1;
    unsigned    char sj=20;       
    unsigned    char js;
    code unsigned    char    a[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
    code unsigned    char    b[]={0xf9,0xa4,0xb0,0x99,0x92};
    code unsigned    char    d[]={0xf9,0xa4,0xb0,0x99,0x92};
    bit    wnen1=0;
    bit    anj=0;
    sbit    aj1=P3^0;
    sbit    aj2=P3^1;
    void    wnlsd1(void);
    void    wnlsd2(void);
    void    wnlsd3(void);
    void    wnlsd4(void);
    void    wnlsd5(void);
    void    sjms1(void);
    void    sjms2(void);
    void    sjms3(void);
    void    sjms4(void);
    void    sjms5(void);
    void    msms1(void);
    void    msms2(void);
    void    msms3(void);
    void    msms4(void);
    void    msms5(void);
    void    zd1(void);
    void    zd2(void);
    void    csh(void);
    void    sjkz(void);
    void    ddh(void);
main()
{
    csh();
    while(1)
    {
        if(anj)
        {
            anj=0;           
            sjkz();
            ddh();   
        }
        if(i==1)
        {   
              if (wnen1)
              {
                wnen1=0;
                wnlsd1();
                sjms1();                           
                }
        }               
        else if(i==2)
        {
              if(wnen1)
              {
                    wnen1=0;
                    wnlsd2();
                    sjms2();
                }   
        }   
        else if(i==3)
        {
              if(wnen1)
              {
                wnen1=0;
                wnlsd3();
                sjms3();
              }
        }           
        else if(i==4)
        {
           
              if(wnen1)
              {
                wnen1=0;
                wnlsd4();
                sjms4();
              }
           
        }                       
        else if(i==5)
        {
              if(wnen1)
              {
                wnen1=0;
                wnlsd5();
                sjms5();
                }
           
        }
        if(s==1)
        {
            msms1(); 
        }
        else  if(s==2)
        {
            msms2();
        }
        else  if(s==3)
        {
            msms3();
        }
        else  if(s==4)
        {
            msms4();
        }
        else    if(s==5)
        {
            msms5();
        }
    }
}
void    csh(void)
{
    TMOD=1;
    TH0=0x3c;
    TL0=0xb0;
    TH1=0xec;
    TL1=0x78;
    EA=1;
    ET0=1;
    TR0=1;
    ET1=1;
    TR1=1;
    js=sj;   
}
void    zd1(void) interrupt 1
{
    TH0=0x3c;   
    TL0=0xb0;       
    js=js-4;
    if(js==0)
    {
      wnen1=1;
      js=sj;

更多推荐

控制,电路,流水,发光,二极管,按键,单片机