精华内容
下载资源
问答
  • 电子设计.doc

    2019-05-28 11:58:28
    0157、多功能电子医药盒设计论文资料 0158、新型消防车的研究毕业设计论文资料 0159、PICICD2仿真器的原理图与PCB资料 0160、多功能工业控制平台毕业设计论文资料 0161、高频电路实训装置毕业设计论文资料 0162、...
  •  既然那么多功能集中在一个较小的PCB板上,那么在手环的布局和布线中我们要进行格外的注意,现在总结一些注意事项,以供参考。  首先,分区布局,注意走线保护。  从上面的PCB电路板中可以...
  • 随着社会的发展,在人们生活中学习外语变得越来越重要。 现在许多文件和资料都是电子...5.5.1 电子时钟 41 5.5.2 按钮贴图 43 5.5.3 网上冲浪 44 5.5.4 历史记录 45 5.5.5 文件导入导出 47 第六章 总结 50 参考文献 51
  • 通过本章的学习,读者可以设计出精美的GUI界面,实现复杂的功能。本章是GUI设计的重点内容,需要熟练掌握。 第7章:数据库编程。本章以SQL Server 2008数据库为例,讲解了MATLAB如何创建数据源、连接数据库,以及...
  • 多功能数字钟的设计

    2020-11-13 21:32:33
    提示:电子综合实训包括很多实验,本实验课题选择多功能电子时钟设计,其中包括模拟电子技术和数字电子技术的知识的运用,本文使用的实验环境是win7(当然win10阔以的哦),仿真软件是Multisim10.0.1,打开界面...

    基于Multisim10.0.1的多功能数字钟的设计

    信息工程学院电子技术综合实训

    注:本实验报告,仅供参考,其中资料文献本文后面有注明来处,侵权删。


    课题前言

    电子综合实训包括很多实验,本实验课题选择多功能电子时钟的设计,其中包括模拟电子技术和数字电子技术的知识的运用,本文使用的实验环境是win7(当然win10可以的),仿真软件是Multisim10.0.1,打开界面如下:
    在这里插入图片描述


    提示:以下是本篇文章正文内容,下面案例供参考

    一、设计目的和要求

    设计一个多功能数字钟,能够准确记时并以数字化形式显示时、分、秒的时间,且该数字钟能够有以下功能:

    序号 功能
    1 校正时间
    2 准点报时
    3 定时闹钟

    二、选题的目的和意义

    数字钟从原理上来讲是一种典型的数字电路,其中包括了组合逻辑电路和时序电路。目前,数字钟的功能越来越多,并且有多种专门的大规模集成电路可供选择,一般由数钟电路、放大执行电路、电源电路等组成。
    设计多功能数字电路,通过简单的电路结构,并更改设定电路,了解通过输入脉冲,达到设计时钟目的,同时运用芯片以及逻辑门来实现进制从而理解数字电路的应用。

    三、方案的可行性论证

    1、方案的设计要求

       1、时间以24小时为周期;
       2、显示时、分、秒;
       3、具有校时功能,可以分别对时、分、秒进行单独校时,使其校正达到标准时间;
       4、具有整点报时功能,即设置时间到达整点前10秒进行蜂鸣器报时;
       5、具有定时闹钟功能。
    

    2、各电路模块初步分析

    时间显示电路

    时间显示模块包括时、分、秒部分,可用显示译码器来显示,从而实现24制以及60制。

    时间校准电路

    时间校准包括时钟校准、分钟校准和秒钟校准三个模块,可在各模块中设置点动开关,需要校准时,对应的显示模块数值随点动开关连续变换,待调到所需要的数值时,停止校准,从而达到对各个模块的单独校时。

    整点报时电路

    将显示译码器电路中加逻辑门与其相连,当整点时,报时可通过蜂鸣器蜂鸣实现,并可设置蜂鸣器的长鸣时间。

    定时闹钟电路

    可通过开关组来设置闹钟时间,芯片与逻辑门

    3、工作原理及图例

    当秒计时器计60后向分计数器进位,分计数器计数60后向小时进位,小时计数器设置成24进制计数器,满24后清零,重新开始计时。计数器的输出直接送到LED显示器,当计时出现误差时可以用校时电路进行校时、校分,校时电路是由一开关接到一个高电位上,当按一下开关就传送一个高位脉冲,计数器加一。

    连续脉冲
    时校
    24进制
    译码器
    显示器
    分校
    24进制
    译码器
    显示器
    秒校
    60进制
    译码器
    显示器

    四、元件、器件明细表

    1、74LS161N:
    可预置四位二进制计数器(并清除异步)
    1.QA~QD:计数输出端,输出二进制代码
    2.A~D:预置数据输入端,输入二进制代码
    3.CLK:相当于CP,接单次脉冲端输入
    4.ENT,ENP:计数控制端
    5.~CLR:直接清零端
    6.~LOAD:预置数控制端
    7.RCO:进位输出端
    在这里插入图片描述
    2、74LS85D:
    四位数字比较器
    通过功能表可知,该比较器的比较原理和两位比较器的比较原理相同。两个4位数的比较是从芯片1的最高位A3和芯片2的最高位B3进行比较,如果它们不相等,则该位的比较结果可以作为两数的比较结果。若最高位A3=B3,则再比较次高位A2和B2,余类推。显然,如果两数相等,那么,比较步骤必须进行到最低位才能得到结果,即可从而达到定时闹钟的效果。
    在这里插入图片描述
    3、74LS04N:
    74LS04是六个单输入端的反相器.它的输出信号与输入信号相位相反。六个反相器共用电源端和接地端,其它都是独立的。输出信号手动负载的能力也有一定程度的放大。
    在这里插入图片描述
    4、7400 输入与非门:
    内含四个独立的2输入端与非门,其逻辑功能是:输入端全部为1时,输出为0;输入端只要有0,输出就为1.
    在这里插入图片描述
    5、74LS08J 2输入四与门:
    与门,详细地说是4二输入与门,即一片74LS08芯片内有共四路二个输入端的与门。
    在这里插入图片描述
    6、74LS20D 4输入双与非门:
    两个4输入与非门,内含两组4与非门。
    在这里插入图片描述
    7、元件、器件明细表:

    序号 名称 数量
    1 显示译码器 6
    2 蜂鸣器 2
    3 74LS161N 6
    4 74LS85D 4
    5 7400N 8
    6 74LS08J 3
    7 74LS20D 2
    8 瞬时开关 3
    9 开关组 4
    10 数字电源VCC 5
    11 时钟脉冲源 1
    12 单刀双置开关 1
    13 电子探针 1

    附:74LS系列通用逻辑电路功能表

    五、各个电路模块分析

    1、闹钟电路

    闹钟电路蛮好做,如图,采用4片74LS85D芯片和4个拨码开关构成闹钟电路,从最低位(分个位)对应的比较器74LS85D(U21)的OAEQB端输出高电平,从而实现闹钟功能。

    在这里插入图片描述

    2、校时电路

    在分、秒的与非门与上一级的脉冲接口之间接瞬间开关即可。当开关按下时,产生一个低电平给计数器,从而在下降沿的时候计数器加一。
    注:瞬时开关是交互组件,在Multisim中可以通过键盘上的一个键或使用鼠标点击激活,
    在这里插入图片描述

    3、时记时电路

    24进制的实现用的是两片74LS161芯片以及与非门实现24进制(00~23)。时计时器的十位是二进制,个位是十进制,同时和与非门相连,实现满24时清零,由于小时位和分为、秒为不同,它是以十进制来显示24进制数,即它有两个清零信号,一是在小时的个位计数到10的瞬间,向本位发送一个清零信号,并同时向十位数发送一个进位脉冲。二是在小时的十位计数到2并且个数计数到4的瞬间,向个位和十位同时发送一个清零信号。
    在这里插入图片描述

    4、分、秒记时电路

    60进制的实现是采用两片74LS161芯片和与非门实现的,分、秒计数器的十位都是60进制,个位都是10进制,共同构成60精致。分、秒计时电路的控制是一样的,采用同一器件74LS161N的反馈置数法来实现10进制功能和6进制功能,根据芯片74LS161N的结构把输出端的0100(十进制为6)用一个与非门7400N引到CLR端便可置0,即当分(秒)的个位计数到10的瞬间,向本位发送一个清零信号,并同时向其个位发送一个进位脉冲。分(秒)的十位加法计数器在计数到6的瞬间,向本位发送一个清零信号,并同时向分(秒)位的个位发送一个进位脉冲。这样就构成了一个级联而形成的60进制带进位与清零的加法计数器。

    在这里插入图片描述

    六、总电路图

    - 不带闹钟总电路图:
    在这里插入图片描述
    - 带闹钟总电路图:
    在这里插入图片描述

    七、测试结果图

    连接好电路图后,准备开始仿真,同时可测试闹钟功能。
    结果如下:
    在这里插入图片描述

    文献

    1、参考作者以及网址

    https://blog.csdn.net/Jason_yesly
    https://blog.csdn.net/Jason_yesly/article/details/85297274


    https://wenku.baidu.com/view/64c63f1edd36a32d737581bc.html
    https://wenku.baidu.com/view/bb573f76700abb68a982fbe5.html

    2、书籍文献

    《电路基础与电子技术》
    《电类专业基础实践教程》

    总结

    以上,就是我对该实验的看法,通过实训,虽然最终电路设计有些缺陷和不足,但掌握了许多知识,学会了用Multisim仿真的基本操作,对改进电路和连接线路方面上有很充分的研究和认识,同时通过查阅大量书籍和网上资料,对元件的选用和代替以及不同元件的不同特性也作了比较到最终的选用,以及最终电路中某些开关以及小型元器件的参数调整进行了反复地测试,到达了基本本课题的基本要求,特别是对Multisim该软件的认识以及运用和该课题中所用到的模拟电子技术和数字电子技术的知识的运用。
    本博客,是我在CSDN上第一次发的博客,毕竟自己忙活了几周的结果,自己学到了不少知识,通过书本资料和网站确实不易。若有不当错误,望评论区订正。

    展开全文
  •  既然那么多功能集中在一个较小的板上,那么在手环的布局和布线中我们要进行格外的注意,现在总结一些注意事项,以供参考。 图 的设计 首先,分区布局,注意走线保护。 从上面的PCB电路板中可以看出,智能手环...
  • 吴厚航[网名 特权同学]:热爱FPGA开发设计工作,擅长记录、分析并总结经验及技巧。个人技术博客在业内有极佳的口碑。在著名电子网站EDN China创建的FPGA/CPLD助学小组成员过万,提供了众多适合入门和进阶的FPGA/...
  •  既然那么多功能集中在一个较小的PCB板上,那么在手环的布局和布线中我们要进行格外的注意,现在总结一些注意事项,以供参考。  首先,分区布局,注意走线保护。  从上面的PCB电路板中可以...
  • 2020-09-29

    2020-09-29 19:12:24
    基于PIC16F877A单片机的多功能电子时钟 文章目录 前言 一、功能实现 二、原理说明 三、程序 总结 前言 通过硬件设计、软件编程及仿真调试的实践,进一步掌握PIC单片机的应用方法,熟练掌握PICC C语言...

     

    基于PIC16F877A单片机的多功能电子时钟

    文章目录

     


    前言

    通过硬件设计、软件编程及仿真调试的实践,进一步掌握PIC单片机的应用方法,熟练掌握PICC C语言程序的编写与调试,是毕业设计前的一次重要实践,为今后走上工作岗位打下坚实的单片机应用基础。


    提示:以下是本篇文章正文内容,下面案例可供参考

    一、功能实现

    实时时钟显示,时间可调;实时温度显示,并具有超限报警功能。输出显示采用LCD1602或LED七段数码显示器。

    二、原理说明 

    DS1307是美国DALLAS公司推出的I2C总线接口实时时钟芯片,它可独立于CPU 工作,不受CPU主晶振及其电容的影响,且计时准确,月累积误差一般小于10秒。芯片还具有主电源掉电情况下的时钟保护电路,DS1307的时钟靠后备电池维持工作,拒绝CPU对其读出和写入访问。同时还具有备用电源自动切换控制电路,因而可在主电源掉电和其它一些恶劣环境场合中保证系统时钟的定时准确性。

    DS1307具有产生秒、分、时、日、月、年等功能,且具有闰年自动调整功能。同时,DS1307芯片内部还集成有一定容量、具有掉电保护特性的静态RAM,可用于保存一些关键数据。

    3.2 显示模块

    如用LCD1602作为显示设备,要求显示屏分两行显示,第一行显示日期(年-月-日)和星期,第二行显示时间(时:分:秒)和温度。显示秒由00一直加到59,分钟数也由00加到59,小时采用24小时制,由00加到23,如此循环显示。

    3.3 按键模块

    按键用来作为时间调整。要求至少设计4个按键,按键1作为设置键;按键2、按键3分别为增加、减少键,在设置键按下时,此两个按键方有效;按键4是确定键,在设置键按下时方才有效。

    3.4 温度采集模块

    DS18B20是美国DALLAS公司推出的单总线数字温度传感器。DS18B20内部集成了温敏元件、数据转换芯片、存储器芯片和计算机接口芯片等多功能模块。其主要技术特点有:具有独特的单线接口方式;可以通过数据线供电,具有超低功耗工作方式;测温范围为-55℃~125℃,测温精度为0.5℃;温度转换精度9~12位可编程,直接将温度转换值以二进制数码的方式串行输出。

    三、使用步骤

    1.头文件lian_pic.h

    //__delay_us(15);
    
    //__delay_ms(15);
    
    //使用延时函数前,需定义时钟频率 #define _XTAL_FREQ 12000000
    
    /
    
    #ifndef __LIAN_PIC_H__
    
    #define __LIAN_PIC_H__
    
    
    
    #define __STAT_BACKWARD_COMPATIBILITY   //兼容PICC低版本 
    
    #include <htc.h>
    
    
    
    
    
    #define uchar unsigned char
    
    #define uint  unsigned int
    
    #define ulong unsigned long
    
    
    
    #define setbit(y,x)   y|=(1<<(x))    //setb(p1,2); p12=1;
    
    #define clrbit(y,x)   y&=~(1<<(x))   //clr(p1,2);  p12=0;
    
    #define getbit(y,x)  (0x01&(y>>(x)))    //获取某一位值
    
    #endif //__LIAN_PIC_H__

    2.lcd12864.h

    #ifndef __LCD12864_H__
    #define __LCD12864_H__
    
    /******************************lcd12864常用命令******************************                           
    0x30	 //基本指令集
    0x01	 //清除显示(清零DDRAM)
    0x02	 //位址归位,游标回原点
    0x04	 //光标左移,整体显示不移动
    0x06	 //光标右移,整体显示不移动
    0x05	 //光标左移,整体显示移动
    0x07	 //光标右移,整体显示移动
    0x08	 //显示状态全关
    0x0C  //显示开
    0x0E  //显示开,游标开
    0x0F  //显示开,游标开,游标位置开
    0x10  //游标左移
    0x14	 //游标右移
    0x18	 //整体显示左移,光标跟随
    0x1C	 //整体显示又移,光标跟随
    
    					  	
    0x36	 //扩展指令集,绘图显示ON
    0x34	 //扩展指令集,绘图显示OFF
    //2010年8月29日16:11:24		  st7920  并行8bit驱动
    ****************************************************************************/
    
    #define dport     PORTD     //定义数据口
    #define dport_in  TRISD=0xff  //PD端口设为输入
    #define dport_out TRISD=0x00  //PD端口设为输出
    #define rs        RE0       //并行数据/控制字选择 H:数据  L:控制字      串行片选信号
    #define rw        RE1       //并行读/写选择       H:读    L:写	         串行数据信号
    #define en        RE2       //并行读写使能        H有效,下降沿锁定数据  串行时钟信号
    #define psb       RC3       //串口,并口选择       H:并口  L:串口
    
    
    //*************** 函数定义 ******************
    void lcd12864_io_init(void);
    void lcd12864_check_busy(void);
    void lcd12864_write_dat(uchar lcd_dat);
    void lcd12864_write_com(uchar lcd_com);
    
    //*********************初始化12864操作io口************************
    void lcd12864_io_init(void)
    { 
      rs=1;
      rw=1;
      en=1;
      psb=1;    //选择8bit并口
    }
    
    //******************读12864读忙状态**********************
    void lcd12864_check_busy(void)
    {
      uint i=20000;	    
      dport_in;       //端口设为输入
      rs=0;
      rw=1;
      en=1;
      while((0x80&dport)&&(i>0))
      {
        i--;
      }
      en=0; 	
    }
    
    //******************向12864写数据**********************
    void lcd12864_write_dat(uchar lcd_dat)
    {
      lcd12864_check_busy();
      dport_out;
      rs=1;
      rw=0;
      en=1;
      dport=lcd_dat;
      en=0;
    }
    
    //******************向12864写指令**********************
    void lcd12864_write_com(uchar lcd_com)
    {
      lcd12864_check_busy();
      dport_out;
      rs=0;
      rw=0;
      en=1;
      dport=lcd_com;
      en=0;
    }
    
    #endif
    

    3.ds18b20.h

    DS18B20头文件
    //**************************DS18B20驱动库****************************
    //功能:实现对DS18B20的读取
    //原理:单总线协议
    //注意:单总线协议对延时要求比较严格,应根据单片机时钟调整延时函数
    //       
    //pic16f877a   4MHz   PICC9.8编译器
    //2010年12月28日14:56:57
    //*******************************************************************
    
    
    #define	DQ_DIR  TRISB5     //控制DS18B20的DQ端
    #define	DQ      RB5        //控制DS18B20的DQ端
    
    
    //ds18b20 ROM操作指令码
    #define ds18b20_skip_rom     0xCC    //跳过ROM指令码
    #define ds18b20_search_rom   0xF0    //搜索ROM指令码
    #define ds18b20_read_rom     0x33    //读ROM指令码
    #define ds18b20_match_rom    0x55    //匹配ROM指令码
    #define ds18b20_alarm_rom    0xEC    //报警搜索ROM指令码
    //ds18b20 RAM操作指令码
    #define ds18b20_convert_ram   0x44   //启动温度转换指令码
    #define ds18b20_read_ram      0xBE   //读RAM指令码    
    #define ds18b20_write_ram     0x4E   //写RAM指令码     
    #define ds18b20_copy_ram      0x48   //把RAM的TH,TL,CFG中的内容复制到EEPROM指令码
    #define ds18b20_recall_eeprom 0xB8   //把EEPROM的TH,TL,CFG中的内容恢复到RAM指令码
    
    
    //*************** 函数定义 ******************
    uchar ds18b20_init(void);                 //初始化函数
    uchar ds18b20_read(void);                 //读一个字节 
    void  ds18b20_write(uchar ds18b20_dat);            //写一个字节
    
    
    //*************************初始化函数************************
    uchar ds18b20_init(void)     
    {
      uchar b=0;
      DQ=0;
      DQ_DIR=0;           //单片机将DQ拉低
      __delay_us(495);    //精确延时495us  大于480us
      DQ_DIR=1;           //拉高总线
      __delay_us(80);     //延时80us       大于60us
      b=DQ;               //读端口如果x=0则初始化成功 x=1则初始化失败
      __delay_us(495);    //精确延时495us  大于480us
      return b;
    }
    
    
    //***************************读一个字节**********************
    uchar ds18b20_read(void)
    {
      uchar c;
      uchar ds18b20_dat=0;   //ds18b20_dat用于存储读到的数据,先清零
      for(c=8;c>0;c--)
      {
        DQ=0;
        DQ_DIR=0;          //拉低总线         
        __delay_us(2);     //延时1us以上   
        DQ_DIR=1;          //拉高总线
        __delay_us(2);     //延时1us以上
                           //在15us以内读数据
        ds18b20_dat>>=1;           //数据右移,读顺序(先低后高)
        if(DQ)
        {
          ds18b20_dat|=0x80;
        }
        __delay_us(65);    //保持60us以上
      }
      return(ds18b20_dat);
    }
    
    
    //***************************写一个字节********************
    void ds18b20_write(uchar ds18b20_dat)
    {
      uchar d;
      for(d=8;d>0;d--)        //写8次,一次写1位,先写低字节
      {
        DQ=0;              
        DQ_DIR=0;             //拉低数据线
        __delay_us(2);        //延时1us以上
        DQ=ds18b20_dat&0x01;          //写数据
        __delay_us(65);       //保持60us以上
        ds18b20_dat>>=1;              //数据右移1位,先写低位
        DQ_DIR=1;             //拉高数据线
        __delay_us(2);        //延时1us以上
                              //两次写之间保持1us以上   
      }
    }
    

    4.ds1302.h

    #ifndef __DS1302_H__
    #define __DS1302_H__
    
    #define SCLK	RC0			//DS1302串行时钟输入引脚
    #define DSIO	RC1			//数据输入/输出引脚,具有三态功能
    #define RST		RC2			//复位引脚,低电平有效,操作时高电平
    
    
    //*************** 函数定义 ******************
    void ds1302_write(uchar addr,uchar dat);		// 向DS1302命令(地址+数据)
    uchar ds1302_read(uchar addr);					// 读取ds1302内容
    void ds1302_init();								//ds1302初始化
    void ds1302_read_time();						//读取时间函数
    
    uchar TIME[7];									//定义全局变量
    #endif
    
    

    5.ds1302.c

    #include "lian_pic.h"
    #include "DS1302.H"
    
    //---DS1302写入和读取时分秒的地址命令---//
    //---秒分时日月周年 最低位读写位;-------//
    uchar READ_RTC_ADDR[7]={0x81,0x83,0x85,0x87,0x89,0x8b,0x8d}; 
    uchar WRITE_RTC_ADDR[7]={0x80,0x82,0x84,0x86,0x88,0x8a,0x8c};
    
    //---DS1302时钟初始化2019年12月20日星期五18点58分00秒。---//
    //---存储顺序是秒分时日月周年,存储格式是用BCD码---//
    uchar TIME[7]={0x00,0x58,0x18,0x20,0x12,0x05,0x19};
    
    //*********************DS1302WRITE************************
    void ds1302_write(uchar addr,uchar dat)
    {
    	TRISC=0X00;
    	uchar f;
    	RST=0;
    	NOP();
    	
    	SCLK=0;			//先将SCLK置低电平
    	NOP();
    	RST=1;			//然后将RST(CE)置高电平
    	NOP();
    	
    	for(f=0;f<8;f++)		//开始传送八位地址命令
    	{
    		DSIO=addr&0x01;		//数据从低位开始传送
    		addr>>=1;
    		SCLK=1;				//数据在上升沿时,DS1302读取数据
    		NOP();
    		SCLK=0;
    		NOP();
    	}
    	for(f=0;f<8;f++)		//开始写入八位数据
    	{
    		DSIO=dat&0x01;		//数据从低位开始传送
    		dat>>=1;
    		SCLK=1;				//数据在上升沿时,DS1302读取数据
    		NOP();
    		SCLK=0;
    		NOP();
    	}
    	
    	RST=0;					//传送数据结束
    	NOP();
    	
    }
    
    //******************DS1302READ**********************
    uchar ds1302_read(uchar addr)
    {
    	uchar j,dat,dat1;
    	RST=0;
    	NOP();
    	
    	SCLK=0;		//先将SCLK置低电平
    	NOP();
    	RST=1;		//然后将RST(CE)置高电平
    	NOP();
    	
    	for(j=0;j<8;j++)		//开始传送八位地址命令
    	{
    		TRISC1=0;
    		NOP();
    		DSIO=addr&0x01;		//数据从低位开始传送
    		addr>>=1;
    		SCLK=1;				//DS1302上升沿时,读取数据
    		NOP();
    		SCLK=0;				//DS1302下降沿时,放置数据
    		NOP();
    		
    	}
    	NOP();
    	for(j=0;j<8;j++)		//读取8位数据
    	{	
    		TRISC1=1;
    		NOP();
    		dat1=DSIO;			//从最低位开始接收
    		dat=(dat>>1)|(dat1<<7);
    		SCLK=1;
    		NOP();
    		SCLK=0;				//DS1302下降沿时,放置数据
    		NOP();	
    	}	
    	RST=0;
    	NOP();					//以下为DS1302复位的稳定时间,必须的。
    	SCLK=1;
    	NOP();
    	DSIO=0;
    	NOP();
    	DSIO=1;
    	NOP();
    	return dat;
    	
    }
    
    //******************DS1302INIT**********************
    void ds1302_init()
    {
    	uchar k;
    	ds1302_write(0x8e,0x00);			//禁止写保护,就是关闭写保护功能
    	for(k=0;k<7;k++)
    	{
    		ds1302_write(WRITE_RTC_ADDR[k],TIME[k]);
    	}
    	ds1302_write(0x80,0x00);
    	ds1302_write(0x8e,0x80);			//打开写保护功能
    }
    //****************DS1302READTIME******************
    void ds1302_read_time()
    {
    	uchar l;
    	for(l=0;l<7;l++)
    	{
    		TIME[l]=ds1302_read(READ_RTC_ADDR[l]);
    	}
    }
    

    6.main.c

    /*************************************************************************************************************
    
    程序功能:LCD602液晶显示时间(DS1307)温度(DS18B20)实验
    
    开发环境:PICC9.8编译器
    
    硬件环境:CEPARK多功能开发学习板/实验箱(2013版),PIC16F877A核心板,芯片PIC16F877A,晶振4MHZ
    																							   
    接线说明:LCD16302核心板RD口接底板JP33,具体为:RD0-D0,RD1-D1,RD2-D2,RD3-D3,RD4-D4,RD5-D5,RD6-D6,RD7-D7
              核心板RE0~RE2接底板JP31,具体为:RE0-RS,RE1-RW,RE2-EN
    		  
    		  DS18B20核心板RB5接底板JP35
    
    		  DS1302 RC0-SCK,RC1-IO,RC2-RST
    
    		  按键设置时间  RA0-K1(K1键进入时钟设置) RA1-K2(选择更改年月日时分秒) RA2-K3(选择设置加一) RA3-K4(确定时钟设置完成设置) 
    
    跳线说明:无
    
    实验现象:LCD112864第一行显示日期 XX年XX月XX日
    
              第二行显示时间 XX-XX-XX
    		  
    	      第三行显示温度 
    									 
    
    
    
    *************************************************************************************************************/
    
    #define _XTAL_FREQ 4000000
    
    
    //********************按键定义*********************
    #define K1 RA0
    #define K2 RA1
    #define K3 RA2
    #define K4 RA3
    #define bee RB7
    
    
    #include "lian_pic.H"
    //#include "LCD1602.H"
    #include "DS18B20.H"
    #include "DS1302.H"
    #include "LCD12864.H"
    __CONFIG(HS&WDTDIS&LVPDIS&PWRTEN);	
    //HS振荡,禁止看门狗,低压编程关闭,启动延时定时器
    
    
    //********************按键定义*********************
    uchar SetPlace;			//数组TIME[SetPlace]
    
    const uchar ucpic[]=
    {
    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0xFF,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,
    0x00,0x00,0x00,0x00,0x00,0x00,0x01,0xE0,0x00,0x1C,0x00,0x00,0x00,0x00,0x00,0x00,
    0x00,0x00,0x00,0x00,0x00,0x00,0x06,0x00,0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x00,
    0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0xC0,0x00,0x00,0x00,0x00,0x00,
    0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0xC0,0x00,0x00,0x00,0x00,0x00,
    0x00,0x00,0x00,0x00,0x00,0x00,0xF0,0x00,0x01,0x80,0x30,0x00,0x00,0x00,0x00,0x00,
    0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0x00,0x19,0x80,0x30,0x00,0x00,0x00,0x00,0x00,
    0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0x00,0x60,0x60,0x0C,0x00,0x00,0x00,0x00,0x00,
    0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0x00,0x60,0x60,0x0C,0x00,0x00,0x00,0x00,0x00,
    0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0x01,0xE0,0x7F,0x0C,0x00,0x00,0x00,0x00,0x00,
    0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0x01,0xE1,0x80,0xCC,0x00,0x00,0x00,0x00,0x00,
    0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0x01,0xE7,0xE3,0xFC,0x00,0x00,0x00,0x00,0x00,
    0x00,0x00,0x00,0x00,0x00,0x03,0x00,0x01,0x9F,0xEF,0xFC,0x00,0x00,0x00,0x00,0x00,
    0x00,0x00,0x00,0x00,0x00,0x03,0x00,0x01,0x9F,0xFF,0xFC,0x00,0x00,0x00,0x00,0x00,
    0x00,0x00,0x00,0x00,0x00,0x0C,0x00,0x07,0x9F,0xEF,0xCC,0x00,0x00,0x00,0x00,0x00,
    0x00,0x00,0x00,0x00,0x00,0x30,0x00,0x06,0x07,0x8F,0x03,0x00,0x00,0x00,0x00,0x00,
    0x00,0x00,0x00,0x00,0x00,0xC0,0x00,0x18,0x00,0x00,0x03,0x00,0x00,0x00,0x00,0x00,
    0x00,0x00,0x00,0x00,0x00,0xC0,0x00,0x18,0x00,0x03,0x00,0xC0,0x00,0x00,0x00,0x00,
    0x00,0x00,0x00,0x00,0x00,0xC0,0x00,0x18,0x00,0x03,0x00,0xC0,0x00,0x00,0x00,0x00,
    0x00,0x00,0x00,0x00,0x00,0x33,0x00,0x18,0x00,0x0C,0x03,0x00,0x00,0x00,0x00,0x00,
    0x00,0x00,0x00,0x00,0x00,0x03,0x0F,0x86,0x01,0x90,0x0F,0x00,0x00,0x00,0x00,0x00,
    0x00,0x00,0x00,0x00,0x00,0x00,0xF8,0x00,0x00,0x70,0x0C,0x00,0x00,0x00,0x00,0x00,
    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x06,0x07,0x80,0x03,0x00,0x00,0x00,0x00,0x00,
    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    0x00,0x00,0x00,0x00,0x00,0x00,0x01,0xFE,0x1F,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,
    0x00,0x00,0x00,0x00,0x00,0x00,0x06,0x01,0xF8,0x10,0x00,0x00,0x00,0x00,0x00,0x00,
    0x00,0x00,0x00,0x00,0x00,0x00,0x0E,0x00,0x00,0x10,0x00,0x00,0x00,0x00,0x00,0x00,
    0x00,0x00,0x00,0x00,0x00,0x00,0x38,0x00,0x00,0x1C,0x00,0x00,0x00,0x00,0x00,0x00,
    0x00,0x00,0x00,0x00,0x00,0x03,0xC0,0x00,0x00,0x03,0xC0,0x00,0x00,0x00,0x00,0x00,
    0x00,0x00,0x00,0x00,0x00,0x3C,0x00,0x00,0x00,0x00,0x3C,0x00,0x00,0x00,0x00,0x00,
    0x00,0x00,0x00,0x00,0x00,0xC0,0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x00,0x00,
    0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0x00,0x00,0x00,0x00,
    0x00,0x00,0x00,0x00,0x0C,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x00,
    0x00,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x00,0x00,0x00,0x0C,0x00,0x00,0x00,0x00,
    0x00,0x00,0x00,0x00,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x0C,0x00,0x00,0x00,0x00,
    0x00,0x00,0x00,0x00,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x00,
    0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x00,
    0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x00,
    0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x00,
    0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x00,
    0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0x00,0x00,0x00,
    0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x60,0x00,0x00,0x00,
    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
    };           //图像数据
    
    //********************函数定义按键*********************
    void keyset_init();
    
    //********************变量定义DS18B20*********************  
    //DS18B20测量的温度放到固定的数组中
    uchar ds18b20_buf[7];		//存放温度
    uint t;						//温度的量化值
    void warn();				//温度超越阈值报警
    //********************变量定义DS1302*********************  
    uchar displaydate[10];		//存放时分秒
    uchar displaydate1[10];		//存放年月日
    uchar displaydate2;		//存放星期
    
    //********************函数定义LCD12864*********************
    void lcd12864_init();
    void lcd12864_dis_oneline(uchar line,uchar *p);
    void lcd12864_dis_image(uchar *p);
    
    //********************函数定义DS18B20*********************   
    void ds18b20_startconvert();		//ds18b20模块开始测量温度
    uint ds18b20_getconvert();			//提取ds18b20模块测量的温度
    void T_convert_buf(uint cnt);		//将温度转换为数组形式
    
    //********************函数定义DS1302*********************
    void ds1302_datapros();				//将读取出来的TIME[7]转换为十进制
    
    //********************综合函数定义RUN*********************
    void run();
    
    //*************** 主程序 ********************
    void main(void)
    {
    	  keyset_init();		//按键初始化
    	  lcd12864_init();
    	  //ds1302_init();
    	  lcd12864_write_com(0x01);    //清除显示(清零DDRAM)
    	  lcd12864_dis_image(ucpic);
    	  __delay_ms(3000);
    	 while(1)
    	  {
    			warn();
    			
    			if(K1==1)
    			{
    					ds1302_write(0x8e,0x00); //设置为可写
    //***************ds18b20处理程序********************	 
    					ds18b20_startconvert();	//启动温度转换
    				    t=ds18b20_getconvert();	//读取温度值 
    				  	T_convert_buf(t);
    					run();
    			}
    			else if(K1==0)
    			{
    				int i=0;
    				while(K4==1)
    				{
    							if(K2==0)		//检测按键K2是否按下
    								{
    									__delay_ms(10);	//消除抖动
    									if(K2==0)
    									{
    										SetPlace++;
    										if(SetPlace>=7)
    										SetPlace=0;					
    									}
    									/*while((i<50)&&(K2==0))	 //检测按键是否松开
    									{
    										__delay_ms(10);
    										i++;
    									}
    									i=0;*/
    								}
    							switch(SetPlace)
    								{
    									case 0:
    											lcd12864_write_com(0x97);
    											lcd12864_write_dat(0x24);
    											lcd12864_write_dat(0x24);
    											__delay_ms(500);
    											lcd12864_write_com(0x97);
    											lcd12864_write_dat(displaydate[8]);
    											lcd12864_write_dat(displaydate[9]);
    											__delay_ms(500);
    											break;
    									case 1:
    											lcd12864_write_com(0x95);
    											lcd12864_write_dat(0x24);
    											lcd12864_write_dat(0x24);
    											__delay_ms(500);
    											lcd12864_write_com(0x95);
    											lcd12864_write_dat(displaydate[4]);
    											lcd12864_write_dat(displaydate[5]);
    											__delay_ms(500);
    											break;
    									case 2:
    											lcd12864_write_com(0x93);
    											lcd12864_write_dat(0x24);
    											lcd12864_write_dat(0x24);
    											__delay_ms(500);
    											lcd12864_write_com(0x93);
    											lcd12864_write_dat(displaydate[0]);
    											lcd12864_write_dat(displaydate[1]);
    											__delay_ms(500);
    											break;
    									case 3:
    											lcd12864_write_com(0x87);
    											lcd12864_write_dat(0x24);
    											lcd12864_write_dat(0x24);
    											__delay_ms(500);
    											lcd12864_write_com(0x87);
    											lcd12864_write_dat(displaydate1[8]);
    											lcd12864_write_dat(displaydate1[9]);
    											__delay_ms(500);
    											break;
    									case 4:
    											lcd12864_write_com(0x85);
    											lcd12864_write_dat(0x24);
    											lcd12864_write_dat(0x24);
    											__delay_ms(500);
    											lcd12864_write_com(0x85);
    											lcd12864_write_dat(displaydate1[4]);
    											lcd12864_write_dat(displaydate1[5]);
    											__delay_ms(500);
    											break;
    									case 5:
    											lcd12864_write_com(0x9b);
    											lcd12864_write_dat(0x24);
    											lcd12864_write_dat(0x24);
    											__delay_ms(500);
    											lcd12864_write_com(0x9b);
    											lcd12864_write_dat(displaydate2);
    											__delay_ms(500);
    											break;
    									case 6:
    											lcd12864_write_com(0x83);
    											lcd12864_write_dat(0x24);
    											lcd12864_write_dat(0x24);
    											__delay_ms(500);
    											lcd12864_write_com(0x83);
    											lcd12864_write_dat(displaydate1[0]);
    											lcd12864_write_dat(displaydate1[1]);
    											__delay_ms(500);
    											break;
    			
    								}
    							if(K3==0)		//检测按键K3是否按下
    								{
    									__delay_ms(10);	//消除抖动
    									if(K3==0)
    									{
    										TIME[SetPlace]++;
    										if((TIME[SetPlace]&0x0f)>9)					 //换成BCD码。
    										{
    											TIME[SetPlace]=TIME[SetPlace]+6;
    										}
    										if((TIME[SetPlace]>=0x60)&&(SetPlace<2))		//分秒只能到59
    										{
    											TIME[SetPlace]=0;
    										}
    										if((TIME[SetPlace]>=0x24)&&(SetPlace==2))		//小时只能到23
    										{
    											TIME[SetPlace]=0;
    										}
    										if((TIME[SetPlace]>=0x32)&&(SetPlace==3))		//日只能到31
    										{
    											TIME[SetPlace]=0;	
    										}
    										if((TIME[SetPlace]>=0x13)&&(SetPlace==4))		//月只能到12
    										{
    											TIME[SetPlace]=0;
    										}	
    										if((TIME[SetPlace]>=0x7)&&(SetPlace==5))		//周只能到7
    										{
    											TIME[SetPlace]=1;
    										}			
    									}
    									/*while((i<50)&&(K3==0))	 //检测按键是否松开
    									{
    										__delay_ms(10);
    										i++;
    									}*/
    									i=0;	
    							}
    						ds1302_init();
    						run();
    									
    				}
    			} 
    	}
    }
    
    //********************按键扫描初始化扫描函数*********************
    void keyset_init()
    {
    	TRISA=0XFF;
    }
    
    //********************函数定义LCD12864*********************
    void lcd12864_init()
    {
    		  ADCON1=0x06;       //PORTA,PORTE设定为数字端口
    		  TRISD=0;           //PORTD设置为输出
    		  TRISE0=0;
    		  TRISE1=0;
    		  TRISE2=0;
    		  TRISC3=0;  
    		  
    		  __delay_ms(10);  
    		  
    		  lcd12864_io_init();
    		  lcd12864_write_com(0x30);  //基本指令集
    		  lcd12864_write_com(0x0c);  //显示开
    		  lcd12864_write_com(0x06);  //光标右移,整体显示不移动
    		  lcd12864_write_com(0x01);  //清除显示(清零DDRAM) 	
    }
    //***************函数定义ds18b20********************
    void ds18b20_startconvert()			//ds18b20启动转换 将温度转换为数字量
    {
    		ds18b20_init();				//ds18b20初始化
    		ds18b20_write(ds18b20_skip_rom);			//跳过都序列号的操作
    		ds18b20_write(ds18b20_convert_ram);			//启动温度转换
    }
    
    unsigned int ds18b20_getconvert()	//ds18b20将温度提取出来
    {
    		uchar Temperature_L=0;		//温度寄存器低八位
    		uchar Temperature_H=0;		//温度寄存器高八位
    		
    		ds18b20_init();
    		ds18b20_write(ds18b20_skip_rom);		//跳过读序列号的操作
    		ds18b20_write(ds18b20_read_ram);		//读取温度寄存器(共可读9个寄存器)前两个就是温度
    		Temperature_L=ds18b20_read();			//读取低八位
    		Temperature_H=ds18b20_read();			//读取高八位
    		t=(Temperature_H<<8)|Temperature_L;
    		t=(uint)(t*0.0625*100);    //将测量值转换为实际温度并扩大100倍
    		if(t>9900) 
    		{
    		    t=0;
    		}
    		return t;
    
    }
    
    void T_convert_buf(uint cnt)		//将温度转换为ASCII码便于lcd1602显示
    {
    		  ds18b20_buf[0]=(cnt/1000)%10+0x30;	//取出十位
    		  cnt=cnt%1000;							
    		  ds18b20_buf[1]=(cnt/100)%10+0x30;     //取出个位
    		  cnt=cnt%100;
    		  ds18b20_buf[2]=0x2e;					//小数点
    		  ds18b20_buf[3]=cnt/10+0x30;          //取出十分位
    		  ds18b20_buf[4]=cnt%10+0x30;          //取出百分位
    		  ds18b20_buf[5]=0x27;
    		  ds18b20_buf[6]=0x63;
    }
    
    void warn()			//温度报警器
    {
    		TRISC7=0;
    		uchar W=50;
    		if((t/100)>W)
    			{
    				bee=~bee;
    			}
    
    }
    //***************函数定义ds1302********************
    void ds1302_datapros() 	 			//将读取的时间BCD码转化成0x,转换为ASCII
    {
       	ds1302_read_time();
    	displaydate[0]=TIME[2]/16+0X30;				//时
    	displaydate[1]=(TIME[2]&0x0f)+0X30;				 
    	displaydate[2]=0xca;
    	displaydate[3]=0xb1;
    	displaydate[4]=TIME[1]/16+0X30;				//分
    	displaydate[5]=(TIME[1]&0x0f)+0X30;	
    	displaydate[6]=0xb7;
    	displaydate[7]=0xd6;
    	displaydate[8]=TIME[0]/16+0X30;				//秒
    	displaydate[9]=(TIME[0]&0x0f)+0X30;
    
       
    	displaydate1[0]=TIME[6]/16+0X30;				//年
    	displaydate1[1]=(TIME[6]&0x0f)+0X30;				 
    	displaydate1[2]=0xc4;
    	displaydate1[3]=0xea;
    	displaydate1[4]=TIME[4]/16+0X30;				//月
    	displaydate1[5]=(TIME[4]&0x0f)+0X30;	
    	displaydate1[6]=0xd4;
    	displaydate1[7]=0xc2;
    	displaydate1[8]=TIME[3]/16+0X30;				//日
    	displaydate1[9]=(TIME[3]&0x0f)+0X30;
    	
    	displaydate2=(TIME[5]&0x0f)+0x30;
    }
    
    
    //***************************函数定义lcd12864*********************
    void lcd12864_dis_oneline(uchar line,uchar *p)			//显示一行字符
    {
      uchar c;
      switch(line%4)
      {
        case 0:   
                lcd12864_write_com(0x80);
                for(c=0;c<6;c++)
                {
                  lcd12864_write_dat(*p);
                  p++;
                  if(*p==0)
                  {
                    break;
                  }
                }    
                break;
        case 1:
                lcd12864_write_com(0x90);
                for(c=0;c<5;c++)
                {
                  lcd12864_write_dat(*p);
          			   p++;
                  if(*p==0)
                  {
                    break;
                  }
                }
    			lcd12864_write_dat(0x04);    
                break;
        case 2:
                lcd12864_write_com(0x88);
                for(c=0;c<5;c++)
                {
                  lcd12864_write_dat(*p);
                  p++;
                  if(*p==0)
                  {
                    break;
                  }
                } 
    			lcd12864_write_dat(0x04);    
                break;
        case 3:
                lcd12864_write_com(0x98);
                for(c=0;c<6;c++)
                {
                  lcd12864_write_dat(*p);
                  p++;
                  if(*p==0)
                  {
                    break;
                  }
                }
    			lcd12864_write_dat(0x04);     
                break;
        default : break; 
      }
    }
    
    void lcd12864_dis_image(uchar *p)		//显示图像
    {
      uchar x,y;
      lcd12864_write_com(0x34);	      //扩展指令集动作,绘图显示OFF
      for(y=0;y<32;y++)                //送上半屏显示数据
      {
        lcd12864_write_com(0x80|y);    //送显示Y坐标0x80-0x9f
        lcd12864_write_com(0x80);      //送显示X坐标0x80
        for(x=0;x<16;x++)
        {
          lcd12864_write_dat(*p);
          p++;
        }
      }
    							  
      for(y=0;y<32;y++)				       //送下半屏显示数据
      {
        lcd12864_write_com(0x80|y);   //送显示Y坐标0x80-0x9f
        lcd12864_write_com(0x88);     //送显示X坐标0x88
        for(x=0;x<16;x++)			  
        {
          lcd12864_write_dat(*p);
          p++;
        }
      }
      lcd12864_write_com(0x36);       //扩展指令集动作,绘图显示ON
    }
    
    //********************综合函数定义RUN*********************
    void run()
    {
    					ds1302_read_time();
    					ds1302_datapros();
    				    lcd12864_write_com(0x30);     //基本指令集
    				    lcd12864_write_com(0x01);     //清除显示(清零DDRAM)
    				    int n,q,p;
    					
    					lcd12864_dis_oneline(0,"日期20");    
    					for(n=0;n<10;n++)
    					{
    						lcd12864_write_dat(displaydate1[n]);
    					}
    				     
    					lcd12864_dis_oneline(1,"时间:");
    				    for(q=0;q<10;q++)
    					{
    						lcd12864_write_dat(displaydate[q]);
    					}
    					
    					lcd12864_dis_oneline(2,"温度:");  
    				   	for(p=0;p<7;p++)
    					{
    						lcd12864_write_dat(ds18b20_buf[p]);
    					}
    					//__delay_ms(500);
    					lcd12864_dis_oneline(3,"星期:");
    					lcd12864_write_dat(displaydate2);
    

     


    总结

    宝剑锋从磨砺出,梅花香自苦寒来~加油!

    展开全文
  • 8.4.7 项选择题考试窗体设计frmduoxuanti窗体)237 8.5 实例总结242 第9章 线程tcp端口扫描工具243 9.1 实例功能说明243 9.2 设计思路与关键技术244 9.2.1 设计思路244 9.2.2 关键技术244 9.3 程序实现与代码245...
  • 4.3.6双功能及多功能设计 4.3.7键盘处理中的特殊问题一重键和连击 4.48279键盘、显示器接口芯片及应用 4.4.18279的组成和基本工作原理 4.4.28279管脚、引线及功能说明 4.4.38279编程 4.4.48279键盘接口实例 4.5...
  • vc++ 应用源码包_1

    热门讨论 2012-09-15 14:22:12
    该实例可进行局域网的聊天、一对对一、和的传送和续传,理论上这是我本人的实现目的,而且目前经测试已基本实现了上述功能,而且网速一般有几M/S。另外有只打开一个应用程序、CRichEdit的使用、最小到...
  • vc++ 应用源码包_2

    热门讨论 2012-09-15 14:27:40
    该实例可进行局域网的聊天、一对对一、和的传送和续传,理论上这是我本人的实现目的,而且目前经测试已基本实现了上述功能,而且网速一般有几M/S。另外有只打开一个应用程序、CRichEdit的使用、最小到...
  • vc++ 应用源码包_4

    热门讨论 2012-09-15 14:38:35
    该实例可进行局域网的聊天、一对对一、和的传送和续传,理论上这是我本人的实现目的,而且目前经测试已基本实现了上述功能,而且网速一般有几M/S。另外有只打开一个应用程序、CRichEdit的使用、最小到...
  • vc++ 应用源码包_6

    热门讨论 2012-09-15 14:59:46
    该实例可进行局域网的聊天、一对对一、和的传送和续传,理论上这是我本人的实现目的,而且目前经测试已基本实现了上述功能,而且网速一般有几M/S。另外有只打开一个应用程序、CRichEdit的使用、最小到...
  • vc++ 应用源码包_3

    热门讨论 2012-09-15 14:33:15
    该实例可进行局域网的聊天、一对对一、和的传送和续传,理论上这是我本人的实现目的,而且目前经测试已基本实现了上述功能,而且网速一般有几M/S。另外有只打开一个应用程序、CRichEdit的使用、最小到...
  • vc++ 应用源码包_5

    热门讨论 2012-09-15 14:45:16
    该实例可进行局域网的聊天、一对对一、和的传送和续传,理论上这是我本人的实现目的,而且目前经测试已基本实现了上述功能,而且网速一般有几M/S。另外有只打开一个应用程序、CRichEdit的使用、最小到...
  • JavaScript王者归来

    2013-01-10 11:30:48
    吴亮,(网名月影),早年曾在微软亚洲研究院做过访问学生、在金蝶软件有限公司先后担任过核心开发工程师、设计师和项目经理,现任百度电子商务事业部Web开发项目经理。多年来致力于 JavaScript技术和Web标准的推广...
  • PCI.EXPRESS系统体系结构标准教材.pdf

    热门讨论 2013-02-17 16:21:16
    21.4 根联合体或交换器内的多功能设备 21.4.1 根联合体内的多功能设备 21.4.2 交换器内的多功能设备 21.5 嵌入交换器或根联合体中的端点 21.6 记住你的身份 21.6.1 概述 21.6.2 根联合体总线号/设备号的分配 21.6.3 ...
  • 实例136 在线考试实现选题功能 217 实例137 下拉框显示GridView控件索引页 220 实例138 设置角色登录功能 221 5.4 使用控件显示图片 223 实例139 显示验证码图片 223 实例140 动态显示用户头像 224 实例141 使用...
  • 实例136 在线考试实现选题功能 217 实例137 下拉框显示GridView控件索引页 220 实例138 设置角色登录功能 221 5.4 使用控件显示图片 223 实例139 显示验证码图片 223 实例140 动态显示用户头像 224 实例141 使用...
  • 实例136 在线考试实现选题功能 217 实例137 下拉框显示GridView控件索引页 220 实例138 设置角色登录功能 221 5.4 使用控件显示图片 223 实例139 显示验证码图片 223 实例140 动态显示用户头像 224 实例141 使用...
  • 学完了这阶段课程,学员将学会开发主流网站的前端效果,比如:焦点图、滚动展示图、网页防复制、网页自定义菜单、WebOS、美女时钟、无刷新评论、评分控件、表格特效、图片悬浮详细信息、微博界面、QQ消息框效果、Div...
  • 电子邮件 - SMTP协议 / POP3协议 / IMAP协议 / smtplib模块 / poplib模块 / imaplib模块 短信服务 - 调用短信服务网关 Day15 - 图像和文档处理 用Pillow处理图片 - 图片读写 / 图片合成 / 几何变换 / 色彩转换 /...
  • 若干源程序资料12.rar

    热门讨论 2012-06-11 22:11:26
    2012-06-11 21:10 18,808 为智能电子钟添加阴历计时功能.rar 2012-06-11 21:35 38,896 二叉树的遍历.zip 2012-06-11 21:13 224,515 人脸识别源程序(1).rar 2012-06-11 21:13 224,515 人脸识别源程序.rar 2012-06-11 ...
  • 2004-2010软考程序员真题

    热门讨论 2012-09-27 12:33:00
    2011年软考程序员考试历年真题重点题总结及答案 一、单选题   1、计算机中数据的表示形式是  A)八进制 B)十进制 C)二进制 D)十六进制  2、硬盘工作时应特别注意避免  A)噪声 B)震动 C)潮湿 D)日光  3、针式...

空空如也

空空如也

1 2
收藏数 26
精华内容 10
关键字:

多功能电子时钟设计总结