51单片机数字时钟

这篇具有很好参考价值的文章主要介绍了51单片机数字时钟。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

我们学单片机,一般都会写数字时钟编程。它能帮助我们:

a. 能够系统性地总结掌握的知识,将单元模块知识有机的结合在一起。

b. 能够充分协调好硬件与软件之间的相互结合,合理设计硬件电路。

c. 掌握单片机 C 语言判断语句、分支语句以及子程序调用等编程知识。
我们学单片机都要做实物与仿真。接下来我先简单讲一下数字时钟在仿真中的作用。
51单片机数字时钟

 仿真中我写了简单的选位调时、分、秒,根据我选的时、分、秒。进行加减。

也可以在实物打板中,实现数字时钟。

51单片机数字时钟

这是小编做的简易51单片机板,而且这种10x10以下规格的打板是不用花费钱的。感兴趣的读者可以打板玩玩。想知道怎么打板的读者留言告诉小编,小编出一个打板教程。

接下来小编的代码有需要的读者自取。 文章来源地址https://www.toymoban.com/news/detail-510416.html

#include<reg52.h>
sbit key1 = P3^0;//换位
sbit key2 = P3^1;//加
sbit key3 = P3^2;//减

sbit LED  = P1^7;
unsigned char kz1,kz2,kz3,kz4,kz5,w,k,nz,h;
unsigned char ss = 2, sg = 3, fs = 5, fg = 9, ms = 5, mg = 5;

//char SMG[18] = {0xFC,0x60,0xDA,0xF2,0x66,0xB6,0xBE,0xE0,0xFE,0xF6,0xEE,0x3E,0x9C,0x7A,0x9E,0x8E,0x00,0X02} ;//实物
char SMG[12] = {
0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40,0x00} ;//仿真
char are[] = {0Xfe,0Xfd,0Xfb,0Xf7,0Xef,0Xdf,0Xbf,0X7f};

void zhongduan();
void keykongzhi();
void naoshizhong();
void LedDriver();
 void delay(unsigned int i)
 {
  while(i--);
 }

 void main()
 {
  zhongduan(); 
  while(1)
  {
    naoshizhong();
	 keykongzhi();
	 LedDriver();
  }

 }

void naoshizhong()
  {

      P0 = SMG[ss];P2 = are[0]; delay(500); P2 = 0Xff;
      P0 = SMG[sg];P2 = are[1]; delay(500); P2 = 0Xff; 
      P0 = SMG[10];P2 = are[2]; delay(500); P2 = 0Xff;
      P0 = SMG[fs];P2 = are[3]; delay(500); P2 = 0Xff;
      P0 = SMG[fg];P2 = are[4]; delay(500); P2 = 0Xff;
      P0 = SMG[10];P2 = are[5]; delay(500); P2 = 0Xff;
      P0 = SMG[ms];P2 = are[6]; delay(500); P2 = 0Xff;
      P0 = SMG[mg];P2 = are[7]; delay(500); P2 = 0Xff;
  
  }

 void keykongzhi()
 {
   
      if(key1 == 0 && kz1 == 0)
	  {
	     kz1 = 1;
	  }
	  else if(key1 == 1 && kz1 == 1)
	  {
	  	 kz1 = 0;
		 w++;
		 w &= 0x03;
	  } 
	  
    
	     if(key2 == 0 && kz2 == 0)
	    {
	       kz2 = 1;
	    }
	    else if(key2 == 1 && kz2 == 1)
	    {
			kz2 = 0;
		   
		   	  switch(w)
			  {	 
			     case 1: mg = 0; ms = 0; break;
			  	 case 2: fg ++; break;
				 case 3: sg ++; break;		  
			  }
		 
	    }
		if(key3 == 0 && kz3 == 0)
	    {
	       kz3 = 1;
	    }
	    else if(key3 == 1 && kz3 == 1)
	    {
			kz3 = 0;
		  
		   	  switch(w)
			  {	 
			     case 1: mg = 0; ms = 0; break;
			  	 case 2: fg --; break;
				 case 3: sg --; break;		  
			  }
	
	    }
	   if(w == 1 && nz == 0)   //时钟调秒
	  {
	    P0 = SMG[ms]+128;P2 = are[6]; delay(800); P2 = 0Xff;
        P0 = SMG[mg]+128;P2 = are[7]; delay(800); P2 = 0Xff;
	  }
	  if(w == 2 && nz == 0)	   //时钟调分
	  {
	    P0 = SMG[fs]+128;P2 = are[3]; delay(800); P2 = 0Xff;
        P0 = SMG[fg]+128;P2 = are[4]; delay(800); P2 = 0Xff;
	  }
	  if(w == 3 && nz == 0)	   //时钟调时
	  {
	      P0 = SMG[ss]+128;P2 = are[0]; delay(800); P2 = 0Xff;
          P0 = SMG[sg]+128;P2 = are[1]; delay(800); P2 = 0Xff;
	  }
 }
 void zhongduan()
 {
  TMOD=0X01;
	TH0=0X3C;//50ms
	TL0=0XB0;
	ET0=1;
	TR0=1;
	EA=1;
 }

 void LedDriver()
 {
 if (k >= 40)
    {
		k = 0;
		mg ++;
    }
  
 if (mg >= 10)
    {
	mg = 0;
	ms ++;
    }
  if (ms >= 6)
    {
	 ms = 0;
	 fg ++;
    }
   if (fg >= 10)
     {	
       fg = 0;
	   fs ++;
     }

    if (fs >= 6)
     {
        fs = 0;
     	sg ++;
     }				
    if (sg >= 10)
    {
       sg = 0;
	   ss ++ ;
    }										
    if (ss ==2 && sg == 4)
    { 
	   ss = 0;
       sg = 0;
    }	 
 }
 void time0() interrupt 1 using 0
 {
  TH0=0X3C;
  TL0=0XB0;
  k ++;	
 }

到了这里,关于51单片机数字时钟的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 51单片机实时时钟显示

    51单片机+DS1302+DS18B20+LCD12864 用的IIC通信,写的一个ds3231时钟模块的程序,可更改时间,下面是.h文件里面的部分代码 #ifndef __ds3231_h #define _ ds3231_h #include reg51.h #define uchar unsigned char #define uint unsigned int extern uchar day2,Htemp2,Mtemp2,Stemp2; //星期,时分秒 extern ucharYtemp2,Mtemp2,Dtemp2,Ttem

    2024年02月09日
    浏览(36)
  • 『51单片机』 DS1302时钟

    🚩 WRITE IN FRONT 🚩     🔎 介绍:\\\"謓泽\\\"正在路上朝着\\\"攻城狮\\\"方向\\\"前进四\\\" 🔎 🏅 荣誉:2021|2022年度博客之星物联网与嵌入式开发TOP5|TOP4、2021|2222年获评百大博主、华为云享专家、阿里云专家博主、掘金优秀创作者、全网粉丝量7w+、全网访问量100w+🏅 🆔 本文章内容由 謓泽

    2024年02月08日
    浏览(49)
  • 51单片机——DS1302时钟

    目录 1.前言 1.1 实验现象 2. DS1302的介绍 2.1 DS1302的引脚定义以及应用电路 2.2 DS1302内部结构 2.21  DS1302内部特殊寄存器 2.22 时序 2.3 BCD码 3.源码 3.1 main.c 3.2 DS1302.c 3.3 DS1302.h 3.4 LCD1602.c 3.5 Delay.c 3.6 Delay.h 之前我们已经使用了定时器做过了简易的时钟了,为什么还要用DS1302制作时钟

    2024年01月16日
    浏览(44)
  • 单片机原理与应用课程设计-基于51单片机的时钟日历

    摘 要 本课程设计是基于51单片机的日历时钟设计。作为嵌入式系统中常用的控制器,单片机在各种电子设备和系统中广泛应用。日历时钟作为一个常见的功能模块,在现代生活中具有重要意义。因此,设计一个基于51单片机的日历时钟,不仅有助于我们掌握单片机编程技术和

    2024年02月20日
    浏览(65)
  • 基于51单片机的可调时钟(开源)

            应用DS1302实现在LCD1602上显示时间,包括年月日,时分秒以及星期几的英文缩写,并具有时间可调的功能,调节当前位时闪烁。利用独立按键1实现模式切换,按键2设置时间位选择,按键3当前时间位+1,按键4当前时间位-1,调节时间具有边界判断和自动校正功能,同时

    2024年02月06日
    浏览(46)
  • 51单片机(数码管可调时钟)

    1.数码管(共阴极)如何显示数字:位选+段选(单个) 位选:138译码器通过P22、P23、P24三个端口输入二进制数(011、000等)来选择连同译码器右边的哪一条线,而这些线又分别连着数码管的LED12345678、决定选择哪一个来显示数字 段选:决定输出什么数字,数码管下方又连着一

    2024年02月05日
    浏览(46)
  • 51单片机——DS1302可调时钟

    目录 一、功能介绍 二、主要模块介绍 2.1 DS1302模块 2.1.1 DS1302芯片介绍 2.1.2  DS1302的使用 三、程序汇总 3.1测试文件test.c 3.2 LCD1602模块程序 3.2.1 LCD1602.h 3.2.2 LCD1602.c 3.3 DS1302模块程序 3.3.1 DS1302.h 3.3.2 DS1302.c 3.4 独立按键模块程序 3.4.1 Independentkey.h 3.4.2 Independentkey.c 3.5 T0定时器模

    2024年02月02日
    浏览(67)
  • 24小时切换简易时钟-51单片机

    1、本设计主要介绍用单片机内部的定时/计数器来实现电子时钟的方法,本设计由单片机STC89C51单片机和LED数码管为核心,辅以必要的电路,构成了一个单片机电子时钟。 2、本设计拟实现的性能指标如下: (1)键盘用于校正、调节数码管上显示的时间。 (2)单片机通过输出

    2024年02月11日
    浏览(45)
  • 51单片机电子时钟(C语言)

     全部硬件电路分为四大部分: 控制模块51单片机; 显示模块LCD1602,由P0口控制; 计时模块DS1302,由P1口控制; 输入按键,由P3口控制。         实际设计硬件电路时应考虑到51单片机的电源、复位电路以及外接晶振,时钟芯片DS1302的备用电源等。 从1302的寄存器中读取数据

    2024年02月07日
    浏览(41)
  • 51单片机(十)DS1302实时时钟

    ❤️ 专栏简介:本专栏记录了从零学习单片机的过程,其中包括51单片机和STM32单片机两部分;建议先学习51单片机,其是STM32等高级单片机的基础;这样再学习STM32时才能融会贯通。 ☀️ 专栏适用人群 :适用于想要从零基础开始学习入门单片机,且有一定C语言基础的的童鞋

    2024年02月03日
    浏览(46)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包