51单片机电子钟制作-升级版

发布者:见贤思奇异果最新更新时间:2015-07-24 来源: 51hei关键字:51单片机  电子钟  升级版 手机看文章 扫描二维码
随时随地手机看文章
         经过两天熬夜的艰苦奋战,在原程序基础上进行升级,添加按键多功能操作

          新增功能:1.  K1模式转换,可自由切换:主界面显示,时间调整,闹钟设置,温度上下限设定等。等                           2.  K2选定需要调整的位数。

             切换至时间调整时,通过K3-"加",K4-"减"按键调整数值。

             切换至闹钟设置时,通过K3-"加",K4-"减"按键调整数值。

             切换至温度上下限设定时,通过K3-"加",K4-"减"按键调整数值。

准备扩展的新功能:闹钟音乐,喇叭开启和关闭,。

 操作说明:

         开机进入主界面,显示时钟和温度。按下K1时,进入模式选择,(有时间调整,闹钟设置,温度上下限设定等),当K1按下四次后,长响一声,回到主界面。

          当K1(模式选择键)按下第一次,选择在时间调整时,按下K2,选定需要调整的位数,选定的位数会一秒钟不停的闪烁。然后按下K3 “加”或者K4 “减”按键,进行数值的加减,当K2按到五次时,返回时间调整界面。

          再按下K1(模式选择键)按下第二次,进入到下一个模式,闹钟设置。按下K2,选定需要调整的位数,选定的位数会一秒钟不停的闪烁。然后按下K3 “加”或者K4 “减”按键,进行数值的加减,当K2按到五次时,返回闹钟设置界面。

          再按下K1(模式选择键)按下第三次,进入到下一个模式,温度上下限设定。按下K2,选定需要调整的位数,选定的位数会一秒钟不停的闪烁。然后按下K3 “加”或者K4 “减”按键,进行数值的加减,当K2按到五次时,返回温度上下限设定界面。

          当K1(模式选择键)按下第四次,返回到时钟和温度主界面显示。



 

 

下面是我录制的一段视频文件:
 


采用的是stc89c51单片机,代码为自己原创,没有进行整理和优化,有点乱,还有些没有加注释说明
完整的源代码下载地址:http://www.51hei.com/f/dianzz5.rar

#include"reg51.h"
#define uchar unsigned char 
#define uint unsigned int
 


/****温度 端口定义******/
  sbit wx5=P2^4;
  sbit wx6=P2^5;
  sbit wx7=P2^6;
  sbit wx8=P2^7;
  sbit DQ=P3^6;

  uint temp, temp1,temp2, xs,H1,H2,L1,L2;             

  uchar code table[]={0xc0,0xf9,0xa4,0xb0,0x99,
       0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0X9c,0xc6,0x91,0xfc,0XE3};   


/******延时程序*******/ 
 void delay1(uint m)
    {
      uint i,j;
    for(i=m;i>0;i--)
   for(j=110;j>0;j--);
    }


 void delay(unsigned int m)
    {
      while(m--);
     }

 void Init_DS18B20()  
   {
     unsigned char x=0;
     DQ = 1;          //DQ复位 ds18b20通信端口 
     delay(8); //稍做延时
     DQ = 0;          //单片机将DQ拉低
     delay(80); //精确延时 大于 480us
     DQ = 1;          //拉高总线   
     delay(4);
     x=DQ;            //稍做延时后 如果x=0则初始化成功 x=1则初始化失败
     delay(20);
    }

 [page]


/***********ds18b20读一个字节**************/
  uchar ReadOneChar()
   {
     unsigned char i=0;
     unsigned char dat = 0;
     for (i=8;i>0;i--)
     {
      DQ = 0; // 高电平拉成低电平时读周期开始
      dat>>=1;
      DQ = 1; // 给脉冲信号
      if(DQ)
      dat|=0x80;   // 
      delay(4);
      }
     return(dat);
   }

 

/*************ds18b20写一个字节****************/
  void WriteOneChar(unsigned char dat)
  {
   unsigned char i=0;
   for (i=8; i>0; i--)
    {
      DQ = 0;          //从高电平拉至低电平时,写周期的开始
      DQ = dat&0x01;   //数据的最低位先写入
      delay(5);        //60us到120us延时
      DQ = 1;        
      dat>>=1;         //从最低位到最高位传入
    }
  }


/**************读取ds18b20当前温度************/
void ReadTemperature()
  {
    unsigned char a=0;
    unsigned  b=0;
    unsigned  t=0;

    Init_DS18B20();
    WriteOneChar(0xCC);   // 跳过读序号列号的操作
    WriteOneChar(0x44);   // 启动温度转换 
    delay(1);            // this message is wery important
    Init_DS18B20();
    WriteOneChar(0xCC);   //跳过读序号列号的操作
    WriteOneChar(0xBE);   //读取温度寄存器等(共可读9个寄存器) 前两个就是温度
    delay(1);
    a=ReadOneChar();      //读取温度值低位  
    b=ReadOneChar();      //读取温度值高位    
    temp1=b<<4;           //高8位中后三位数的值 
    temp1+=(a&0xf0)>>4;   //低8位中的高4位值加上高8位中后三位数的值   temp1室温整数值
    temp2=a&0x0f;         //小数的值
    temp=((b*256+a)>>4);  //当前采集温度值除16得 实际温度值    zhenshu    
    xs=temp2*0.0625*10;   //小数位,若为0.5则算为5来显示  xs小数    xiaoshu
   }

 

 

 

////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////
/****时钟 端口定义******/
  sbit wx1=P2^0;
  sbit wx2=P2^1;
  sbit wx3=P2^2;
  sbit wx4=P2^3;


  uchar  qian,bai,shi,ge,miao1,miao2,count1,count2;
  uchar  n1,n2,z1,z2;//设置闹钟变量
  uchar code table1[]={0xc0,0xcf,0xa4,0x86,0x8b,
       0x92,0x90,0xc7,0x80,0x82};


  

  ////////////////////////////////////////////
  /***************按键调时程序***************/ 

   sbit K1=P3^0;
   sbit K2=P3^1;
   sbit K3=P3^2;
   sbit K4=P3^3;


   sbit BEEP=P3^7;    //// 定义蜂鸣器口

   uchar K1num,K2num,K3num,K4num,K5num,K6num,K7num;


   

  //////////////////////////////////////////
    /**********报警声音**************/

   bi(uint t)
   {
      int c,n;
      for(c=0;c
 
关键字:51单片机  电子钟  升级版 引用地址:51单片机电子钟制作-升级版

上一篇:C8051F320AD转换和温度传感器
下一篇:自己做的门禁系统2

推荐阅读最新更新时间:2024-03-16 14:26

51单片机条件转移指令
条件转移指令是指在满足一定条件时进行相对转移。 判A内容是否为0转移指令 JZ rel JNZ rel 第一指令的功能是:如果(A)=0,则转移,否则顺序执行(执行本指令的下一条指令)。转移到什么地方去呢?如果按照传统的方法,就要算偏移量,很麻烦,好在现在我们可以借助于机器汇编了。因此这第指令我们可以这样理解:JZ 标号。即转移到标号处。下面举一例说明: MOV A,R0 JZ L1 MOV R1,#00H AJMP L2 L1: MOV R1,#0FFH L2: SJMP L2 END 在执行上面这段程序前如果R0中的值是0的话,就转移到L1执行,因此最终的执行结果是R1中的值为0FFH。而如果R0中的值
[单片机]
<font color='red'>51单片机</font>条件转移指令
51单片机】STC89C52点亮LED灯,含C代码(2)
1.参考教程:清翔51单片机教程 2.基本原理 : 通过控制通过控制右边输出端高低电频,来控制灯的亮和熄灭。灯左边5V电压,右边若是赋予逻辑0(0V),有电压差,则灯有电流通过,被点亮。 3.具体软件操作步骤在第一篇: 4.程序和结果 在.c文件里写入程序 以点亮1号灯为例, 编译后烧录结果 同理多盏灯同时点亮 结果
[单片机]
【<font color='red'>51单片机</font>】STC89C52点亮LED灯,含C代码(2)
51单片机系列连载6—定时器初始化补充
在上一节中提到定时器很重要,而对于定时器来说,就是简单的一个初始化,只要把这个弄明白了,后面的编程操作也就水到渠成了,今天再简单地对定时器初始化做个补充。 首先,再说一下T/C(定时器/计数器)的基本结构,它们基本部件是2个8位的计数器,其中TH1和TL1是T1的计数器,TH0和TL0是T0的计数器,记住这两个计数器,后面的操作都是围绕这两个展开的,要有这种意识。 在作为定时器使用时,是对单片机内部机器周期的计数,因其内部频率为晶振频率的1/12,如果晶振频率为12MHz,则定时器每接受一个输入脉冲的时间为1us,后面很多定时都用到这个基本常识。 当它用作对外部事件计数时,接相应的外部引脚T0(P3.4)或T1(P
[单片机]
51单片机高精度除法程序及使用
科技人员在开发51单片机应用系统过程中,往往遇到多字节除法及倒数问题。但目前一些资料中所介绍的有关程序,复杂且功能单一、精度低。本人在研制((GZ93多功能程控测试仪》过程中,自行设计的4字节除4字节程序具有功能多、精度高、简短、运行速度快等特点,可用于求4字节倒数,求商的整数(结果为4字节),求商的小数部分(结果为4字节),调用两次即可求8字节商。 一、使用方法 1.求商的整数 (1)16进制被除数送51内部RAM中20(低位)至23(高位)单元,除数送50(低位)至53(高位)单元,扩充单元24至27清零。 ’ (2)调子程序DIV。 (3)20(低位)至23(商位)单元为所求商,24至27单元为余数。
[单片机]
51单片机驱动点阵16*16左移
这个点阵左移,曾经让我......如今在朋友指导下.........主要部分在红色部分,请大家理解那里就行了!会了也没有什么!硬件:行采用74HC154+S8550,列采用74HC595! #include reg52.h #define uchar unsigned char #define uint unsigned int #define LINE P0//定义行线IO口,即74HC154控制端 #define shudu 20//字移动的速度 sbit DATA=P1^4;//74HC595数据端 sbit CLK=P1^5;//74HC595移位脉冲端 sbit CLKR=P1^6;//74HC595数据锁存端 u
[单片机]
<font color='red'>51单片机</font>驱动点阵16*16左移
基于AT89C51单片机的微型可编程控制器
可编程控制器PC(Programmable Controller),为与个人计算机PC(Personal Computer)相区别,可简称为PLC。它是按照成熟而有效的继电控制概念和设计思想,用先进的单片机技术来实现I/O的实时检测和控制,可靠性高,编程简单、易学,因此,得到广泛应用。 将PLC技术引进电工学、电力拖动课程,是课程建设现代化的重要措施。在教学经费相对紧张的情况下,我们自己动手,以AT89C51单片机为核心,设计并研制了LD型微型PLC,应用于继电控制实验,取得了良好的效果。 用单片机构成的PLC,实际上就是一个单片机测控系统。用这样一个程序控制的计算机系统去执行继电控制的梯形图程序,由于继电控制梯形图
[单片机]
基于AT89C<font color='red'>51单片机</font>的微型可编程控制器
基于8051单片机的多功能用电故障控制器实现
1 引言 对于电网短路和线路故障检测保护已有不少研究。市面上的电器短路、过载、超压的保护器功能单一。容易损坏,没用提示功能,不够人性化。但随人们生活水平的不断提高。用电设备也不断增加,产生了肓目用电现象。这给人们造成极大的安全隐患。其中危害性最大的用电故障有三种:输入电压过高、室内线路严重过载、用电器短路。本文设计的单片机AT89C5l用电故障控制系统的目的就是为了防止这三种故障带来的危害。 2 硬件的组成 单片机用电故障控制系统的硬件分别是:由降压变压器、2个相瓦串联的感应线圈、升压变JK器、电磁开关、5V稳压电源、超压过流信号获取比较电路、可编程接门扩展芯片8255、HD44780字符液晶显示
[单片机]
基于80<font color='red'>51单片机</font>的多功能用电故障控制器实现
51单片机交流电检测程序 单相工频电参数测量仪
设计基于MCS-51的单相工频交流电参数检测仪。交流有效值0-220V,电流有效值0-40A。电压、电流值经电压、电流传感器输出有效值为0-5V的交流信号,传感器输出的电压、电流信号与被测电压、电流同相位。 基本要求如下 (1) 电流、电压测量精度0.1% (2) 检测电压、电流的相位角,求出功率因素 (3) 电流、电压有效值由LED轮流显示,也可由按键切换显示量 单片机源程序如下: #include regx51.h #include intrins.h #include absacc.h #include math.h #define uchar unsigned char #define uint unsi
[单片机]
<font color='red'>51单片机</font>交流电检测程序 单相工频电参数测量仪
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
更多每日新闻
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved