0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

基于51单片机数码管动态时钟电路图原理图

2oON_changxuemc 2019-09-17 09:36 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

首先准备材料吧:SEG数码管4个共阴极(小编用的共阳极的)、10k排阻(小编没有直接做了个)、51单片机、按钮、30p电容、12MHz晶振、10k电阻、10uf电容、插针、74ls245(小编用三极管代替了)。

成品图

原理图

主程序:

#include "Key.h"

#include "led.h"

uchar timeSetBuff[8]={'0','0',LED_MODE_COUNT,'0','0',LED_MODE_COUNT,'0','0'};//时钟数据缓冲区

uchar alarmSetBuff[8]={'0','0',LED_MODE_ALARM,'0','0',LED_MODE_ALARM,'0','0'};//闹钟时间数据缓冲区

uchar timeDisMod=0x24; //00100100

uchar secondTemp,minuteTemp,hourTemp;

uchar secondAlarm,minuteAlarm,hourAlarm;

uchar timer0Temp;

uchar alarmKeyCount; //闹钟起停键计数

bit alarm_is_ok; //闹钟起停状态

bit time_is_ok; //时间是否到

bit interface_mod; // 显示界面模式,0为主时间界面,1为设置界面

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

* 函数名称:定时器0

* 功 能:定时器0初始化

* 入口参数:无

* 出口参数:无

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

void initTimer0(void) //定时10ms

{

TMOD |= 0x01; //GATE=0,TR=1运行;C/T=1,counter,0,timer;01十六进制

TH0 = 0xdc;

TL0 = 0x00;

TR0 = 1; //timer0 控制位,为1时启动timer0

ET0 = 1; //timer0 中断使能

}

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

* 函数名称:时钟比较

* 功 能:比较时钟和闹钟的时间缓冲区,只比较时和分

* 入口参数:无

* 出口参数:无

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

void timeCompare(void)

{

if((minuteTemp == minuteAlarm) && (hourTemp == hourAlarm))

{

time_is_ok = 1;

alarm_is_ok = 0;

interface_mod = 1;

}

}

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

* 函数名称:主函数

* 功 能:调用并执行各个子函数

* 入口参数:无

* 出口参数:无

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

void main()

{

uchar keyRead;

init_led();

init_key();

initTimer0();

timer0Temp = 0x00;

secondTemp = 0x00;

minuteTemp = 0x00;

hourTemp = 0x00;

secondAlarm = 0x00;

minuteAlarm = 0x00;

hourAlarm = 0x00;

alarmKeyCount = 0x02;

alarm_is_ok = 0; //默认状态停止

time_is_ok = 0; //默认时间未到

interface_mod = 0;

sei();

while(1)

{

if(interface_mod == 1)

ledSweepDisplay(alarmSetBuff,timeDisMod);

else

ledSweepDisplay(timeSetBuff,timeDisMod);

if(alarm_is_ok == 1)

timeCompare();

keyRead = get_key_value();

if(keyRead == KEY_ALARM)

{

if(alarm_is_ok == 1 || time_is_ok == 1)

{

alarm_is_ok = 0;

time_is_ok = 0;

interface_mod = 0;

alarmKeyCount = 0x00;

}

else

{

if(alarmKeyCount

alarmKeyCount++;

else

alarmKeyCount = 0x00;

if(alarmKeyCount == 0x01)

interface_mod = 1;

if(alarmKeyCount == 0x02)

{

alarm_is_ok = 1;

interface_mod = 0;

}

}

}

if(keyRead == KEY_SECOND)

{ if(interface_mod == 1)

{

if(secondAlarm

secondAlarm++;

else

secondAlarm = 0x00;

alarmSetBuff[S_L] = secondAlarm % 10 + '0';

alarmSetBuff[S_H] = secondAlarm / 10 + '0';

}

else

{

if(secondTemp

secondTemp += 1;

else

secondTemp = 0x00;

timeSetBuff[S_L] = secondTemp % 10 + '0';

timeSetBuff[S_H] = secondTemp / 10 + '0';

}

}

if(keyRead == KEY_MINUTE)

{ if(interface_mod == 1)

{

if(minuteAlarm

minuteAlarm++;

else

minuteAlarm=0x00;

alarmSetBuff[M_L]=minuteAlarm%10+'0';

alarmSetBuff[M_H]=minuteAlarm/10+'0';

}

else

{

if(minuteTemp

minuteTemp += 1;

else

minuteTemp = 0x00;

timeSetBuff[M_L] = minuteTemp % 10 + '0';

timeSetBuff[M_H] = minuteTemp / 10 + '0';

}

}

if(keyRead == KEY_HOUR)

{

if(interface_mod == 1)

{

if(hourAlarm

hourAlarm++;

else

hourAlarm = 0x00;

alarmSetBuff[H_L] = hourAlarm % 10 + '0';

alarmSetBuff[H_H] = hourAlarm / 10 + '0';

}

else

{

if(hourTemp

hourTemp += 1;

else

hourTemp = 0x00;

timeSetBuff[H_L] = hourTemp%10+'0';

timeSetBuff[H_H] = hourTemp/10+'0';

}

}

}

}

/*, */

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

* 函数名称:定时器0中断函数

* 功 能:定时器0溢出中断入口处,定时10ms

* 入口参数:无

* 出口参数:无

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

void timer0_overflow(void) interrupt 1

{

TH0 = 0xdc;

TL0 = 0x00;

if(time_is_ok == 1) //报警

WARN_TRUMPET = ~WARN_TRUMPET;

if(timer0Temp

timer0Temp++;

else //进中断100次

{

timer0Temp = 0x00;

if(secondTemp

{

secondTemp++;

}

else

{

secondTemp = 0x00;

if(minuteTemp

minuteTemp++;

else

{

minuteTemp = 0x00;

if(hourTemp

hourTemp++;

else

hourTemp = 0x00;

}

}

}

timeSetBuff[S_L] = secondTemp%10+'0';

timeSetBuff[S_H] = secondTemp/10+'0';

timeSetBuff[M_L] = minuteTemp%10+'0';

timeSetBuff[M_H] = minuteTemp/10+'0';

timeSetBuff[H_L] = hourTemp%10+'0';

timeSetBuff[H_H] = hourTemp/10+'0';

sei();

}

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 电路图
    +关注

    关注

    10458

    文章

    10750

    浏览量

    551562
  • 51单片机
    +关注

    关注

    277

    文章

    5714

    浏览量

    132056
  • 数码管
    +关注

    关注

    32

    文章

    1891

    浏览量

    93700

原文标题:51单片机数码管动态时钟电路图

文章出处:【微信号:changxuemcu,微信公众号:畅学单片机】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    如何使用51单片机控制动态数码管

    简要地写了如何使用51单片机控制动态数码管的过程,内含模块信息、源代码、原理图等。
    发表于 11-18 06:03

    8051单片机数码管电路图

    8051单片机数码管电路图
    发表于 09-28 11:55 233次下载
    8051<b class='flag-5'>单片机</b><b class='flag-5'>数码管</b><b class='flag-5'>电路图</b>

    51单片机数码管部分

    带您从零学51单片机数码管部分 目录1 数码管应用2 数码管内部结构及硬件原理图3
    发表于 02-10 14:36 155次下载

    8051单片机数码管电路图[1]

    8051单片机数码管电路图,感兴趣的同学可以下载看看,免费的哦1
    发表于 10-29 15:10 44次下载

    51单片机原理图

    51单片机数码管、矩阵键盘、液晶显示模块原理图DXP文件。
    发表于 05-10 10:36 0次下载

    使用51单片机实现数码管显示0到9的电路图和C语言程序免费下载

    本文档的主要内容详细介绍的是使用51单片机实现数码管显示0到9的电路图和C语言程序免费下载。
    发表于 09-06 17:26 5次下载
    使用<b class='flag-5'>51</b><b class='flag-5'>单片机</b>实现<b class='flag-5'>数码管</b>显示0到9的<b class='flag-5'>电路图</b>和C语言程序免费下载

    使用51单片机驱动数码管显示0到99的电路图和C51程序免费下载

    本文档的主要内容详细介绍的是使用51单片机驱动数码管显示0到99的电路图和C51程序免费下载。
    发表于 08-22 17:30 15次下载
    使用<b class='flag-5'>51</b><b class='flag-5'>单片机</b>驱动<b class='flag-5'>数码管</b>显示0到99的<b class='flag-5'>电路图</b>和C<b class='flag-5'>51</b>程序免费下载

    使用51单片机进行数码管动态显示的程序免费下载

    本文档的主要内容详细介绍的是使用51单片机进行数码管动态显示的程序免费下载。1、设计要求在一个8位8段数码管
    发表于 07-26 17:36 13次下载
    使用<b class='flag-5'>51</b><b class='flag-5'>单片机</b>进行<b class='flag-5'>数码管</b><b class='flag-5'>动态</b>显示的程序免费下载

    如何使用51单片机使数码管按一下键数码管示数加一程序和电路图

    本文档的主要内容详细介绍的是如何使用51单片机使数码管按一下键数码管示数加一程序和电路图免费下载。
    发表于 07-05 17:41 10次下载
    如何使用<b class='flag-5'>51</b><b class='flag-5'>单片机</b>使<b class='flag-5'>数码管</b>按一下键<b class='flag-5'>数码管</b>示数加一程序和<b class='flag-5'>电路图</b>

    使用51单片机设计8位数码管动态显示的电路图和程序免费下载

    本文档的主要内容详细介绍的是使用51单片机设计8位数码管动态显示的电路图和程序免费下载从12345678开始,每次按 S1键加1
    发表于 07-04 17:41 7次下载
    使用<b class='flag-5'>51</b><b class='flag-5'>单片机</b>设计8位<b class='flag-5'>数码管</b><b class='flag-5'>动态</b>显示的<b class='flag-5'>电路图</b>和程序免费下载

    51单片机开发板实现6位数码管数字时钟的仿真电路图免费下载

    本文档的主要内容详细介绍的是51单片机开发板实现6位数码管数字时钟的仿真电路图免费下载。
    发表于 04-10 08:00 20次下载
    <b class='flag-5'>51</b><b class='flag-5'>单片机</b>开发板实现6位<b class='flag-5'>数码管</b>数字<b class='flag-5'>时钟</b>的仿真<b class='flag-5'>电路图</b>免费下载

    STC12C2052AD单片机控制的数码管时钟程序及电路图

    STC12C2052AD单片机控制的数码管时钟数码管是共阳4位时钟数码管,由于使用
    的头像 发表于 09-18 17:12 1.3w次阅读

    51单片机动态数码管

    简要地写了如何使用51单片机控制动态数码管的过程,内含模块信息、源代码、原理图等。
    发表于 11-11 20:06 15次下载
    <b class='flag-5'>51</b><b class='flag-5'>单片机</b>:<b class='flag-5'>动态</b><b class='flag-5'>数码管</b>

    51单片机数码管显示学习笔记

    本实验主要是了解51单片机数码管连接的硬件电路图以及软件编程操作。
    发表于 06-23 15:02 3226次阅读
    <b class='flag-5'>51</b><b class='flag-5'>单片机</b><b class='flag-5'>数码管</b>显示学习笔记

    基于51单片机数字时钟数码管显示设计

    本资源内容概要:       这是基于51单片机数字时钟数码管显示设计包含了电路图源文件(Altiumdesigner软件打开)、C语言程序
    发表于 06-25 10:42 1次下载