#include <reg52.h>
#include "LCD1602.h" //调用1602函数库
#include "DS1302.h" //调用DS1302函数库
char Date[16]={"2009-06-01 SUN"},Time[16];
unsigned char K1=0,K2=0,KB=0,ms;
//**************************************************************
//字符串Data[16]和Time[16]处理
void format_time(void)
{
read_clockS();
Date[0]='2';Date[1]='0';
Date[2]=yy/10+0x30;Date[3]=yy%10+0x30; //年处理
Date[4]='-';
Date[5]=mo/10+0x30;Date[6]=mo%10+0x30; //月处理
Date[7]='-';
Date[8]=dd/10+0x30;Date[9]=dd%10+0x30; //日处理
Date[10]=' ';Date[11]=' ';
Date[15]=0;
switch(xq) //星期处理
{
case 1: Date[12]='M'; Date[13]='O'; Date[14]='N'; break;
case 2: Date[12]='T'; Date[13]='U'; Date[14]='E'; break;
case 3: Date[12]='W'; Date[13]='E'; Date[14]='D'; break;
case 4: Date[12]='T'; Date[13]='H'; Date[14]='U'; break;
case 5: Date[12]='F'; Date[13]='R'; Date[14]='I'; break;
case 6: Date[12]='S'; Date[13]='A'; Date[14]='T'; break;
case 7: Date[12]='S'; Date[13]='U'; Date[14]='N'; break;
}
Time[0]=hh/10+0x30; Time[1]=hh%10+0x30; //小时处理
Time[2]=':';
Time[3]=mm/10+0x30; Time[4]=mm%10+0x30; //分处理
Time[5]=' ';
Time[6]=ss/10+0x30; Time[7]=ss%10+0x30; //秒处理
Time[8]=0;
if(((ms/10)>0)&&(KB>0)) //调时闪烁处理
{
switch(KB)
{
case 1: Date[0]=Date[1]=Date[2]=Date[3]=' '; break;
case 2: Date[5]=Date[6]=' '; break;
case 3: Date[8]=Date[9]=' '; break;
case 4: Date[12]=Date[13]=Date[14]=' '; break;
case 5: Time[0]=Time[1]=' '; break;
case 6: Time[3]=Time[4]=' '; break;
case 7: Time[6]=Time[7]=' '; break;
}
}
}
//****************************************************************
//键盘函数
unsigned char Getkey(void)
{
unsigned char RK=0;
P3=0xff;
K2=K1; //前一次键值赋给后一次
K1=(~P3)&0x0f; //读入P3反相后去掉高四位的数值
switch((K1<<4)|K2) //前一次键值和后一次键值合并
{
case 0x11: RK=1; break; //P3.0为低电平时反回1
case 0x22: RK=2; break; //P3.1为低电平时反回2
case 0x44: RK=3; break; //P3.2为低电平时反回3
case 0x88: RK=4; break; //P3.3为低电平时反回4
case 0x10: RK=11; break; //P3.0电平负跳变时反回11
case 0x20: RK=12; break; //P3.1电平负跳变时反回12
case 0x40: RK=13; break; //P3.2电平负跳变时反回13
case 0x80: RK=14; break; //P3.3电平负跳变时反回14
case 0x01: RK=21; break; //P3.0电平正跳变时反回21
case 0x02: RK=22; break; //P3.1电平正跳变时反回22
case 0x04: RK=23; break; //P3.2电平正跳变时反回23
case 0x08: RK=24; break; //P3.3电平正跳变时反回24
}
return RK;
}
//================================================================
void main(void)
{
unsigned char i=0;
Init_1302(); //1302初始化
LCD_1602_Init(); //1602初始化
while(1)
{
format_time(); //数据转换及处理
LCD_chars(0,0,Date); //显视早期
LCD_chars(0,1,Time); //显视时间
ms++; //调时闪烁计数
ms%=20; //调时闪烁频率
switch(Getkey())
{
case 11: KB++; break; //键值处理
case 12: KB--; break;
case 13: DS1302_Date_Up(KB , 1); break;
case 14: DS1302_Date_Up(KB , 2); break;
}
if(KB>200)KB=7; //轮回处理
if(KB>7)KB=0;
}
}//================================================================
没有合适的资源?快使用搜索试试~ 我知道了~
基于DS1302和1602的电子钟(包括仿真)
共17个文件
bak:2个
h:2个
lnp:1个
4星 · 超过85%的资源 需积分: 11 111 下载量 151 浏览量
2009-08-07
21:01:43
上传
评论
收藏 66KB RAR 举报
温馨提示
基于DS1302和1602的电子钟!我们是508创新实验室的~DS1302和1602的电子钟的每一步我都调试好了的!下载下来就可以用了!
资源推荐
资源详情
资源评论
收起资源包目录
基于DS1302和1602的电子钟.rar (17个子文件)
基于DS1302和1602的电子钟
基于DS1302和1602的电子钟.OBJ 24KB
基于DS1302和1602的电子钟.lnp 80B
基于DS1302和1602的电子钟 19KB
基于DS1302和1602的电子钟.plg 201B
基于DS1302和1602的电子钟.M51 24KB
LCD1602.h 6KB
基于DS1302和1602的电子钟.PWI 973B
基于DS1302和1602的电子钟.hex 6KB
基于DS1302和1602的电子钟.c 4KB
基于DS1302和1602的电子钟.DSN 123KB
基于DS1302和1602的电子钟_Opt.Bak 2KB
基于DS1302和1602的电子钟.Uv2 2KB
基于DS1302和1602的电子钟.LST 7KB
Last Loaded 基于DS1302和1602的电子钟.DBK 123KB
基于DS1302和1602的电子钟.Opt 2KB
基于DS1302和1602的电子钟_Uv2.Bak 2KB
DS1302.h 5KB
共 17 条
- 1
hacker100000
- 粉丝: 1
- 资源: 6
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
- 1
- 2
前往页