此次对于数码管进行一个简单的应用,同时可以设计一个电子小时钟,增加趣味性。

首先我们先进行原理图的讲解,这里我们直接使用的开发板,其原理连接图如下:

其中D(0~1)是连接在单片机的P0口上的。

从图中,我们可以看到,第一个74HC573是来控制8个数码管的位选的,就是说我要选种哪个数码管,这里的WE是低电平有效,比如说我想选中最后一个数码管,那么这里我就要将0x7f送到相应的I/O口。第二个74HC573是来控制数码管显示什么的这里0~9的16进制码如下:

0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f;

要想完成电子时钟,我们先要显示一个数值,

这里我们封装两个函数:

wirte_address(unsigned char);

write_date(unsigned int);

第一个函数是用来写地址的,就是用来选中数码管的;

第二个函数是用来写数据的,就是选中的数码管显示什么。

比如我们想在最后一个数码管上显示一个8;

那么则有:

write_address(0x7f);

write_date(0x7f);

这样就能在相应的位置上显示一个8了;

然后我们就要多个位置显示,这里我们硬件的P0口接的是数码管,同时我们要引进相应的延时函数delay(unsigned int);

我们利用发光管的余辉和人眼视觉暂留作用,让人眼无法分辨出来,从而达到“同时显示的效果”。

但是我们需要注意的是消影,在每次写入之前令P0=0xff,这是为了消除上次段选数据,否则会造成,显示混乱。

当我们能显示时,就需要了解定时器,让它来计时,然后将数值取出,进行显示。这里我们的晶振是12MHz,所以一个机械周期时1/12MHz=1us,为了使计时较为精确,我们这里选择定时器0的模式2,8位重装定时器,并且我们100us进入一次中断,定时器的初始化就该如下:

TMOD=0x02;

TH0=256-100;

TL0=256-100;

EA=1;

ET0=1;

TR0=1;

这样我们再定义一个n用来计数进入中断的次数,当n的10000时,就表示1s到了,所以我们需要对相应的变量进行处理。

那么我们需要对数据进行处理,比如,所得的秒的值,其十位=秒/10,其个位就等于秒%10,其它以此类推。

那么整个的程序代码如下:

#include<reg52.h>
#define uint unsigned int
#define uchar unsigned charuchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};  //数码管位选数据
sbit dula=P2^6;//段选信号,写数码管数据
sbit wela=P2^7;//位选信号,选择数码管uint miao=0;       //秒
uint fen=0;            //分
uint shi=0;            //时
uint n=0;          //计数
uint date[6]={0,0,0,0,0,0};      //定义一个有6个地址的数组,分别存时,分,秒的个位和十位。
void delay(uint z)           //延时函数
{uint x,y;for(x=z;x>0;x--)for(y=50;y>0;y--);
}void write_address(uchar address)       //写地址函数,选择数码管
{wela=1;P0=address;wela=0;
}void write_date(uint n)                     //写数据函数,送入段选信号
{dula=1;P0=table[n];dula=0;
}                                       //显示函数
void display()
{        write_date(date[0]);P0=0xff;write_address(0x7f);delay(1);write_date(date[1]);P0=0xff;write_address(0xbf);delay(1);write_date(date[2]);P0=0xff;write_address(0xef);delay(1);write_date(date[3]);P0=0xff;write_address(0xf7);delay(1);write_date(date[4]);P0=0xff;write_address(0xfd);delay(1);write_date(date[5]);P0=0xff;write_address(0xfe);delay(1);}
void time_init()                           //定时器初始化函数
{TMOD=0x02;                              //选择方式2TH0=156;                            //重装初值为156TL0=156;                             //运行值为156EA=1;                                 //开总中断ET0=1;                               //开定时器0中断TR0=1;                                //开定时器0
}void main()
{dula=0;                                  //先关闭位选,段选信号。wela=0;time_init();while(1){display();}}void timer() interrupt 1                      //定时器0中断
{n++;if(n==10000)                                //当n=10000时,表示1s到了{     n=0;miao++;if(miao==60){miao=0;fen++;if(fen==60){fen=0;shi++;if(shi==24){shi=0;}}}date[0]=miao%10;date[1]=miao/10;date[2]=fen%10;date[3]=fen/10;date[4]=shi%10;date[5]=shi/10;}}

其效果图如下:

基于51单片机的电子时钟(数码管显示)相关推荐

  1. 基于51单片机的8位数码管显示的可调时电子时钟

     基于51单片机的8位数码管显示的可调时电子时钟 本人大二本科生,第一次发东西,功能比较简单,代码有点复杂,希望能有大神指正. 基于51单片机的不可调时间的时钟显示,晶振为11.0592MHZ,60H ...

  2. 基于51单片机的电子时钟设计

    基于51单片机的电子时钟设计 0 功能介绍 1.从DS1302中读取时间显示 2.一共4个按键,按键1按下进入修改时间模式,再按下切换修改的时间变量,这个时候第2和3个按键就是修改时间变量的按键,修改 ...

  3. 【036】基于51单片机的电子时钟与秒表Proteus仿真设计

    一.压缩包资料内容 (1).基于51单片机的电子时钟与秒表proteus仿真设计一份: (2).基于51单片机的电子时钟与秒表proteus仿真设计keli源代码一份: (3).基于51单片机的电子时 ...

  4. c51单片机时钟c语言程序设计,基于51单片机的电子时钟设计..doc

    -- I -- - - I -- 设计题目: 基于 51 单片机的电子时钟设计 摘要 单片机,是集 CPU ,RAM ,ROM ,定时器,计数器和多种接口于一体的微控制器.自 20 世纪 70 年代问 ...

  5. 基于51单片机LCD1602电子时钟实物制作

    之前写了51单片机的LCD1602的程序,现在画了电路图,焊接了电路板,做出了基于51单片机LCD1602电子时钟的实物. 注意事项: 焊接过程中,注意提前布局电路. 对应好端口(避免接线错误),我由 ...

  6. 基于51单片机的自动浇花系统设计/基于51单片机的智能抽奖系统控制设计/基于51单片机的数字时钟与日历显示控制设计 毕业设计

    1147基于51单片机的自动浇花系统设计 设计思路:通湿度传感器实时监测湿度,通过LCD显示出实时的湿度采集值,可以通过按键设定目标界限,当达到这个界限值时,浇花系统的电机装置运行. 电路包含:LCD ...

  7. 74hc164驱动数码管c语言程序,基于51单片机的74HC164驱动数码管显示程序与仿真

    基于51单片机的74HC164驱动数码管显示程序与仿真 基于51单片机的74HC164驱动一位数码管显示程序与仿真 #include #include #define uchar unsigned c ...

  8. 基于51单片机的电子时钟万年历温度仿真数码管显示

    硬件设计 仿真图1: A. 由数码管作为显示器,三个按键可以设置时间. 仿真图2: A 由数码管作为显示器,可通过开关设置年月日星期等时间: 程序设计1 #include <reg51.h> ...

  9. 毕业设计 - 基于51单片机的电子时钟设计与实现

    文章目录 单片机电子时钟程序设计 实现效果 最后 单片机电子时钟程序设计 共用体除非必要,否则学长不推荐使用,枚举的用法比较简单,在本书19章的项目实践中有很好的示例,这节课我们先来练习一下结构体的使 ...

  10. 基于51单片机的温度控制系统数码管显示蜂鸣器报警proteus仿真原理图PCB

    功能: 0.本系统采用STC89C52作为单片机 1.系统实时监测并显示当前温度,并通过四位数码管显示 2.超过设定阈值,蜂鸣器将报警,同时控制相应继电器实现降温或者加热 3.系统具备三个功能按键,可 ...

最新文章

  1. Android之四大组件(AIDL Service的使用)
  2. 深度学习100例-卷积神经网络(CNN)识别眼睛状态 | 第17天
  3. java 修改ip_如何用脚本快速修改IP地址(Netsh)
  4. 从远程(包括ftp,http等协议)地址获取文件流信息
  5. 大数据_Hbase-API访问_Java操作Hbase_MR-数据迁移-代码测试---Hbase工作笔记0017
  6. Android:屏幕自适应
  7. 5G 时代,一加的机会在哪里?
  8. 【神经网络】激活函数的作用及常用激活函数
  9. 常见的74系列集成电路
  10. HDU 1069 Monkey and Banana(二维偏序LIS的应用)
  11. 让AI简单且强大:深度学习引擎OneFlow技术实践
  12. java多边形合并_geotools实现多边形的合并缓冲区
  13. Unity 讯飞实时语音转写(二)—— 接收转写结果
  14. python绘制网络拓扑_python画网络拓扑图
  15. 创造与魔法java语言_创造与魔法基础魔法大全 超实用基础魔法推荐
  16. Unity 摄像机切换镜头
  17. C# DateTime Subtract
  18. stm8 硬件SPI
  19. UnityShader-高斯模糊
  20. vissim跟驰模型_VISSIM,PARAMICS,TSIS仿真软件对比分析 -

热门文章

  1. ERROR | Corrupt JPEG data: 111 extraneous bytes before marker 0xd9...
  2. 堆漏洞挖掘中的malloc_consolidate与FASTBIN_CONSOLIDATION_THRESHOLD
  3. btrfs和ntfs linux5,如何选择文件系统EXT4、Btrfs 和 XFS
  4. gensim中word2vec API参数说明
  5. STM32通过USB方式烧录程序DFU详解 ( 使用新版本的DFU工具 DfuSe_Demo_V3.0.5_Setup 测试ok 2018-7-27 改)
  6. 一个典型业务系统卡顿故障分析
  7. STEP2——《数据分析:企业的贤内助》重点摘要笔记(四)——数据清洗
  8. 中科院计算机软件所导师,中国科学院软件研究所硕士生导师刘立祥
  9. 台式计算机如何定时关机,台式电脑设置定时关机
  10. php yar call,php yar扩展在laravel中的使用