#include<reg51.h>
sbit en=P2^6;
sbit weia=P2^3;
sbit weib=P2^4;
sbit weic=P2^5;
char sec,min,hour,date;
unsigned char ucCurtime[7];
unsigned char tab1[]={0xC0,0xCF,0xA4,0x86,0x8B,0x92,0x90,0xC7,0x80,0x82};
//0, 1, 2 3 4 5 6 7 8 9
unsigned char timenow[]={0,0,12,27,6,6,8};
void delay(unsigned int time)
{
while(time--);
}
/* 实时时钟模块 时钟芯片型号:DS1302 */
/*/
/*********************************************************************/
sbit T_CLK = P3^5; /*实时时钟时钟线引脚 */
sbit T_IO = P3^4; /*实时时钟数据线引脚 */
sbit T_RST = P3^3; /*实时时钟复位线引脚 */
/********************************************************************
*
* 名称: DS1302_InputByte()
* 功能: 往DS1302写入1Byte数据
* 输入: ucDa 写入的数据
***********************************************************************/
void DS1302_InputByte(unsigned char ucDa)
{
unsigned char i;
unsigned char temp;
temp = ucDa;
for(i=8; i>0; i--)
{
T_IO = temp&0x01;
T_CLK = 1;
T_CLK = 0;
temp = temp >> 1;
}
}
/********************************************************************
*
* 名称: DS1302_OutputByte()
* 功能: 从DS1302读取1Byte数据
***********************************************************************/
unsigned char DS1302_OutputByte(void)
{
unsigned char i;
unsigned char temp;
temp=0;
for(i=0; i<8;i++)
{
T_CLK = 0;
if(T_IO!=0) temp|=(1<<i);
T_CLK = 1;
}
return(temp);
}
/********************************************************************
*
* 名称: DS1302_InputByte()
* 说明: 先写地址,后写命令/数据
* 功能: 往DS1302写入数据
* 输入: ucAddr: DS1302地址, ucDa: 要写的数据
***********************************************************************/
void DS1302_W1302(unsigned char ucAddr, unsigned char ucDa)
{
T_RST = 0;
T_CLK = 0;
T_RST = 1;
DS1302_InputByte(ucAddr); /* 地址,命令 */
DS1302_InputByte(ucDa); /* 写1Byte数据*/
T_CLK = 1;
T_RST =0;
}
/********************************************************************
*
* 名称: DS1302_R1302()
* 说明: 先写地址,后读命令/数据
* 功能: 读取DS1302某地址的数据
* 输入: ucAddr: DS1302地址
***********************************************************************/
unsigned char DS1302_R1302(unsigned char ucAddr)
{
unsigned char ucDa;
T_RST = 0;
T_CLK = 0;
T_RST = 1;
DS1302_InputByte(ucAddr); /* 地址,命令 */
ucDa = DS1302_OutputByte(); /* 读1Byte数据 */
T_CLK = 1;
T_RST =0;
return(ucDa);
}
/********************************************************************
*
* 名称: DS1302_BurstW1302T()
* 说明: 先写地址,后写数据(时钟多字节方式)
* 功能: 往DS1302写入时钟数据(多字节方式)
* 输入: pSecDa: 时钟数据地址 格式为: 秒 分 时 日 月 星期 年
***********************************************************************/
void DS1302_BurstW1302T(unsigned char *pSecDa)
{
unsigned char i;
DS1302_W1302(0x8e,0x00); /* 控制命令,WP=0,写操作?*/
T_RST = 0;
T_CLK = 0;
T_RST = 1;
DS1302_InputByte(0xbe); /* 0xbe:时钟多字节写命令 */
for (i=8;i>0;i--) /*8Byte = 7Byte 时钟数据 + 1Byte 控制*/
{
DS1302_InputByte(*pSecDa);/* 写1Byte数据*/
pSecDa++;
}
T_CLK = 1;
T_RST =0;
}
/********************************************************************
*
* 名称: DS1302_BurstR1302T()
* 说明: 先写地址,后读命令/数据(时钟多字节方式)
* 功能: 读取DS1302时钟数据
* 输入: pSecDa: 时钟数据地址 格式为: 秒 分 时 日 月 星期 年
***********************************************************************/
void DS1302_BurstR1302T(unsigned char *pSecDa)
{
unsigned char i;
T_RST = 0;
T_CLK = 0;
T_RST = 1;
DS1302_InputByte(0xbf); /* 0xbf:时钟多字节读命令 */
for (i=8; i>0; i--)
{
*pSecDa = DS1302_OutputByte(); /* 读1Byte数据 */
pSecDa++;
}
T_CLK = 1;
T_RST =0;
}
/********************************************************************
*
* 名称: DS1302_BurstW1302R()
* 说明: 先写地址,后写数据(寄存器多字节方式)
* 功能: 往DS1302寄存器数写入数据(多字节方式)
* 输入: pReDa: 寄存器数据地址
***********************************************************************/
void DS1302_BurstW1302R(unsigned char *pReDa)
{
unsigned char i;
DS1302_W1302(0x8e,0x00); /* 控制命令,WP=0,写操作?*/
T_RST = 0;
T_CLK = 0;
T_RST = 1;
DS1302_InputByte(0xfe); /* 0xbe:时钟多字节写命令 */
for (i=31;i>0;i--) /*31Byte 寄存器数据 */
{
DS1302_InputByte(*pReDa); /* 写1Byte数据*/
pReDa++;
}
T_CLK = 1;
T_RST =0;
}
/********************************************************************
*
* 名称: DS1302_BurstR1302R()
* 说明: 先写地址,后读命令/数据(寄存器多字节方式)
* 功能: 读取DS1302寄存器数据
* 输入: pReDa: 寄存器数据地址
***********************************************************************/
void DS1302_BurstR1302R(unsigned char *pReDa)
{
unsigned char i;
T_RST = 0;
T_CLK = 0;
T_RST = 1;
DS1302_InputByte(0xff); /* 0xbf:时钟多字节读命令 */
for (i=31; i>0; i--) /*31Byte 寄存器数据 */
{
*pReDa = DS1302_OutputByte(); /* 读1Byte数据 */
pReDa++;
}
T_CLK = 1;
T_RST =0;
}
/********************************************************************
*
* 名称: DS1302_Set1302()
* 说明:
* 功能: 设置初始时间
* 输入: pSecDa: 初始时间地址。初始时间格式为: 秒 分 时 日 月 星期 年
***********************************************************************/
void DS1302_Set1302(unsigned char *pSecDa)
{
unsigned char i;
unsigned char ucAddr = 0x80;
DS1302_W1302(0x8e,0x00); /* 控制命令,WP=0,写操作?*/
for(i =7;i>0;i--)
{
DS1302_W1302(ucAddr,*pSecDa); /* 秒 分 时 日 月 星期 年 */
pSecDa++;
ucAddr +=2;
}
DS1302_W1302(0x8e,0x80); /* 控制命令,WP=1,写保护?*/
}
/********************************************************************
*
* 名称: DS1302_Get1302()
* 说明:
* 功能: 读取DS1302当前时间
* 调用: DS1302_R1302()
* 输入: ucCurtime: 保存当前时间地址。当前时间格式为: 秒 分 时 日 月 星期 年
***********************************************************************/
void DS1302_Get1302(unsigned char ucCurtime[])
{
unsigned char i;
unsigned char ucAddr = 0x81;
for (i=0;i<7;i++)
{
ucCurtime[i] = DS1302_R1302(ucAddr);/*格式为: 秒 分 时 日 月 星期 年 */
ucAddr += 2;
}
}
void display_tempmain()
{en=0;
weic=1;
weib=0;
weia=0;
P1=tab1[date/10];
en=1;
delay(50);
en=0;
weic=1;
weib=0;
weia=1;
P1=tab1[date%10];
en=1;
delay(50);
en=0;
weic=1;
weib=1;
weia=0;
P1=tab1[hour/10];
en=1;
delay(50);
en=0;
weic=1;
weib=1;
weia=1;
P1=tab1[hour%10];
en=1;
delay(50);
en=0;
weic=0;
weib=0;
weia=0;
P1=tab1[min/10]; //显示百位
en=1;
delay(50); //亮5ms
en=0;
weic=0;
weib=0;
weia=1;
P1=tab1[min%10]; //显示十位
en=1;
delay(50); //亮5ms
en=0;
weic=0;
weib=1;
weia=0;
P1=tab1[sec/10]; //显示个位
en=1;
delay(50); //亮5ms
en=0;
weic=0;
weib=1;
weia=1;
P1=tab1[sec%10]; //显示个位
en=1;
delay(50);
}
void main()
{DS1302_Set1302(timenow);
while(1)
{DS1302_Get1302(timenow);
sec=timenow[0];
min=timenow[1];
hour=timenow[2];
date=timenow[3];
display_tempmain();
delay(100);
}
}
没有合适的资源?快使用搜索试试~ 我知道了~
1602A液晶控制、32 64点阵程序、DS1302、定时器、实时时钟、数字温度计……等等程序
共200个文件
lst:26个
obj:25个
lnp:17个
4星 · 超过85%的资源 需积分: 10 75 下载量 107 浏览量
2009-08-06
13:58:39
上传
评论
收藏 210KB RAR 举报
温馨提示
里面包括了1602A液晶控制、32 64点阵程序、DS1302、定时器、实时时钟、数字温度计……等等程序~~
资源推荐
资源详情
资源评论
收起资源包目录
1602A液晶控制、32 64点阵程序、DS1302、定时器、实时时钟、数字温度计……等等程序 (200个子文件)
Text1.__i 35B
main.__i 34B
蜂鸣器唱歌._ia 37B
矩阵键盘._ia 35B
STARTUP.A51 5KB
STARTUP.A51 5KB
STARTUP.A51 5KB
STARTUP.A51 5KB
STARTUP.A51 5KB
STARTUP.A51 5KB
STARTUP.A51 5KB
STARTUP.A51 5KB
main.asm 5KB
蜂鸣器唱歌.asm 2KB
main.asm 545B
液晶.asm 543B
main.c 7KB
温度计.c 4KB
Text.c 4KB
Text.c 3KB
main.c 2KB
main.c 2KB
Text1.c 1KB
main.c 1KB
main.c 738B
左右移.c 659B
Text1.c 524B
main.c 446B
Text1.c 339B
定时器.c 310B
chenxu 4KB
DS1302 10KB
温度计.hex 5KB
text.hex 3KB
DS1302.hex 2KB
chenxu.hex 2KB
点阵.hex 2KB
实时时钟.hex 1KB
蜂鸣器唱歌.hex 1023B
液晶控制.hex 929B
左右移.hex 854B
time.hex 697B
左右移动流水灯.hex 668B
数字温度计.hex 664B
点阵2字节.hex 520B
矩阵键盘.hex 401B
Project1.hex 332B
定时器.hex 202B
液晶.hex 69B
蜂鸣器唱歌.lnp 68B
矩阵键盘.lnp 64B
实时时钟.lnp 60B
液晶控制.lnp 60B
定时器.lnp 60B
time.lnp 56B
左右移动流水灯.lnp 50B
点阵2字节.lnp 46B
数字温度计.lnp 46B
Project1.lnp 46B
左右移.lnp 44B
温度计.lnp 44B
液晶.lnp 43B
DS1302.lnp 42B
chenxu.lnp 42B
点阵.lnp 41B
text.lnp 40B
main.LST 12KB
main.LST 12KB
STARTUP.LST 11KB
STARTUP.LST 11KB
STARTUP.LST 11KB
STARTUP.LST 11KB
STARTUP.LST 11KB
STARTUP.LST 11KB
STARTUP.LST 11KB
STARTUP.LST 11KB
温度计.LST 9KB
蜂鸣器唱歌.LST 9KB
Text.LST 6KB
Text.LST 6KB
main.LST 4KB
main.LST 4KB
矩阵键盘.LST 4KB
Text1.LST 3KB
main.LST 3KB
main.LST 2KB
左右移.LST 2KB
Text1.LST 2KB
main.LST 2KB
定时器.LST 1KB
Text1.LST 1KB
123.lst 1KB
温度计.M51 18KB
DS1302.M51 17KB
实时时钟.M51 10KB
液晶控制.M51 8KB
数字温度计.M51 7KB
time.M51 7KB
蜂鸣器唱歌.M51 6KB
点阵.M51 5KB
共 200 条
- 1
- 2
资源评论
- GANKAIFENG2013-05-04我还以为是一起的定时闹钟呢
- dqq_92582013-08-27还好吧,资源挺全的
- 逝水逆流年2015-04-29非常好的程序,很齐全,适合单片机学习使用
xicanlin
- 粉丝: 0
- 资源: 6
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功