在清翔51单片机上实现闹钟以及24h显示程序

51单片机_99分钟倒计时(可暂停,可清零) 话不多说,报代码/*-----------------------------------------------  名称:99分钟倒计时数码管显示  论坛:www.doflye.net  编写:shifang  日期:2009.5  修改:无  内容:99分钟倒计时器,可以通过按键上调下调时间,定时器到时喇叭发声报警        带有点按和连按功能-----------------------... 阅读详情

在清翔51单片机上实现闹钟以及24h显示程序

此程序过长时间运作可能会造成一定的误差

#include<reg52.h>

#define uchar unsigned char
/*sbit*/
sbit dula = P2^6;
sbit wela = P2^7;
sbit beep = P2^3;
/*声明变量*/
uchar count1,Second=40,Minute=2,Hour=21;
uchar code SMGwei[] = {0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
uchar code SMGduan[] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
/*声明函数*/
void time0init();        //定时器0 50ms
void time1init();       //定时器1  1ms
void display(uchar,uchar,uchar);    //数码管显示
void naozhong(uchar,uchar,uchar);

void main()
{
    time0init();/*time0和time1初始化*/
    time1init();
    while(1);   //等待中断
}
void time0init()//50ms        //定时器0初始化,开启中断
{
    TR0 = 1;
    TMOD |= 0x01;
    TH0 = 0x4c;
    TL0 = 0x00;
    EA = 1;
    ET0 = 1;
}
void time1init()//1ms        //定时器1初始化,开启中断
{
    TR1 = 1;
    TMOD |= 0X10;
    TH1 = 0x0FC;
    TL1 = 0x66;           
    EA = 1;
    ET1 = 1;
}
void display(uchar num,uchar Minute,uchar Hour)
{
    static uchar wei;			//局部静态变量
    P0 = 0xff;
    wela = 1;
    P0 = SMGwei[wei];
    wela = 0;
    switch(wei)
    {
        case 0: dula = 1; P0 = SMGduan[Hour/10];    dula =0; break;     /*小时*/
        case 1: dula = 1; P0 = SMGduan[Hour%10];    dula =0; break;
        case 2: dula = 1; P0 = 0x40;                dula =0; break;
        case 3: dula = 1; P0 = SMGduan[Minute/10];  dula =0; break;
        case 4: dula = 1; P0 = SMGduan[Minute%10];  dula =0; break;     /*分钟*/
        case 5: dula = 1; P0 = 0x40;                dula =0; break;
        case 6: dula = 1; P0 = SMGduan[num/10];     dula =0; break;     /*秒*/
        case 7: dula = 1; P0 = SMGduan[num%10];     dula =0; break;
    }
    wei++;
    if(wei ==8)
    {
        wei = 0;
    }
}
void time1() interrupt 3
{
	TF1 = 0;
	TH1 = 0x0FC;
    TL1 = 0x66;
    display(Second,Minute,Hour);
    naozhong(Second,Minute,Hour);
}
void time0() interrupt 1
{
    TF0 = 0;
    TH0 = 0x4c;
    TL0 = 0x00;
    count1++;
    if(count1 == 20)
    {
        count1 = 0;
        Second++;
            P1 = ~P1;
            if(Second == 60)
            {
                Second = 0;
                Minute++;
                if(Minute == 60)
                {
                    Minute = 0;
                    Hour++;
                    if(Hour == 24)
                    {
                        Hour = 0;
                    }
                }
            }
    }
}
void naozhong(uchar Second,uchar Minute,uchar Hour)//可以在此设置闹钟
{
    if(Hour == 21 &&(Minute<=4 && Minute>=3))
    {
        beep = 0;				//闹钟开启
    }
}
  1. 为什么定时器1设定的中断时间是1ms?

一开始设置的是5ms扫描数码管显示以及闹钟,但发现5ms会导致8个数码管显示时会导致数码管显示问题,实际上1ms也会导致一点拖影,但人眼基本分辨不出

码主为一个初学者,刚学习到C语言的迭代就开始搞单片机,代码可能写的有点拖沓,见谅!

C51单片机时钟+闹钟程序 自己写的一个单片机时钟,附加闹钟,程序比较简单,但很实用 立即下载

相关推荐

用51单片机制作电子时钟

准确延时,数码管显示!用于电子时钟 #include <reg51.h> //*** 函数定义 *** void long_delay(void); // 长延时 void short_delay(void); // 短延时 void delay10ms(unsigned char); // 延时10MS void write7279(unsigned char, unsigned char);// 写入到HD7279 unsigned char read7279(unsigned char);//从HD7279读入 void send_byte(unsigned char); // 发送一个字节 unsigned char receive_byte(void); //接收一个字节 void init_timer(); /*定时器T0初始化*/ void conv(); /*时、分、秒单元及走时单元转换*/ void dirve(); /*时间显示程序*/ void time_adj(); /*时间调整设置*/ unsigned char digit[6]; unsigned char j; unsigned int tmr; unsigned long wait_cnter; unsigned char hour=0,min=0,sec=0; /*时、分、秒单元清零*/ unsigned char deda=0; /*5mS计数单元清零*/ bit sign; //设置标志位 sbit cs=P1^5; // cs at P1.5 sbit clk=P1^4; // clk 连接于 P1.4 sbit dat=P1^3; // dat 连接于 P1.3 sbit set=P3^7; // key 连接于 P3.7 //****** HD7279A 指令 ****** #define CMD_RESET 0xa4 #define CMD_TEST 0xbf #define DECODE0 0x80 #define DECODE1 0xc8 #define CMD_READ 0x15 #define UNDECODE 0x90 #define RTL_CYCLE 0xa3 #define RTR_CYCLE 0xa2 #define RTL_UNCYL 0xa1 #define RTR_UNCYL 0xa0 #define ACTCTL 0x98 #define SEGON 0xe0 #define SEGOFF 0xc0 #define BLINKCTL 0x88 //*** 主函数 *** main() { for (tmr=0;tmr<0x2000;tmr++); // 上电延时 send_byte(CMD_RESET); // 复位HD7279A //****************************************** // 测试指令演示 //****************************************** send_byte(CMD_TEST); // 指令测试 for (j=0;j<3;j++) // 延时哟3秒? { delay10ms(100); } send_byte(CMD_RESET); // 清除显示 //********************************************** //时间显示 //********************************************** init_timer();/*定时器T0初始化*/ while(1) { if(set==0) time_adj(); conv(); /*时、分、秒单元及走时单元转换*/ dirve(); /*时、分、秒单元显示*/ } } /*定时器T0 5mS初始化*/ void init_timer() { TMOD=0x01; TH0=-(4800/256); TL0=-(4800%256); IE=0x82; TR0=1; } /*5mS定时中断服务子函数*/ void zd(void) interrupt 1 { TH0=-(4800/256); TL0=-(4800%256); deda++; } /*时、分、秒单元及走时单元转换*/ void conv() { if(deda>=200){sec++;deda=0;} if(sec==60){min++;sec=0;} if(min==60){hour++;min=0;} if(hour==24){hour=0;} } void dirve() { digit[0]=sec%10; //计数个位 write7279(DECODE0,digit[0]); //显示个位 digit[1]=0x80|(sec/10); //计数十位 write7279(DECODE0+1,digit[1]); //显示十位 digit[2]=0x80|(min%10); //计数百位 write7279(DECODE0+2,digit[2]); //显示百位 digit[3]=0x80|(min/10); //计数千位 write7279(DECODE0+3,digit[3]); //显示千位 digit[4]=0x80|(hour%10); //计数万位 write7279(DECODE0+4,digit[4]); //显示万位 digit[5]=hour/10; //计数十万位 write7279(DECODE0+5,digit[5]); } void write7279(unsigned char cmd, unsigned char dta) { send_byte (cmd); send_byte (dta); } unsigned char read7279(unsigned char command) { send_byte(command); return(receive_byte()); } void send_byte( unsigned char out_byte) { unsigned char i; cs=0; long_delay(); for (i=0;i<8;i++) { if (out_byte&0x80) { dat=1; } else { dat=0; } clk=1; short_delay(); clk=0; short_delay(); out_byte=out_byte*2; } dat=0; } unsigned char receive_byte(void) { unsigned char i, in_byte; dat=1; // 设置为输入状态 long_delay(); for (i=0;i<8;i++) { clk=1; short_delay(); in_byte=in_byte*2; if (dat) { in_byte=in_byte|0x01; } clk=0; short_delay(); } dat=0; return (in_byte); } void long_delay(void) { unsigned char i; for (i=0;i<0x30;i++); } void short_delay(void) { unsigned char i; for (i=0;i<8;i++); } // ********************* 延时 n*10ms ********************** void delay10ms(unsigned char time) { unsigned char i; unsigned int j; for (i=0;i<time;i++) { for(j=0;j<0x390;j++) { } } } /*时间调整程序*/ void time_adj() { if(set==0) //有键按下,判断按键时间 { delay10ms(200); //1s延时程序 if(set==0) //大于1s,进入时间设置 { ET0=0; TR0=0; //关定时器0 while(set==0) dirve(); //等键释放 // ET1=1;TR1=1; con=0xF3; //开定时器1,让调整位闪烁 write7279(BLINKCTL,0xF3); do { while(set!=0) dirve(); //等待按键 delay10ms(100); if(set!=0) //小于0.5s,进入分钟设置 { while(set==0) dirve(); //等待按键释放 sign=1; min++; if(min==60)min=0; //分钟加1 dirve(); } else sign=0; //大于0.5s,进入小时设置 }while(sign); while(set==0)dirve(); //等待按键释放 // con=0xCF; write7279(BLINKCTL,0xCF); do { while(set!=0) dirve(); //等待按键 delay10ms(100); if(set!=0) //小于0.5s,进入小时设置 { while(set==0) dirve(); //等待按键释放 sign=1; hour++; //小时加1 if(hour==24)hour=0; dirve(); } else sign=0; //大于0.5s,结束时间设置 }while(sign); // ET1=0;TR1=0; //关定时器1 ET0=1;TR0=1; //开定时器0 write7279(BLINKCTL,0xFF); } else //小于1s,进入省电模式 { ET0=1; TR0=1; //开定时器0 while(set!=0); //等待按键 do { dirve(); //有键按下,调显示程序消抖 }while(set!=0); //是干扰则继续循环 } while(set==0) dirve(); //等待按键释放 } else ; //无键按下,跳出按键扫描程序 }

MCS-51单片机5:基于时钟的24小时计时器

本次主要介绍一下关于单片机的综合实验:基于时钟的24小时计时器。

qq_45171542的博客 3028

”COMSOL“竟然如此简单!我悟了!!

COMSOL Multiphysics具有强大的多物理场全耦合仿真分析功能、高效的计算性能,可以保证数值仿真的高度精确,已被广泛应用于各个学科领域,近年来运用COMSOL来解决电化学实际工程问题也越来越普遍。

C1012562281的博客 3447

51单片机实现普通时钟

一、实验内容: 1、 打开单片机,数码管显示当前时间0-0-0,时-分-秒(时间为24小时制) 2、 按键1:按下一次进入秒的修改,按下两次修改分钟,按下三次修改小时 按键2:时间增加按键,一次增加1 按键3:时间减少按键,一次减少1 按键4:确定键,确定修改/定时功能 按键5:进入定时功能,通过按键2和按键3设定时间,定时时间到,蜂鸣器发出报警声 3、 以上按键的各个功能均实现串口控制,即通过串口发送指令控制。 二、所需硬件:   数码管、独立按键、矩阵按键、蜂鸣器 三

weixin_43689161的博客 1万+

手把手带你搭建一个语音对话机器人:5分钟定制个人AI小助手

通过本文的简单步骤,你已经掌握了如何用 Python 搭建一个语音对话机器人。我们使用了实现语音识别,利用 OpenAI API 生成对话内容,并通过gTTS将文本转换为语音。整个流程非常简洁,你可以根据自己的需求进一步扩展机器人功能,甚至将其集成到实际的应用场景中。

小蜗牛的珍贵百宝箱 4805

MOSFET高频响应实战:如何用LTspice仿真内部电容效应(附模型文件)

本文深入解析MOSFET高频响应中的内部电容效应,通过LTspice仿真工具详细展示如何提取模型参数并优化高频特性。从栅极相关电容到结电容的物理本质,再到实战案例中的开关损耗分析和频率响应扫描,提供全面的设计优化方法,帮助工程师有效应对高速开关电路中的电容挑战。

weixin_33725722的博客 390

51单片机简易时钟闹钟八位数码管显示仿真( proteus仿真+程序+原理图+报告+讲解视频)

51单片机简易时钟闹钟八位数码管显示仿真( proteus仿真+程序+原理图+报告+讲解视频)设计编号:S0046。

weixin_52733843的博客 1万+

思科模拟器汉化教程(附带中文汉化包)

思科模拟器是一种模拟Cisco网络设备的软件工具。它可以模拟Cisco网络设备的所有功能,包括路由器、交换机、防火墙等,并提供了一个可视化的用户界面,让用户可以通过图形化的方式来管理网络设备。思科模拟器因其便捷、易用的特点被广泛应用于网络工程师的实验、测试和培训等方面思科模拟器的功能是强大的,但当我们在使用思科模拟器的时候就会有一些烦恼,由于思科是全球最大的企业级网络设备供应商之一。思科公司的产品和服务被广泛应用于各种领域和行业,所以思科模拟器默认是全英文的,但是在最新版本中是支持中文的。

2302_76908369的博客 4万+

单片机数字时钟/闹钟

详细代码讨论加我QQ:1271370903 1.设计概述: 由单片机 AT89C51芯片和动态数码显示管为核心,辅以必要的电路,构成一个数字时钟。 时钟显示方式为:时-分-秒。时钟计时周期为24小时,显满刻度为“23时59分59秒”。 具有调整功能。设置有三个按键,分别对时、分、秒进行调整校对。 外加可当闹钟使用,闹钟数可设三个,提示音由蜂鸣器电路发出。 **2.设计思想:**数字时钟主要由 AT89C51、显示模块、控制模块和计时运算模块四大部分组成。其中,控制模块和计时运算模块主要对时、分、秒的数值

qq_55433305的博客 1万+

若依(RuoYi)框架从零到部署:Spring Boot+Vue权限系统完整配置指南

在Java企业级应用开发中,Spring Boot作为构建微服务和单体应用的基石,极大地简化了项目初始化和配置流程。其核心原理在于通过自动配置和起步依赖,快速整合数据访问、安全认证、缓存等常用模块,显著提升开发效率。这一技术价值在需要快速构建后台管理系统的场景中尤为突出,例如权限管理、用户角色分配等通用需求。若依(RuoYi)框架正是基于Spring Boot和Vue.js的优秀实践,它封装了RBAC权限模型、代码生成器等高频功能,提供了开箱即用的解决方案。本文聚焦于若依框架的【环境配置】与【项目部署】,通

weixin_33984032的博客 455

轻量级NAS的隐秘战场:比特米盒CumeBox2与CasaOS的生态融合实践

本文探讨了比特米盒CumeBox2轻量级NAS设备与CasaOS操作系统的生态融合实践。通过硬件选型、系统部署、性能优化和应用场景分析,展示了如何将CumeBox2与CasaOS深度整合,打造经济实用的家庭数据管理中心,特别适合入门级用户和小型办公环境。

rl6adventurer的博客 895

51单片机(四)定时器中断(+数码管——24小时制钟表)

1、中断允许寄存器IE 2、中断优先级寄存器IP 3、定时器/计数器工作方式寄存器TMOD 4、定时器/计数器控制寄存器TCON 5、数码管和流水灯在中断中的应用 6、24小时制钟表

Curnane0_0的博客 1万+

基于Arduino 的 FM 调频收音机

这是一个基于 Arduino 的开源的收音机项目,它具备一台标准收音机的全部功能,从控制部分到外壳都可以自己 DIY。在项目中,我们将介绍让 FM 收音机调谐器的 RDA5807 模块与 I2C 协议进行通信的方法,整个过程只需要两根线就可以与 IC 通信,接线非常简单。3D 打印的外壳也非常简洁。总之,是个非常简单和实用的项目,来试试吧!

ByteBox的博客 1642

24小时切换简易时钟-51单片机

时钟 24小时切换简易时钟 1、本设计主要介绍用单片机内部的定时/计数器来实现电子时钟的方法,本设计由单片机STC89C51单片机和LED数码管为核心,辅以必要的电路,构成了一个单片机电子时钟。 2、本设计拟实现的性能指标如下: (1)键盘用于校正、调节数码管上显示的时间。 (2)单片机通过输出各种电脉冲信号开驱动控制各部分正常工作。 (3)单片机发送的信号经过显示电路通过译码最终在数码管上显示出来。 (4)按键还可以切换12小时制和24小时制,并有指示灯。 STC89C51单片机 STC89C51是一种低

一个小白白的博客 7764

基于YOLOv11的人脸识别系统:从构建到应用的全流程指南

深度学习是机器学习的一个分支,旨在通过多层神经网络模拟人脑的认知能力。它能够从大量数据中自动提取特征,并进行准确的预测和分类。在计算机视觉领域,深度学习技术已经取得了显著的成果,尤其是在图像识别、目标检测等方面。YOLOv11是YOLO系列模型的最新版本,结合了卷积神经网络(CNN)和其他创新技术。它在保持高精度的同时,显著提高了推理速度。YOLOv11的结构轻量且高效,非常适合实时目标检测任务。人脸检测的目标是从图像或视频中定位所有人脸的位置。

FJN110的博客 184

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

基于51单片机电子钟万年历设计—LCD1602显示

具体功能: 1.DS1302记录时间; 2.LCD1602实时显示日期、星期、时分秒; 3.按键设置日期、时间、闹钟; 4.使用蜂鸣器作闹钟;

2401_82402501的博客 3391

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

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

具体功能: 1.自动计时,显示24小时制时间,由6位LED显示器显示时、分、秒。 2.自动计时,显示24小时制时间,由6位LED显示器显示时、分、秒。 3.具备校准功能,可以直接由按键设置当前时间。 4.具有调整闹钟功能、整点报时功能。

2301_80486681的博客 3462

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

基于51单片机的高精度时钟设计

了解定时器/计数器的工作原理;掌握定时器/计数器的结构与使用;掌握定时器/计数器各种工作方式的设置与使用;掌握定时器/计数器初值的计算方法;掌握中断的处理过程;掌握中断系统的结构、寄存器和初始化;掌握中断函数的编程;掌握数字电子钟的软、硬件设计方法。

a2667的博客 2056

T72基于51单片机简易电子时钟带闹钟支持12和24制切换的proteus设计,keil程序,c语言,送原理图

单片机proteus仿真电子时钟

c006007的博客 1736

【C51】基于C51单片机的LCD电子时钟设计(含代码,电路图,拿去直接用)

学校的一个课设 可以去"我的下载"直接打包下载 1 LCD电子时钟设计 1、 制作一个基于LCD显示的电子钟,在LCD显示器上显示当前时间。 2、 使用字符型LCD显示器显示时间。 3、 显示格式:“时时:分分:秒秒”。 4、 用4个功能键操作来设置当前时间。功能键K1~K4功能如下: (1) K1:进入设置现在时间; (2) K2:修改小时,并显示修改结果; (3) K3:修改分钟,并显示修改结果; (4) K4:确认完成设置。 代码 #include<reg52.h> #include&l

helloworld573的博客 3万+

C51单片机实验——24小时时钟显示(proteus+asm)

微机原理的C51单片机实验——24小时时钟显示,Proteus绘制电路图,keil5编写asm代码

qq_52516071的博客 5939

【51单片机】在LCD1602上显示时间:包含按键进行校准时间+闹钟功能:按键设置闹钟响铃时间,以及响铃的时间长度

在LCD1602上显示时间:包含按键进行校准时间+闹钟功能:按键设置闹钟响铃时间,以及响铃的时间长度 在51开发板上面实现,晶振为:11.0592Mhz电路如下:显示时间界面:更改时间页面:设置触发闹钟时间页面:设置闹钟响铃时长页面:(O泡时间长度 为3秒) k1按键k2按键加 k3按键k4按键实现代码:...

yvge669的博客 8342

51单片机实现数字钟

1、单片机外接 DS1302 实现时间数据的实时读取与显示; 2、连接电路并编写程序: (1)能够实现准确计时,以数字形式显示时、分、秒的时间; (2)小时以 24 小时计时形式,分秒计时为 60 进制,能够调节时钟时间。

多挖光阴 3975

单片机c语言24小时的计时程序框图,电子时钟单片机课程设计(WIT)要点解析.doc

电气信息学院单片机原理及应用课程设计报告课题名称 电子时钟的设计专业班级 电气自动化学 号学生姓名指导教师评 分2014年12月22日至12月28日答辩记录1、例举设计过程中遇到的问题及其解决方法(至少两例)。答:(1)问题说明:解决方法:。(2)问题说明:解决方法:2、教师现场提的问题记录在此(不少于2个问题)。摘 要数字时钟在日常生活中很常见,应用也很广泛...

weixin_30916461的博客 1822

【51单片机】定时器的简单应用——计时器

一、定时器stc89c52 具有三个定时器 (T0 T1 T2)(1)T0、T1均有四种模式 最常用模式1 (2)定时器模式1工作框图SYSclk(系统时钟) 这里指开发板上的晶振评率定时器和计数器部分不再赘述,可以靠工具生成。(3)中断程序 详细参考开发手册二、计时器程序展示【主函数】 【定时器初始化函数】 【LCD1602驱动函数】 详见前一篇文章(三)最终成品...

qq_33534211的博客 1万+

【51单片机】单片机定时器与串口通信应用实例

蜂鸣器是一种一体化结构的电子讯响器,采用直流电压供电,广泛应用于计 算机、 打印机、 复印机、 报警器、 电子玩具、 汽车电子设备、 电话机、 定 时器等电子产品中作发声器件。蜂鸣器主要分为压电式蜂鸣器和电磁式蜂鸣器两种类型。2.压电式蜂鸣器 (无源蜂鸣器压电式蜂鸣器主要由多谐振荡器、压电蜂鸣片、阻抗匹配器及共鸣箱、外壳 等组成。多谐振荡器由晶体管或集成电路构成,当接通电源后(1.5~15V 直流工 作电压),多谐振荡器起振,输出 1.5~5kHZ 的音频信号,阻抗匹配器推动压电 蜂鸣片发声。

Pijiojio的博客 2059
上一篇: 在清翔51单片机8*8 LED实现输出爱心
下一篇: 在51单片机上实现串口通信代码
knbroken
博客等级 码龄8年 104粉丝 9原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值