矿石收音机论坛

 找回密码
 加入会员

QQ登录

只需一步,快速开始

搜索
查看: 17025|回复: 21

我的lcd1602+ds1302+18B20万年历终于也做成了

  [复制链接]
     
发表于 2011-11-18 20:55:29 | 显示全部楼层 |阅读模式
由当初准备零件到现在历时一年多,我的lcd1602+ds1302+18B20万年历终于做好了。电路是用洞洞板做的,由max232作串口输入,USB口直接取电简化了电源电路。P0口接1602的数据口,P2口作控制口,ds1302和18B20都接在P2口上。数码管的段码接的P1口,位码接在p3口上,P3口剩下的接了开关和蜂鸣器。程序借用了中国机器朋友的,只作了少量改动。下一步想改LDE数码管同步显示日期时间温度显示,改了几下还没成功,还望各路朋友指教!先上制作过程图:
s1.jpg
s2.jpg
s3.jpg
s4.JPG
s5.JPG
s6.JPG

评分

2

查看全部评分

     
发表于 2011-11-18 21:53:32 | 显示全部楼层
做得不错,除了1302,另一个八角芯片是什么
回复 支持 反对

使用道具 举报

     
 楼主| 发表于 2011-11-18 22:04:08 | 显示全部楼层
回复 2# 风流侠客


串口存储器 24c08
回复 支持 反对

使用道具 举报

     
发表于 2011-11-18 22:08:11 | 显示全部楼层
回复 3# duxaaa


    明白了,用它做掉电存储
回复 支持 反对

使用道具 举报

     
发表于 2011-11-18 22:12:27 | 显示全部楼层
回复  duxaaa
用它做掉电存储
风流侠客 发表于 2011-11-18 22:08


其实,掉电存储根本用不着E2PROM,因为DS1302中有31字节的RAM,可以实现掉电存储。当然DS1302得有电池。
回复 支持 反对

使用道具 举报

     
发表于 2011-11-18 22:17:38 | 显示全部楼层
其实这个STC单片机片内有用户EEPROM的,可以利用一下,不需要再外接芯片了
回复 支持 反对

使用道具 举报

     
发表于 2011-11-18 23:08:56 | 显示全部楼层
由当初准备零件到现在历时一年多,被吓一跳,
看了 亮点是  洞洞板背面整齐的走线!
回复 支持 反对

使用道具 举报

     
发表于 2011-11-18 23:23:00 | 显示全部楼层
外接的24c02主要可以用于闹钟数据的存储,不是掉电走时用的。

恭喜楼主!
回复 支持 反对

使用道具 举报

     
发表于 2011-11-18 23:40:48 | 显示全部楼层
外接的24c02主要可以用于闹钟数据的存储,不是掉电走时用的。

恭喜楼主!
中国机器 发表于 2011-11-18 23:23


STC 单片机片内也有EEPROM,而且用法也很简单,完全可以以取代外界的24C02.
回复 支持 反对

使用道具 举报

     
发表于 2011-11-19 00:02:30 | 显示全部楼层
外接的24c02主要可以用于闹钟数据的存储,不是掉电走时用的。
中国机器 发表于 2011-11-18 23:23


用DS1302自带的31字节RAM完全就可以,E2PROM浪费钱啦
回复 支持 反对

使用道具 举报

     
发表于 2011-11-19 00:08:57 | 显示全部楼层
STC 单片机片内也有EEPROM,而且用法也很简单,完全可以以取代外界的24C02.
yangcheng84 发表于 2011-11-18 23:40


STC自带的是4k,比24c02多了2k,不过没24c08多。
回复 支持 反对

使用道具 举报

发表于 2011-11-19 10:45:33 | 显示全部楼层
STC 单片机片内也有EEPROM,而且用法也很简单,完全可以以取代外界的24C02.
yangcheng84 发表于 2011-11-18 23:40



    请教:如何使用STC内部的EEPROM??我现在也是外接的24c用于保存闹铃?如果可以使用内部的那就很简单了。
回复 支持 反对

使用道具 举报

     
发表于 2011-11-19 13:50:19 | 显示全部楼层
回复 12# 清风车影18




    http://www.mcu-memory.com/datash ... +%20FLASH-ISP-IAP.c

这是官方的STC89系列单片机片内IAP操作程序,可以直接把需要的部分复制到自己的程序里使用,具体使用方法可参考官方提供的芯片手册,如只使用这部分ROM来存储闹钟等比较简单的设定数据,只保留这个程序里面的isp_iap_enable,isp_iap_disable,Sector_Erase,Byte_Read,Byte_Program几个函数即可,每次写入数据前,需要将对应扇区数据擦除,如扇区中有需要保留部分就将其读入RAM(用变量保存即可),然后将数据写入,读取数据只要调用Byte_Read函数即可,操作比较简单。
对于89C系列单片机来说,这部分用户ROM是独立于单片机片内程序区的空间,可以任意读写而不影响程序运行使用,新系列12C系列中的IAP12C5A62S2是可以在程序运行时读写程序区,从而实现在线更新程序的目的。

程序里以下的这部分照原样复制,粘贴到程序开始位置头文件引入之下即可,当然也可以把这部分编写独立头文件,使用时直接引入,晶振频率可根据实际情况修改

/*        新增特殊功能寄存器定义        */
sfr         ISP_DATA        =   0xe2;
sfr     ISP_ADDRH        =   0xe3;  
sfr         ISP_ADDRL        =   0xe4;
sfr         ISP_CMD        =   0xe5;
sfr         ISP_TRIG        =   0xe6;   
sfr         ISP_CONTR    =   0xe7;
/* 定义命令 */
#define READ_AP_and_Data_Memory_Command                                0x01        /*  字节读数据存储区   */
#define PROGRAM_AP_and_Data_Memory_Command          0x02        /*  字节编程数据存储区 */
#define SECTOR_ERASE_AP_and_Data_Memory_Command     0x03        /*  扇区擦除数据存储区 */

typedef     unsigned char        INT8U;                /* 8 bit 无符号整型  */
typedef     unsigned int    INT16U;     /* 16 bit 无符号整型 */
#define                DELAY_CONST         60000

/* 定义Flash 操作等待时间 */
#define        MCU_CLOCK_40MHz
//#define         MCU_CLOCK_20MHz
//#define        MCU_CLOCK_10MHz
//#define        MCU_CLOCK_5MHz
#ifdef MCU_CLOCK_40MHz
        #define WAIT_TIME        0x00
#endif
#ifdef MCU_CLOCK_20MHz
        #define WAIT_TIME        0x01
#endif
#ifdef MCU_CLOCK_10MHz
        #define WAIT_TIME        0x02
#endif
#ifdef MCU_CLOCK_5MHz
        #define WAIT_TIME        0x03
#endif

/* 调试控制项 */
//#define         DEBUG_STC89C_LE58RD+

#define         DEBUG_STC89C_LE52RC

#define USED_BYTE_QTY_IN_ONE_SECTOR                512

INT8U xdata protect_buffer[USED_BYTE_QTY_IN_ONE_SECTOR];

#ifdef DEBUG_STC89C_LE58RD+                        //STC89C58RD+,  89LE58RD+
        #define DEBUG_AP_Memory_Begin_Sector_addr                0x0000
        #define DEBUG_AP_Memory_End_Sector_addr         0x7e00
        #define DEBUG_AP_Memory_End_Byte_addr           0x7fff

        #define DEBUG_Data_Memory_Begin_Sector_addr     0x8000
#endif
#ifdef DEBUG_STC89C_LE52RC                        //STC89C52RC,        89LE52RC
        #define DEBUG_AP_Memory_Begin_Sector_addr                0x0000
        #define DEBUG_AP_Memory_End_Sector_addr                        0x1e00
        #define DEBUG_AP_Memory_End_Byte_addr                        0x1fff

        #define DEBUG_Data_Memory_Begin_Sector_addr                0x2000
#endif


后面的函数部分一般只保留前面提及的几个,其他部分如校验函数,测试数组及指示灯声明等均去掉。
片内IAP操作如果初次使用可能觉得很难,用过几次之后就觉得很简单,不用外接芯片使用很方便,但是读写时一定注意操作顺序,以免因操作不当造成数据丢失。
回复 支持 反对

使用道具 举报

     
发表于 2011-11-20 16:11:30 | 显示全部楼层
用DS1302自带的31字节RAM完全就可以,E2PROM浪费钱啦
Edward 发表于 2011-11-19 00:02



是的,用DS1302的一般的闹钟数据完全够用了
回复 支持 反对

使用道具 举报

     
发表于 2011-11-20 16:12:37 | 显示全部楼层
STC自带的是4k,比24c02多了2k,不过没24c08多。
Edward 发表于 2011-11-19 00:08



     呵呵,确实如此,STC自带的也能用的
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 加入会员

本版积分规则

小黑屋|手机版|矿石收音机 ( 蒙ICP备05000029号-1 )

蒙公网安备 15040402000005号

GMT+8, 2024-5-2 13:49

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表