数码管闪烁显示
目录
一.    系统功能简介    2
二.    硬件电路设计    2
1.Proteus原理图:    2
2.元件清单:    3
三.    软件设计    3
1.    流程图:    3
2.    程序:    4
四.系统调试    6
4.1仿真:    6
4.1.1步骤:    6
4.1.2 仿真图片:    6
4.1.3 结果:    7
4.2硬件电路调试:    7
4.2.1 步骤:    7
4.2.2运行结果照片:    8
4.2.3结论:    9
4.2.4系统使用说明:    9
五.系统设计感受    9
一. 系统功能简介
P2口将所要显示的七段显示码直接输出到4位数字七段LED数码管模块,再由P1口的低
四位将扫描信号直接送到七段显示模块的4个公共端,使这个七段LED数码管模块闪烁“20083次,再闪烁“03153次,如此循环不停。
二. 硬件电路设计
1.Proteus原理图:
2.元件清单:
          名称
                    型号
                  数量(个)
电阻
3WATT100R
8
电阻
3WATT1K
4
LED数码管
7SEG-MPX1-CA
4
三极管
2N3905
4
芯片
AT89C51
1
三. 软件设计
1. 流程图:
no
yes
no
yes
2. 程序:
    /* ch05-4-2.c - 直接驱动4位七节显示器实验,P1.0~3为扫描信号 P2接七节显示器 */
//==声明区====================================
#include    <reg51.h>          // 定义8051暂存器之标头档,P2-17~19
#define    SCANP    P1            // 定义扫瞄码由Port 1输出
#define    SEG7P    P2            // 定义七节显示码由Port 2输出
char code TAB[10]={    0xc0, 0xf9, 0xa4, 0xb0, 0x99,    //数字0-4
                      0x92, 0x83, 0xf8, 0x80, 0x98 };    //数字5-9
char code disp[2][4]={    {2,0,0,8},    // 显示资料(显示器闪烁0)
                        {0,3,1,5}}; // 显示资料(1)
void delay1ms(int);                // 声明延迟函数
void scanner(char);                // 扫瞄函数
//==主程序====================================
main()                            //    主程序开始
{    char i,j;                    //    声明变数i,j
    while(1)                    //    无穷循环,程序一直跑
    {    for(i=0;i<2;i++)        //    显示第0,1行字组,for循环(字组i)开始
            for(j=0;j<3;j++)    //    闪烁三次
            {    scanner(i);        //    扫瞄第i行字组
                SCANP=0xff;        //    全灭
                delay1ms(480);    //    延迟480 1m=0.48s
            }
    }                            //    while循环结束
}                                //    主程序结束
//==子程序====================================
/* 延迟函数,延迟约x 1ms */
void delay1ms(int x)            // 延迟函数开始
{    int i,j;                    // 声明整数变数i,j
    for (i=0;i<x;i++)            // 计数x,延迟x 1ms
        for (j=0;j<120;j++);    // 计数120次,延迟1ms
}                                // 延迟函数结束
/* 扫瞄字组函数,显示第x组数字 */
void scanner(char x)            // 扫瞄字组函数开始
{    char i,j,BCD,scan;            // 声明变数
    for (i=0;i<30;i++)            // 扫瞄30i循环
    {    scan=0xf7;                // 扫瞄信号初值1111 0111
        for (j=0;j<4;j++)        // 扫瞄4个数字j循环
        {    SEG7P=0xff;            // 关闭七段显示器(防止闪动)
            SCANP=scan;            // 输出扫瞄信号(4位元)
            BCD=disp[x][j];        // 读取第x组第j个数字之BCD
            SEG7P=TAB[BCD];        // 输出至七节显示器
            delay1ms(4);        // 延迟4ms
            scan>>=1;            // 产生下个扫瞄信号
        }                        // 结束扫瞄4个数字j循环
    }                            // 结束扫瞄30i循环
}                                //    scanner函数结束
四.系统调试
4.1仿真:
4.1.1步骤:
1.根据功能要求与电路结构,在Keil C里编写程序并进行生成,以产生.HEX文件。然后进行软件调试/仿真,看看其功能是否正常。若有错误或非预期的状态,则检查源程序,看看
哪里出了问题,修改将它记录在实验报告里。
2.若软件调试/仿真功能正常,可按图连接线路,并使用在线仿真器加载新的程序,以仿真该电路的动作。若非预期的状态,则检查线路的连接状态,看看哪里出了问题并将它记录在实验报告里。
3.若在线仿真功能正常,将程序刻录到89C51,再把该89C51放入实际电路,以取代刚才的在线仿真器,然后直接送电,看看是否正常。
4.编写实验报告。
4.1.2 仿真图片:
4.1.3 结果:
通过在线仿真器的仿真,实现了功能要求。
4.2硬件电路调试:
4.2.1 步骤:
根据原理图,在面包板上连接好各元件,保证焊接无错误,再把刻录好程序的89C51放入实际电路中,然后直接送电。
4.2.2运行结果照片:
4.2.3结论:
通过实际电路的运行,发现已经实现了功能要求。
4.2.4系统使用说明:
当电路送电时,LED数码管模块闪烁“20083次,再闪烁“03153次,如此循环不停,直到断电为止。
五.系统设计感受
这次的数码管闪烁显示设计,需要先用仿真器仿真,再把实际电路做出来。在用仿真器仿
真的步骤中,数码管我先采用的是7SEG-MPX4-CA,但是始终无法实现功能要求。于是,我先考虑三极管问题,我先后采用了2N39052N3906,但是仍无法实现功能要求。然后我又考虑数码管的问题,在先后尝试了多次后,终于在换成7SEG-MPX1-CA时,实现了功能要求。
在实际电路的焊接中,我先上网查了AT89C51LED数码管的引脚图,在焊接时,一边对照引脚图,一边小心焊接。最后在将刻录好的AT89C51放入电路中,送电后,很好的实现了功能要求。
到此,数码管闪烁显示设计完成了。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。