4位共阴极数码管秒表设计仿真与程序

发布者:数据小巨人最新更新时间:2019-12-05 来源: 51hei关键字:4位  共阴极数码管  秒表设计 手机看文章 扫描二维码
随时随地手机看文章

单片机源程序如下:

#include "reg51.h"

#include "intrins.h"


#define GPIO_DIG   P2                           //数据端


#define uchar unsigned char                   //重命名关键字

#define uint unsigned int                   //重命名关键字


sbit K1=P3^0;                //开始

sbit K2=P3^1;                //暂停

sbit K3=P3^2;                //复位


sbit L1=P1^4;                //数码管1位选

sbit L2=P1^5;                //数码管2位选

sbit L3=P1^6;                //数码管3位选

sbit L4=P1^7;                //数码管4位选


sbit beep=P1^0;


unsigned char code DIG_CODE[10] = {

0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,

0x7f,0x6f};

//0、1、2、3、4、5、6、7、8、9的显示码

unsigned char code DIG_CODE2[10] = {

0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,

0xff,0xef};

//0、1、2、3、4、5、6、7、8、9带小数点的显示码

unsigned char DisplayData[4];

//用来存放要显示的8位数的值


uchar i,m;           //定义变量

uchar min=0;

long int k=0;

uint Second_Counts;                   //定义变量


void DigDisplay()                   //数码管显示子函数

{

        unsigned int j;                   //定义变量


        L1=0;                          //位选

        L2=1;

        L3=1;

        L4=1;

        GPIO_DIG = DisplayData[0];     //发送段码

        j = 1000;                                                   //扫描间隔时间设定

        while(j--);        

        L1=1;                           //消隐

        L2=1;

        L3=1;

        L4=1;               


        L1=1;

        L2=0;                          //位选

        L3=1;

        L4=1;

        GPIO_DIG = DisplayData[1];     //发送段码

        j = 1000;                                                   //扫描间隔时间设定

        while(j--);        

        L1=1;                           //消隐

        L2=1;

        L3=1;

        L4=1;      


        L1=1;

        L2=1;

        L3=0;                           //位选

        L4=1;

        GPIO_DIG = DisplayData[2];     //发送段码

        j = 1000;                                                   //扫描间隔时间设定

        while(j--);        

        L1=1;                           //消隐

        L2=1;

        L3=1;

        L4=1;      


        L1=1;

        L2=1;

        L3=1;

        L4=0;                           //位选

        GPIO_DIG = DisplayData[3];     //发送段码

        j = 1000;                                                   //扫描间隔时间设定

        while(j--);        

        L1=1;                           //消隐

        L2=1;

        L3=1;

        L4=1;      

        

}


void main()

{

//        Second_Counts=570;

//        min=9;

        GPIO_DIG = 0x00;                 //初始化数据口

    

        TMOD=0x01;                                //定时器0方式1

        TH0=(65536-50000)/256;                //定时器0:50ms

        TL0=(65536-50000)%256;

        TH1=(65536-2000)/256;                

        TL1=(65536-2000)%256;

        EA=1;   

//        ET1=1;

//        TR1=1;         

    while (1)

    {

                if(K1==0)

                {

                        ET0=1;

                        TR0=1;                //开启定时器

                }

                if(K2==0)

                {

                        ET0=0;

                        TR0=0;                //关闭定时器

                }

                if(K3==0)                                                 //复位按键按下时

                {

                        ET0=0;

                        TR0=0;                //关闭定时器

                        DisplayData[0] = DIG_CODE2[0];          //清零显示

                        DisplayData[1] = DIG_CODE[0];          //清零显示

                        DisplayData[2] = DIG_CODE2[0];          //清零显示

                        DisplayData[3] = DIG_CODE[0];          //清零显示

                        i=0;                                                          //清零计数

                        Second_Counts=0;                                  //清零秒

                }


                if((Second_Counts>0)&&(m==0))

                {

                        ET1=1;

                        TR1=1;   

                }


                if((min==9)&&(Second_Counts==599))

                {

                        ET0=0;

                        TR0=0;                //关闭定时器

                        ET1=1;

                        TR1=1; 

                }


                DigDisplay();                 //执行数码管显示函数

    }

}



//T0中断函数

void DSY_Refresh() interrupt 1

{

        TH0=(65536-50000)/256;                //恢复定时器0初值

        TL0=(65536-50000)%256;

[1] [2]
关键字:4位  共阴极数码管  秒表设计 引用地址:4位共阴极数码管秒表设计仿真与程序

上一篇:基于NRF24L01的DS18B20温度无线传输单片机源码
下一篇:单片机四层电梯控制系统设计最终版(含仿真+报告+程序源码)

小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved