数码管显示模拟8位时钟C语言程序设计

发布者:美丽花朵最新更新时间:2016-10-27 来源: eefocus关键字:数码管显示  模拟8位时钟 手机看文章 扫描二维码
随时随地手机看文章
//数码时钟设计

#include    //  包含51单片机寄存器定义的头文件
unsigned char Tab[ ]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};  //control  shape
unsigned char port[8]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
unsigned char int_time ; //中断次数计数变量
unsigned char second;    //秒计数变量
unsigned char minute;    //分钟计数变量
unsigned char hour;     //小时计数变量

/////////////////////////////////////////////////////

 void delay(void)      //延时函数,延时约0.6ms
 {
   unsigned char j;
 for(j=0;j<180;j++)
  ;
  }

/******************************************************************
函数功能:显示秒的子程序
入口参数:s
********************************************************************/
 void DisplaySecond(unsigned char s)
{
   P2=0xbf;        //P2.6引脚输出低电平, DS6点亮 
   P0=Tab[s/10];          //显示十位
   delay();
  delay();
   delay();
  
   P2=0x7f;       //P2.7引脚输出低电平, DS7点亮 
   P0=Tab[s%10];         //显示个位
 delay();
  delay();
   delay();
  
 P2=0xff;     //关闭所有数码管
    P0=0xff;
  delay();
  delay();
   delay();
 
 }
 
/******************************************************************
函数功能:显示分钟的子程序
入口参数:m
********************************************************************/
void DisplayMinute(unsigned char m)
{
     P2=0xf7;   // P2.3引脚输出低电平, DS3点亮 
     P0=Tab[m/10];//显示个位
    delay();
  delay();
   delay();
  delay();
   P2=0xef;   // P2.4引脚输出低电平, DS4点亮 
   P0=Tab[m%10];
   delay();
  delay();
   delay();
  
   P2=0xdf;   //P2.5引脚输出低电平, DS5点亮 
   P0=0xbf;   //分隔符“-”的段码
   delay();
  delay();
   delay();
  
   P2=0xff;   //关闭所有数码管
   P0=0xff;
    delay();
  delay();
   delay();
 

 }
/******************************************************************
函数功能:显示小时的子程序
入口参数:h
********************************************************************/
void DisplayHour(unsigned char h)
{
   
   P2=0xfe;        //P2.0引脚输出低电平, DS0点亮 
   P0=Tab[h/10];          //显示十位 
   delay();
  delay();
   delay();
 
   P2=0xfd;       //P2.1引脚输出低电平, DS1点亮 
   P0=Tab[h%10];    //显示个位
 delay();
  delay(); 
   delay();
   
 P2=0xfb;     //P2.2引脚输出低电平, DS2点亮 
 P0=0xbf;     //分隔符“-”的段码
 delay();
  delay();
   delay();
  
   P2=0xff;     //关闭所有数码管
   P0=0xff;
    delay();
  delay();
   delay();
   
 }
 /******************************************************************
函数功能:主函数
********************************************************************/

 void main(void)
   {
      
   TMOD=0x01;             //使用定时器T0  
   EA=1;                  //开中断总允许
   ET0=1;                 //允许T0中断
   TH0=(65536-46083)/256;  //定时器高八位赋初值
   TL0=(65536-46083)%256;  //定时器低八位赋初值
   TR0=1;
   int_time=0;    //中断计数变量初始化
   second=0;      //秒计数变量初始化
   minute=0;     //分钟计数变量初始化
   hour=0;       //小时计数变量初始化
        
         while(1)
   {       
       DisplaySecond(second);    //调用秒显示子程序
      delay();
      DisplayMinute(minute);   //调用分钟显示子程序
      delay();
       DisplayHour(hour);     
      delay();                
     }
  }

/******************************************************************
函数功能:定时器T0的中断服务子程序
********************************************************************/
  void interserve(void ) interrupt 1 using 1  //using Time0
  {
       int_time++;
   if(int_time==20)
     {
              int_time=0;    //中断计数变量清0
          second++;      //秒计数变量加1
   }
     if(second==60)
     {
       second=0;    //如果秒计满60,将秒计数变量清0
       minute++;    //分钟计数变量加1
     }
      if(minute==60)
        {
         minute=0;    //如果分钟计满60,将分钟计数变量清0
         hour++;      //小时计数变量加1
      }
        if(hour==24)
          {
          hour=0;    //如果小时计满24,将小时计数变量清0
        }

     TH0=(65536-46083)/256;   //定时器重新赋初值
   TL0=(65536-46083)%256;
            
  
  }  

关键字:数码管显示  模拟8位时钟 引用地址:数码管显示模拟8位时钟C语言程序设计

上一篇:数码管循环显示0-9 C语言程序设计
下一篇:数码管快速动态扫描显示1234

推荐阅读最新更新时间:2024-03-16 15:17

单片机数码管显示数字递增
让单片机的数码管显示的数从0开始递增一直到255,然后重新置0,再递增,如此循环. 还是用到了将要显示的数进行百位,十位,个位的分离. 从这篇开始,以后的程序就要注意程序的规范性,与可读性了.源代码如下(已经成功调通): #include reg52.h #define uint unsigned int #define uchar unsigned char sbit sda = P1^0; sbit clk = P1^1; sbit dig1 = P1^2; sbit dig2 = P1^3; sbit dig3 = P1^4; sbit dig4 = P1^ 5; uchar code table ={0x7e,0x0
[单片机]
数码管动态扫描显示01234567显示
原理图:8个数码管它的数据线并联接到JP5, 位控制由8个PNP型三级管驱动后由JP8引出。 相关原理: 数码管是怎样来显示1,2,3,4呢?数码管实际上是由7个发光管组成8字形构成的,加上小数点就是8个。我们分别把他命名为A,B,C,D,E,F,G,H。 搞懂了这个原理, 我们如果要显示一个数字2, 那么 A,B,G,E,D这5个段的发光管亮就可以了。也就是把B,E,H(小数点)不亮,其余全亮。根据硬件的接法我们编出以下程序。当然在此之前,还必须指定哪一个数码管亮,这里我们就指定最后一个P2.7。 LOOP: CLR P2.7 ;选中最后的数码管 SETB P0.7 ;B段不亮 SETB P0.5 ;小数点不亮 S
[单片机]
<font color='red'>数码管</font>动态扫描<font color='red'>显示</font>01234567<font color='red'>显示</font>
51的静态和动态数码管显示
一、数码管显示原理: 数码管其实就是有8个LED构成,分为a、b、c、d、e、f、g、dp,而数码管又分为共阴极(左边,高电平点亮)和共阳极(右边,低电平点亮),点亮对应的LED即可显示对应的数字,共阴极编码表如下: 0x3f , 0x06 , 0x5b , 0x4f , 0x66 , 0x6d 、0x7d , 0x07 , 0x7f , 0x6f , 0x77 , 0x7c,0x39 , 0x5e , 0x79 , 0x71 , 0x00 分别对应0,1,2,3,4,5,6,7,8,9,a,b,c,d,e,f,而0x00则不显示。 注意:比如显示0,则要abcdef都为1,即是0011 1111,转为16进制就是
[单片机]
51的静态和动态<font color='red'>数码管</font>的<font color='red'>显示</font>
PIC单片机对LED数码管矩阵键盘显示的设计
#include #include “。./head/config.h” __CONFIG(HS&WDTDIS&LVPDIS&PWRTEN);//对熔丝位进行设置 单片机LED共阳极段码表(带小数点) 0~9 const char table1[]={0X0A,0XFA,0X8C,0XA8,0X78,0X29,0X09,0XBA,0X08,0X28,0x18,0x49,0x0f,0xc8,0x0d,0x1d}; 数码管位码表 const char table[] = {0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80}; unsigned int result = 0,lastresult = 0;
[单片机]
PIC单片机对LED<font color='red'>数码管</font>矩阵键盘<font color='red'>显示</font>的设计
51单片机之动态数码管显示
首先来看一下开发板上的电路原理图: 本开发板上使用的是,通过P22、P23、P24控制3-8译码器来对数码管进行位选,通过P0口经过573的驱动控制数码管的段选,通过P13控制573的使能端,为低电平时573才会有输出。 138译码器的真值表如下图G1,G2A,G2B都是选通脚,当G1,G2A,G2B为100的时候138译码器开始工作,A为最低位,B为中间位,C为最高位。CBA=000B时,Y0为1,其他口为0,CBA=001B时,Y1为1,其他口为0,CBA=010B时,Y2为1,其他口为0,CBA=011B时,Y3为1,其他口为0,CBA=100B时,Y4为1,其他口为0,CBA=101B时,Y5为1,其他口为0,CB
[单片机]
51单片机之动态<font color='red'>数码管</font><font color='red'>显示</font>
MSP430G2553 HC595 数码管 SPI 显示 时分秒
// Timer A0 interrupt service routine #pragma vector=TIMER0_A0_VECTOR __interrupt void Timer_A(void) { t_count = (t_count + 1) % 500; //500次2ms就是1s if (t_count == 1) { rtc_sec++; if (rtc_sec == 60) { rtc_sec = 0; rtc_min++; if (rtc_min == 60) { rtc_min = 0;
[单片机]
MSP430G2553 HC595 <font color='red'>数码管</font> SPI <font color='red'>显示</font> 时分秒
C51单片机学习笔记(五)——数码管的静态显示和动态显示
1.数码管的显示原理 数码管有一位和多位一体两类,它是由8个LED(a,b,c,d,e,f,g,dp)排列组成,任意一个LED叫作一个“段”。通过给a,b,c,d,e,f,g,dp各个脚加上不同的控制电压可以使不同的LED导通发亮,从而显示0~9各个数字和ABCDEF各个字母。 由于8个LED共有16个引脚,为了减少引脚,形成了共阳极和共阴极两种数码管,如下图,如果是共阴极,点亮方法就是公共脚加低电平,引出脚加高电平,如果是共阳极,公共脚加高电平,引出脚加低电平即可。(我的数码管是共阳极,所以下面我就使用共阳极进行说明) 2.数码管的静态显示 所谓静态显示,就是数码管的笔画点亮后,这些笔画就一直处于点亮状态,而不是处于周期
[单片机]
C51单片机学习笔记(五)——<font color='red'>数码管</font>的静态<font color='red'>显示</font>和动态<font color='red'>显示</font>
C51单片机数码管动态显示
数码管作为最廉价的输出设备,在各种自动化设备中有很大的应用,最简单普通的显示方式为动态刷新显示,称为假动态显示,即通过分时扫描每一位,利于人眼的视觉停留现象,造成一种静态显示的效果,如下图所示: C51单片机由于运行速度很慢,在高刷新频率下,单片机的资源耗费很厉害,这样单片机就不可以再进行大量的计算工作,实际上,单片机在刷新时,只需要周期性的改变GPIO口的状态就可以了,剩下的时间其实都是在空转的状态下,我们能不能将这个空转的状态拿来用呢?当然是可以的啦,这里,我们利用单片机的定时器周期地产能中断,在中断内进行数码管的刷新工作,就可以将等待中断的这个CPU时间拿来做别的事情了。 硬件电路: 代码贴过来: 主函数
[单片机]
C51单片机<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