12864+DS1302+DS18B20大字符时钟原理图与源程序

2020-01-23来源: 51hei关键字:12864  DS1302  DS18B20  大字符时钟

12864+DS1302 +DS18B20 大字符时钟供大家学习。

电子智能时钟程序

单 片 机:STC89C52RC

晶    振:12MHz

时钟芯片:DS1302

液 晶 屏:LCM-12864-ST7920

时    间:2019年11月26修改完成

LCM12864使用并口连接方式,PSB、RST接高电平    

制作出来的实物图如下:
 

电路原理图如下:
 

单片机源程序如下:

/*---------------------------------------------------------------------------

                电子智能时钟程序

                单 片 机:STC89C52RC

                晶    振:12MHz

                时钟芯片:DS1302

                液 晶 屏:LCM-12864-ST7920

                时    间:2019年11月26修改完成

                LCM12864使用并口连接方式,PSB、RST接高电平    

------------------------------------------------------------------------------*/


/*-------------------------------头文件---------------------------------------*/

#include

#include

#include "LCD12864.h"

#include "DS1302.h"

#include "DS18B20.h"

#include "nongli.h"

#include "displaytime.h"

//#include "jieqi.h"

#define uint  unsigned int

#define uchar unsigned char


/*----------------------------定义按键---------------------------------------*/

sbit K1  = P2^3; //K1-设置  

sbit K2  = P2^2; //K2-确认、返回   

sbit K3  = P2^1; //K3-加         

sbit K4  = P2^0; //K4-减         

//sbit K5  = P3^7; //液晶背光控制按键,按一下亮,再按一下灭                 

//sbit BLK = P3^7; //液晶背光控制输出,低电平有效,PNP三极管控制。


/*---------------------函数声明------------------------------*/

void DelayM(uint);               

void ds_w(void);

void Conver_week(bit c,uchar year,uchar month,uchar day);

/*-----------------------------定义全局变量------------------------------*/

bit q=0, w=0;    //调时标志位

unsigned char yy,mo,dd,xq,hh,mm,ss,month_moon,day_moon,week,tiangan,dizhi,moontemp1,moontemp2;//定义时间映射全局变量(专用寄存器)

signed char address,item,max,mini;


/*-----------------------------延时函数 1MS/次-------------------------------*/

void DelayM(uint a)               

{

        uchar i;

        while( --a != 0) { for(i = 0; i < 125; i++); }                                      

}

/*-----------------------------日期、时间设置函数-----------------------------*/


void tiaozheng(void){

        yy = read_clock(0x8d);//调用1302时钟数据中的年数据,从地址0x8d中    

        mo = read_clock(0x89);//调用1302时钟数据中的月数据,从地址0x89中    

        dd = read_clock(0x87);//从1302芯片中读取日数据,从地址0x87中    

        week = read_clock(0x8b);//从1302芯片中读取星期数据,从地址0x8b中    

        lcm_w_test(0,0x80);


        lcm_w_word("20");//显示内容字符20

        write_data(yy/16+0x30);//函数参数1,代表本行写数据,YY/16+0X30得出年十位数字的显示码地址,送显示        

        write_data(yy%16+0x30);//函数?

        lcm_w_word("年");


        write_data(mo/16+0x30);

        write_data(mo%16+0x30);//与16取余数,得到月份的个位数,加0x30得到该数字的液晶内定显示码送显示

        lcm_w_word("月");     //调用字符显示函数,显示文字 月   


        write_data(dd/16+0x30);

        write_data(dd%16+0x30);//第一个1参数,表示本行写数据,日数据与16取余得个位数,加0x30得到显示码

        lcm_w_word("日");//显示字符 日 


        if(read_clock(0x85) != hh){  //如果程序中的小时与1302芯片中的不同,

                hh = read_clock(0x85);  //刷新程序中的小时数据   

        }

        lcm_w_test(0,0x91);//第一个参数0,表示本行写入LCM的是指令,指定显示位置91H(第三行左端)

        write_data(hh/16+0x30);  //显示十位

         

        write_data(hh%16+0x30);  //显示个位

        lcm_w_word("时");


        if(read_clock(0x83) != mm){//如果1302芯片中的分钟数据与程序中的分钟变量不相等                

                mm = read_clock(0x83);//刷新程序中的分钟数据

        }

        write_data(mm/16+0x30);//向液晶写数据,显示分钟的十位数

        write_data(mm%16+0x30);//向液晶写数据,显示分钟的个位数

        lcm_w_word("分");


        if(read_clock(0x81) != ss){//如果1302芯片中的分钟数据与程序中的秒钟变量不相等                

                ss = read_clock(0x81);//刷新程序中的秒钟数据

        }

        write_data(ss/16+0x30);//向液晶写数据,显示分钟的十位数

        write_data(ss%16+0x30);//向液晶写数据,显示分钟的个位数

        lcm_w_word("秒");         


}


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

//调整时间子函数,设置键、数据范围、上调加一,下调减一功能。

void Set_time(unsigned char sel){ //根据选择调整的相应项目加1并写入DS1302,函数参数是按动设置键的次数

  

        write_com(0x30); write_com(0x06);


        lcm_w_test(0,0x98);//第一参数0表示本行写入指令,指定下面行的 调整 显示起始位置为98H

        lcm_w_word("★调整");//调用字符显示函数,显示 调整字样

  

/*        if(sel==6)  {lcm_w_word("星期");address=0x8a; max=7;mini=1;          

     tiaozheng();

     ds_w();

     tiaozheng();

          }

*/

//////////////////////////////////////////////////////////////

        if(sel==5)  {lcm_w_word("秒钟");address=0x80; max=59;mini=0;          

                tiaozheng();  //调用日期、时间调整函数

           ds_w();                  //被调数据加一或减一函数

           tiaozheng();

                                            

        }        //秒7,按动7次显示 调整秒钟   

                //并指定秒钟数据写入1302芯片的地址是0x82,秒钟数据的最大值是59,最小值是0

   /////////////////////////////////////////////////////////////////////////

        if(sel==4)  {lcm_w_word("分钟");address=0x82; max=59;mini=0;

           tiaozheng();

           ds_w();

           tiaozheng();

  

        }        //分钟6,按动6次显示 调整分钟

                //并指定分钟数据写入1302芯片的地址是0x82,分钟数据的最大值是59,最小值是0



        if(sel==3)  {lcm_w_word("小时");address=0x84; max=23;mini=0;

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

                 if(address > 12){

                                           address = address-12;        }

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

            tiaozheng();

           ds_w();

           tiaozheng();

  

        }        //小时5,按动5次显示 调整小时

//规定小时数据写入1302芯片的位置是0x84,小时数据最大值23

[1] [2] [3]
关键字:12864  DS1302  DS18B20  大字符时钟 编辑:什么鱼 引用地址:http://news.eeworld.com.cn/mcu/ic486539.html 本网站转载的所有的文章、图片、音频视频文件等资料的版权归版权所有人所有,本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如果本网所选内容的文章作者及编辑认为其作品不宜公开自由传播,或不应无偿使用,请及时通过电子邮件或电话通知我们,以迅速采取适当措施,避免给双方造成不必要的经济损失。

上一篇:STC89C52+LCD12864+DS1302+DS18B20时钟原理图+源程序
下一篇:单片机驱动带编码器直流电机 源程序

关注eeworld公众号 快捷获取更多信息
关注eeworld公众号
快捷获取更多信息
关注eeworld服务号 享受更多官方福利
关注eeworld服务号
享受更多官方福利

推荐阅读

MSP430学习笔记8-ST7920 12864液晶显示并行接口
);  //打开绘图显示    Write_Cmd(0x30);  //回到基本指令集模式}程序中只包含了基本的显示和画图功能,使用起来较为简单,其他的划线反白等功能也可以通过画图来实现,以后再继续研究,对应的主程序例程如下:#include <msp430x14x.h>#include "LCD12864P.h"#include "hohai.h"unsigned char title[]="河海大学";unsigned char flag;int main( void ){    /*下面六行程序关闭
发表于 2020-02-02
单片机+LCD12864数字示波器程序+Proteus仿真
基于51单片机和Proteus仿真的数字示波器 #include <AT89X52.h>#include <intrins.h>//12864控制引脚定义sbit DI = P2 ^ 2; //数据指令选择引脚sbit RW = P2 ^ 1; //读写选择引脚sbit E= P2 ^ 0;   //读写使能引脚sbit CS1 = P2 ^ 4;    //片选1引脚sbit CS2 = P2 ^ 3;    //片选2引脚sbit BUSY= P1 ^ 7;    //忙标志位//按键控制定义sbit Y1
发表于 2020-01-31
单片机+LCD12864数字示波器程序+Proteus仿真
51单片机+LCD12864的万年历Proteus仿真
原理图如下部分程序如下单片机源程序如下:#include <reg51.h>#include "DS18B20.h"#include "DS1302.h"#include "LCD12864.h"char a;sbit KEY1=P3^4;sbit KEY2=P3^5;sbit KEY3=P3^6;bit  flag=1; //进入/退出设置标志uchar  choose=0x01; //切换标志void delay10(void) //延时10ms{        unsigned char i,j
发表于 2020-01-29
51单片机+LCD12864的万年历Proteus仿真
STC15系列电压测试+LCD12864显示
最近使用15做电压测试,顺便使用下12864显示,程序如下:    #include <STC15F2K60S2.H>    #include <intrins.h>    #include <stdio.h>        #define uchar unsigned char    #define uint  unsigned int    #define ulint unsigned long int 
发表于 2020-01-29
STC89C52+LCD12864+DS1302+DS18B20时钟原理图+源程序
STC89C52+LCD12864+DS1302 +DS18B20+PCB 时钟供大家学习。            电子智能时钟程序            单 片 机:STC89C52     晶    振:12MHz         时钟芯片:DS1302          
发表于 2020-01-23
STC89C52+LCD12864+DS1302+DS18B20时钟原理图+源程序
AVR单片机学习SPI串行口与DS1302
简介:同步串行口SPI的基本原理DS1302的接口时序图DS1302的使用M16的SPI的使用SPI基本原理spi 它是一种最常用的同步串行接口:同步的意思就是利用时钟线对串行数据进行同步在时钟的上升沿或下降沿极性锁存数据.所以它的线至少有时钟线和数据线.一、同步串行口利用时钟线对串行数据进行同步上升沿或者下降沿锁存数据二、4线SPI:全双工(它的两根数据线一个是收一个是发收发是可以同时进行的,还有2根 SS SCLK SS是用来帧同步的控制线,时钟是SCLK 上升合下降)SS 、SCLK、MOSI、MISO三、3线SPI:半双工(半双工,收和发 用同一根 DIO )SS、SCLK、DIO四、SPI时序图五、按照时序图编写IO程序
发表于 2020-02-07
AVR单片机学习SPI串行口与DS1302
小广播
何立民专栏 单片机及嵌入式宝典

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

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号 电信业务审批[2006]字第258号函 京公海网安备110108001534 Copyright © 2005-2020 EEWORLD.com.cn, Inc. All rights reserved