视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
单片机 数码管 时分秒显示
2025-10-06 14:44:24 责编:小OO
文档
/****** 2012-8-23日修改为XX-XX-XX,24小时制并成功显示*******/

#include

#define uchar unsigned     char

#define uint unsigned int

uchar code table[]={

0x3f,0x06,0x5b,0x4f,

0x66,0x6d,0x7d,0x07,

0x7f,0x6f,0x77,0x7c,

0x39,0x5e,0x79,0x71};//0~9的数码管显示

sbit dula=P2^6;//声明段选

sbit wela=P2^7;//声明位选

uchar h,m,s,num1;//定义变量

void delay(uint xms)//延时函数

{

    uint i,j;

for(i=xms;i>0;i--)

     for(j=110;j>0;j--);

}

void init()//初始化

{

    TMOD=0x10;// 0001 0001 定时器0的工作方式1,定时器1的工作方式1

    TH1=(65536-45872)/256;

    TL1=(65536-45872)%256; 

    EA=1;//开总中断

    ET1=1;//开定时器1中断

    TR1=1;//启动定时器1

}

void main()//主函数

{

    init();                //初始化

    while(1)            //while循环

    {

        wela=1;        //打开位选

        P0=0xfe;    //点亮数码管

        wela=0;        //关闭位选

        dula=1;        //打开段选

        P0=table[h/10];//送入数据

        dula=0;        // 关闭段选

        delay(1);     //延时5ms

        wela=1;        //打开位选

        P0=0xfd;    //点亮数码管

        wela=0;        //关闭位选

        dula=1;        //打开段选

        P0=table[h%10];//送入数据

        dula=0;        // 关闭段选

        delay(1);     //延时5ms

        wela=1;        //打开位选

        P0=0xfb;    //点亮数码管

        wela=0;        //关闭位选

        dula=1;        //打开段选

        P0=table[m/10];//送入数据

        dula=0;        // 关闭段选

        delay(1);     //延时5ms

        wela=1;        //打开位选

        P0=0xf7;    //点亮数码管

        wela=0;        //关闭位选

        dula=1;        //打开段选

        P0=table[m%10];//送入数据

        dula=0;        // 关闭段选

        delay(1);     //延时5ms

        wela=1;        //打开位选

        P0=0xef;    //点亮数码管

        wela=0;        //关闭位选

        dula=1;        //打开段选

        P0=table[s/10];//送入数据

        dula=0;        // 关闭段选

        delay(1);     //延时5ms

    

        wela=1;

        P0=0xdf;

        wela=0;

        dula=1;

        P0=table[s%10];

        dula=0;

        delay(1);

    }        

}

void T1_time()interrupt 3     //中断3

{

    TH1=(65536-45872)/256;     //重装初值

    TL1=(65536-45872)%256;     //

    num1++;                    //num2每加一次判断一次是否到20次了

    if(num1==20)             //如果到了20次,说明1秒钟到了

    {    

        num1=0;                 //把num1清零,重新再计20次

        s++;                 //s每加一次判断一次,是否到60次了

        if(s==60)        //如果到了60次,说明1分钟到了

        {

            s=0;       //把s清零,重新再计60次

            m++;       //m每加一次判断一次是否到60次了

            if(m==60)  //如果到了60次,说明1小时到了

            {    

                m=0;    //把m清零,重新再计60次           

                h++;   //h每加一次判断一次是否到24次了

                if(h==24)//如果h到了24次,说明24小时到了

                {

                    h=0; //把m清零,重新再计60次

                }            

            }

        }         

    }        

}下载本文

显示全文
专题