美文网首页
8位数码管显示时间(proteus)

8位数码管显示时间(proteus)

作者: tomato_20fc | 来源:发表于2019-03-22 10:37 被阅读0次

注: 此例程基本完全抄袭博客---利用单片机的数码管模拟时钟的显示时间---

  • 原理图如下:
原理图.png
锁存器使用的74LS373
8位共阴极数码管
时间不太准
代码如下:
#include <reg52.h>
#define SEGPORT P0
//段选和位选引脚,其中段选控制数码管的显示内容,位选控制哪一个数码管亮
sbit seg_select = P2^0;        
sbit bit_select = P2^1;        
//共阴极数码管编码表
unsigned char duanma[10] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};               
//位码
unsigned char weima[8] = {0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f}; 
unsigned char TempData[8];
//初始化时间
unsigned char shi = 9, fen = 28, miao = 30;
//显示
void display()
{
      static unsigned char i = 0;
//初始化数码管,让数码管都灭
      SEGPORT = 0x0;
      seg_select = 1;
      seg_select = 0;
      SEGPORT = 0xff;
      bit_select = 1;
      bit_select = 0;
//显示
      SEGPORT = TempData[i];
      seg_select = 1;
      seg_select = 0;
      SEGPORT = weima[i];
      bit_select = 1;
      bit_select = 0;
        i++;
      if(8 == i)//只有8位
        {
                i = 0;
    }  
}
void time0_init(void)//定时器0初始化
{
      EA = 1;                             
      TMOD |= 0x01;                        
//一次定时20ms
      TH0 = (65536 - 20000) / 256;
      TL0 = (65536 - 20000) % 256;        
      ET0 = 1;                    
      TR0 = 1;
}
//定时器0中断
void timer0_isr() interrupt 1
{
      static unsigned char i = 0;
          TH0 = (65536 - 20000) / 256;
      TL0 = (65536 - 20000) % 256;    
      i++;  
        if(50 == i) //1s
        {
                i = 0;
                miao++;
                if(60 == miao)
                {
                        miao = 0;
                        fen++;
                        if(60 == fen)
                        {
                            fen = 0;
                                shi++;
                                if(24 == shi)
                                {
                                        shi = 0;
                                }
                        }
                    }
        }

        TempData[0] = duanma[shi / 10];
        TempData[1] = duanma[shi % 10];
        TempData[2] = 0x40;
        TempData[3] = duanma[fen / 10];
        TempData[4] = duanma[fen % 10];
        TempData[5] = 0x40;
        TempData[6] = duanma[miao / 10];
        TempData[7] = duanma[miao % 10];

}

 
//定时器1初始化
void time1_init(void)
{

          EA = 1;
      TMOD |= 0x10;
      TH1 = (65536 - 20000) / 256;
      TL1 = (65536 - 20000) % 256;
      ET1 = 1;
      TR1 = 1;
}
void time1_isr() interrupt 3
{
          TH1 = (65536 - 1000) / 256;
      TL1 = (65536 - 1000) % 256;     
      display();
} 
void main()

{
     time0_init();
     time1_init();
     while(1)
     {
           }
}

相关文章

  • 8位数码管显示时间(proteus)

    注: 此例程基本完全抄袭博客---利用单片机的数码管模拟时钟的显示时间--- 原理图如下:

  • 2019-08-09

    数码管显示 数码管显示:两位数码管显示00-99,初始显示00,以周期时间t逐步加1,直至显示到99,再回到00重...

  • [51单片机]for循环中,数组数据提取

    学习代码,数码管动态显示。 案例说明:第一个数码管显示1,时间为0.5s,然后关闭它,立即让第二个数码管显示2,时...

  • Arduino基础入门篇14—跳动的数码管

    本篇介绍数码管显示器件,通过控制一位共阴极数码管动态显示数字0到9来了解数码管的使用。 1. 数码管介绍 数码管,...

  • 2019-09-26静态和动态控制数码管

    1.什么是数码管 1.1、几方面看数码管 (1)外观(2)作用:数码管是显示器件,用来显示数字的。(3)分类:单个...

  • 数码管

    数码管静态显示: 这个是一个共阳的数码管例子: 注意电阻排的阻值选用200欧姆 动态显示 共阴数码管的拓展 共阴和...

  • Arduino基础入门篇15—随机骰子

    上一篇介绍了数码管的使用,一位数码管可显示数字0到9。本篇使用random()函数产生随机数并在数码管上进行显示,...

  • Keil方法类_数码管显示

    三个部分知识: 1)显示2017。 2)显示两位数码管计时60秒。 3)显示六位数码管计时时分秒表。 1)显示20...

  • proteus资源

    Ptoteus 版本 Proteus 7.4 proteus7.5、proteus7.8、proteus8.0、p...

  • Log 4. 案例下载

    1. 八位数码管滚动显示 将程序下载到STC板子上后,看到8个数码管从左到右分别显示0到7的八个数字,隔一段时间后...

网友评论

      本文标题:8位数码管显示时间(proteus)

      本文链接:https://www.haomeiwen.com/subject/nyokvqtx.html