数码管显示的电子时钟C51程序

发布者:LogicLeaper最新更新时间:2015-07-27 来源: 51hei关键字:数码管显示  电子时钟  C51程序 手机看文章 扫描二维码
随时随地手机看文章
/*************************************************************
功能:
    实现电子时钟显示(C)
定义:
    P3口位选,P1口段选,P0.0,P0.1,P0.2为调时口
时间:
    2010—11—26

说明:
    仿真存在问题,这可能是仿真软件的问题,需要将段位扫描反调
 实际运行的结果是正确的
*************************************************************/

#include 

unsigned char code dispcode[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x00};

unsigned char dispbitcode[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};

unsigned char dispbuf[8]={0,0,16,0,0,16,0,0};

unsigned char dispbitcnt;

unsigned char second;

unsigned char minite;

unsigned char hour;

unsigned int tcnt;

unsigned char mstcnt;

unsigned char i,j;

 

void main(void)

{

       TMOD=0x02;

       TH0=0x06;

       TL0=0x06;

       TR0=1;

       ET0=1;

       EA=1;

       while(1)

       {

              if(P0_0==0)

              {

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

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

                     if(P0_0==0)

                     {

                            second++;

                            if(second==60)

                            {

                                   second=0;

                            }

                            dispbuf[0]=second%10;

                            dispbuf[1]=second/10;

                            while(P0_0==0);

                     }

              }

              if(P0_1==0)

              {

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

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

                     if(P0_1==0)

                     {

                            minite++;

                            if(minite==60)

                            {

                                   minite=0;

                            }

                            dispbuf[3]=minite%10;

                            dispbuf[4]=minite/10;

                            while(P0_1==0);

                     }

              }

              if(P0_2==0)

              {

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

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

                     if(P0_2==0)

                     {

                            hour++;

                            if(hour==24)

                            {

                                   hour=0;

                            }

                            dispbuf[6]=hour%10;

                            dispbuf[7]=hour/10;

                            while(P0_2==0);

                     }

              }

       }

}

 

void t0(void) interrupt 1 using 0

{

       mstcnt++;

       if(mstcnt==8)

       {

              mstcnt=0;

              P1=dispcode[dispbuf[dispbitcnt]];

              P3=dispbitcode[dispbitcnt];

              dispbitcnt++;

              if(dispbitcnt==8)

              {

                     dispbitcnt=0;

              }

       }

       tcnt++;

       if(tcnt==4000)

       {

              tcnt=0;

              second++;

              if(second==60)

              {

                     second=0;

                     minite++;

                     if(minite==60)

                     {

                            minite=0;

                            hour++;

                            if(hour==24)

                            {

                                   hour=0;

                            }

                     }

              }

              dispbuf[0]=second%10;

              dispbuf[1]=second/10;

              dispbuf[3]=minite%10;

              dispbuf[4]=minite/10;

              dispbuf[6]=hour%10;

              dispbuf[7]=hour/10;

       }

}

 

 

 [page]

 

/*************************************************************

 

功能:

 

    实现电子时钟显示(C)

 

定义:

 

    P2口位选,P0口段选 

 

时间:

 

    2010—11—26

 

*************************************************************/

 

#include

 

code unsigned char tab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};           

unsigned char StrTab[6];               

unsigned char minute=30,hour=12,second=0;  

 

void Displaypro(void)

{

    StrTab[0]=tab[second%10];  

    StrTab[1]=tab[second/10];

    StrTab[2]=tab[minute%10]; 

    StrTab[3]=tab[minute/10];

    StrTab[4]=tab[hour%10];  

    StrTab[5]=tab[hour/10]; 

}

 

main()

{

    TMOD |=0x01;

    TH0=0xd8;

    TL0=0xf0;

    ET0=1;

    TR0=1;

 

    TMOD |=0x10;

    TH1=0xF8;  

    TL1=0xf0;

    ET1=1;

    TR1=1;

 

    EA =1;

 

    while(1){;} 

}

 

void time1_isr(void) interrupt 3

{

    static unsigned char num;

    TH1=0xf8;

    TL1=0xf0;

 

    switch (num)

    {

        case 0:P2=0x01;P0=StrTab[num];break;

        case 1:P2=0x02;P0=StrTab[num];break;

        case 2:P2=0x04;P0=StrTab[num];break;

        case 3:P2=0x08;P0=StrTab[num];break;

        case 4:P2=0x10;P0=StrTab[num];break;

        case 5:P2=0x20;P0=StrTab[num];break;

        default:break;

    }

    num++;  

    if(num==6)

    num=0;

}

 

void tim(void) interrupt 1

{

    static unsigned char count;

    TH0=0xd8;             

    TL0=0xf0;

    count++;

    switch (count)

    {

        case 0:

        case 20:

        case 40:

        case 60:

        case 80:Displaypro();break;

        default:break;

    }

    if (count==100)

    {

        count=0;

        second++;

        if(second==60)

        {

            second=0;

            minute++;   

            if(minute==60)

            {

                minute=0;

                hour++;        

                if(hour==24)

                    hour=0;

            }    

        } 

    }

}

//源代码下载 :http://www.51hei.com/f/szc511.rar
关键字:数码管显示  电子时钟  C51程序 引用地址:数码管显示的电子时钟C51程序

上一篇:步进电机带指针在标尺上移动并显示坐标及相对坐标
下一篇:我的电子钟c程序完整代码

推荐阅读最新更新时间:2024-03-16 14:26

51单片机数码管静态显示和动态显示原理及实验 夜猫子
数码管 多位数码管,即是两个或两个以上单个数码管并列集中在一起形成一体的数码管。当多位一体时,它们内部的公共端是独立的,而负责显示什么数字的段线全部是连接在一起的,独立的公共端可以控制多位一体中的哪一位数码管点亮,而连接在一起的段线可以控制这个能点亮数码管亮什么数字,通常我们把公共端叫做“位选线”,连接在一起的段线叫做“段选线”有了这两个线后,通过单片机及外部驱动电路就可以控制任意的数码管显示。一般一位数码管有10个引脚,二位数码管也是10个引脚,四位数码管是12个引脚。 为了更方便区分段选和位选,请看下原理图: 如图为两个4位一体的数码管,可以看到与8个com相连的是两个数码管的位选,位选与引脚相连,所以位选控制那个灯亮。段
[单片机]
51单片机<font color='red'>数码管</font>静态<font color='red'>显示</font>和动态<font color='red'>显示</font>原理及实验 夜猫子
51单片机实习-数码管动态显示4399(模块化编程)
#include reg52.h sbit wei0=P1^0; sbit wei1=P1^1; sbit wei2=P1^2; sbit wei3=P1^3; int zxm ={0x98,0x98,0xb0,0x99}; void delay(int i) { while(i--) { int j=0; for(;j 115;j++); } } void display() { int i; for( i=0;i 4;i++) { switch(i) { case 0: wei0=0,wei1=1,wei2=1,wei3=1;break; case
[单片机]
51单片机实习-<font color='red'>数码管</font>动态<font color='red'>显示</font>4399(模块化编程)
基于51单片机的电子时钟课程设计
第一章 设计目的及要求 1.目的 通过对电子时钟系统进行编程与Protues仿真,进一步掌握单片机的组成,P1、P0、P2、P3口的应用,蜂鸣器的应用,定时中断程序的编写及应用,对之前学习的单片机课程进行回顾与应用;初步掌握Protues仿真方法以及用keil软件编写程序的方法。 2.题目与要求 本次课程设计的题目为:电子时钟的设计,其具体要求为: (1)能实现时、分、秒的显示; (2)能实现12、24小时制的切换; (3)能设定时间; (4)能设定闹钟; 整个系统要设计键盘和显示器,利用单片机内部时钟完成定时器的定时设计。 第二章 理论基础 1.AT89C52芯片 AT89C52芯片的引脚图如图1所示。 图1 AT
[单片机]
基于51单片机的<font color='red'>电子时钟</font>课程设计
基于51单片机的数码管动态显示
#include reg52.h #include intrins.h #define uchar unsigned char #define uint unsigned int sbit P2_6=P2^6; //数码管位选74HC573锁存端 sbit P2_7=P2^7; //数码段位选74HC573锁存端 oid delay(uchar xms); //声明函数delay()原型,延时函数 void display(char *ptr); uchar code seg = {0x3f,0x06,0x5b,0x4f,0x66, //段码表:0,1,2,3,4 0x6d,0x7d,0x07,0x7f,0x6f, //段码表
[单片机]
C51的PID程序
//主程序====================================================== #include Main.h #include PID_f1.h /* ............................................................... */ /* ............................................................... */ void main(void) { float x,y,z; while(1) { x = PID_Control(y,z); } }
[单片机]
跑秒程序-数码管显示
/* 程序效果:跑秒,同时显示四位数码管 版权所有:http://www.51hei.com 转载请保留. P1控制数码管的位 P2控制段 注意:如果无法在keil里编译,请删除每一行的所有前导空白, */ #include reg52.h //头文件 #define uchar unsigned char //宏定义 #define uint unsigned int void display(); //函数声明 uchar code table ={0x3f,0x06,0x5b,//数码管显示的数值 0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; void delay(uchar x) //延
[单片机]
简易星三角启动电机 单片机C51程序
当电机较大时,启动是个必须注意的问题。比较简单且用的很多的是星三角启动,这里写出了星三角启动的核心部分。每一个IO口接上继电器,再控制交流接触器,就OK了。但,要注意,星、角交流接触器一定要互锁,否则一旦某个交流接触器粘连,就造成短路了。 #include reg51.h sbit K1=P3^1; //按键1,控制第1个继电器启动 sbit K2=P3^2; //按键2,控制第2个继电器启动 sbit J1=P1^5; //星接继电器 sbit J2=P1^6; //星点继电器 sbit J3=P1^7; //角继电器 void Delay_1ms(unsigned int t) { unsigned int x, y;
[单片机]
51单片机开发系列三_数码管动态扫描显示
数码管由于发光亮度强,指示效果好,非常适合于电梯楼层等数值显示应用中。对于一位数码管,可以采用静态显示,但实际应用中都是需要显示多位数值,数码管模块也只能动态显示,因此笔者在这里简单分析一下数码管动态扫描驱动的实现。 1. 数码管原理概述 数码管由多个发光二极管封装在一起组成“8”字型的器件,引线已在内部连接完成,只引出它们的各个笔划,公共电极。数码管实际上是由七个发光管组成8字形构成的,加上小数点就是8个。这些段分别由字母a,b,c,d,e,f,g,dp来表示。数码管根据内部接法又可分成共阳极数码管和共阴极数码管。共阳数码管是指将所有发光二极管的阳极接到一起形成公共阳极(COM)的数码管(如下图SM*10501),共阴数码管是
[单片机]
51单片机开发系列三_<font color='red'>数码管</font>动态扫描<font color='red'>显示</font>
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
热门活动
换一批
更多
设计资源 培训 开发板 精华推荐

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

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

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