没有合适的资源?快使用搜索试试~ 我知道了~
DS1302八位数码管C语言可调时钟日历
需积分: 2 19 下载量 38 浏览量
2012-09-25
16:19:39
上传
评论
收藏 295KB DOC 举报
温馨提示
试读
27页
DS1302可调时钟日历 程序简介: 8为数码管显示 通过K1切换时间日历 时间格式位XX—XX—XX分别为时分秒 日历格式为XX—XX X分别为月日 星期 在时间显示时,通过按K2实现时、分、秒的闪烁切换 在日期显示时,通过按K2实现月、日、星期的闪烁切换 在任意数码管闪烁时,短按K3,该闪烁位值增1,短按K4,该闪烁位值减1 在任意数码管闪烁时,长按K3,该闪烁位值连续增1,长按K4,该闪烁位值连续减1 在任意调节状态,短按K5,正常显示时间 (程序经硬件实际测试通过,采用共阳数码管,程序放在WORD中有点乱,复制到KILE中就好了)
资源推荐
资源详情
资源评论
DS1302 可调时钟日历
程序简介:
8 为数码管显示
通过K1切换时间日历
时间格式位 XX—XX—XX分别为时分秒
日历格式为 XX—XX X分别为月日 星期
在时间显示时,通过按 K2 实现时、分、秒的闪烁切换
在日期显示时,通过按 K2 实现月、日、星期的闪烁切换
在任意数码管闪烁时,短按 K3,该闪烁位值增 1,短按 K4,该闪烁位值减 1
在任意数码管闪烁时,长按 K3,该闪烁位值连续增 1,长按 K4,该闪烁位值连续减 1
在任意调节状态,短按 K5,正常显示时间
(程序经硬件实际测试通过,采用共阳数码管,程序放在 WORD 中有点乱,复制到 KILE 中
就好了)
DS1302 时钟电路图
DS1302 程序
#include<reg51.h>
#define uchar unsigned char
#define uint8 unsigned int
sbit io_DS1302_RST = P1^5 ;
sbit io_DS1302_IO = P1^6 ;
sbit io_DS1302_SCLK = P1^7 ;
sbit duan=P1^0;
sbit wei=P1^2;
char shi,fen,miao,day,month,year,week,k,tiaoshijian,tiaoriqi,bb;
uchar table[12]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xbf,0xbf};
uchar table1[11]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0x80,0x90,0xbf,0xbf};
#define KEY_1 0x0e
#define KEY_2 0x0d
#define KEY_3 0x0b
#define KEY_4 0x07
#define KEY_5 0x10
#define KEY_NULL 0x1f
#define KEY_PRESS 0x80
#define KEY_LONG 0x40
#define KEY_STATE_INIT 0
#define KEY_STATE_PRESS 1
#define KEY_STATE_LONG 2
#define KEY_STATE_UP 3
#define KEY_LONG_PERIOD 20
#define KEY_CONTINUE_PERIOD 10
bit set;
bit dao1S=0;
bit dao2MS=0;
bit dao10MS;
bit ss,mm,ff,yue,tian,xq;
sbit key1=P3^0;
sbit key2=P3^1;
sbit key3=P3^2;
sbit key4=P3^3;
sbit key5=P3^4;
int main_flag=0,exit_flag,up_flag,down_flag;
int tab[]={0,0,0,0,0,0};
uchar weitable[]={0x01,0x02,0x04,0x08,0x10,0x20};
uchar tab1[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
void nint()
{ TMOD=0X01;
TH0=0XF8;
TL0=0XCC;
TR0=1;
ET0=1;
}
uchar KeyScan()
{
if(key1==0) return KEY_1;
if(key2==0) return KEY_2;
if(key3==0) return KEY_3;
if(key4==0) return KEY_4;
if(key5==0) return KEY_5;
return KEY_NULL;
}
uchar GetKey()
{
uchar keyRetu=0,keyTemp=KEY_NULL;
static uchar s_keyState=KEY_STATE_INIT,keyTime=0,keyLast=KEY_NULL;
keyTemp=KeyScan();
switch (s_keyState)
{
case KEY_STATE_INIT:
if(keyTemp!=KEY_NULL)
{
s_keyState=KEY_STATE_PRESS;
}
break;
case KEY_STATE_PRESS:
if(keyTemp!=KEY_NULL)
{
s_keyState=KEY_STATE_LONG;
keyTime=0;
keyLast=keyTemp;
}
else
{
s_keyState=KEY_STATE_INIT;
}
break;
case KEY_STATE_LONG:
if(keyTemp==KEY_NULL)
{
s_keyState=KEY_STATE_INIT;
keyRetu=(keyLast|KEY_PRESS);
}
else
{
if(++keyTime>=KEY_LONG_PERIOD)
{
s_keyState=KEY_STATE_UP;
keyTime=0;
}
}
break;
case KEY_STATE_UP:
if(keyTemp==KEY_NULL)
{
s_keyState=KEY_STATE_INIT;
}
else
{
if(++keyTime>=KEY_CONTINUE_PERIOD)
{
keyTime=0;
keyRetu=(keyLast|KEY_LONG);
}
}
break;
}
return keyRetu;
}
uchar bcdtoasc(uchar cha)
{
return ((cha/16)*10+(cha%16));
}
uchar asctobcd(uchar cha)
{
return ((cha/10)*16+(cha%10));
}
void timer() interrupt 1
{ static count=0;
static count1=0;
TH0=0XF8;
TL0=0XCC;
dao2MS=1;
count++;
if(++count1==10)
{ count1=0;
dao10MS=1;
}
if(!(count%25)) set = !set;
if(count==500)
{
count=0;
dao1S=1;
}
}
//-------------------------------------常数宏---------------------------------//
#define DS1302_SECOND_WRITE 0x80 //写时钟芯片的寄存器位置
#define DS1302_MINUTE_WRITE 0x82
#define DS1302_HOUR_WRITE 0x84
#define DS1302_WEEK_WRITE 0x8A
#define DS1302_DAY_WRITE 0x86
#define DS1302_MONTH_WRITE 0x88
#define DS1302_YEAR_WRITE 0x8C
#define DS1302_SECOND_READ 0x81 //读时钟芯片的寄存器位置
#define DS1302_MINUTE_READ 0x83
#define DS1302_HOUR_READ 0x85
#define DS1302_WEEK_READ 0x8B
#define DS1302_DAY_READ 0x87
#define DS1302_MONTH_READ 0x89
#define DS1302_YEAR_READ 0x8D
//-----------------------------------操作宏----------------------------------//
剩余26页未读,继续阅读
资源评论
cyj_colon
- 粉丝: 0
- 资源: 5
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- C库函数参考手册.rar,是chm文件,查询非常方便,带用例,非常详解
- C库函数参考手册.rar,是chm文件,查询非常方便,带用例,非常详解
- 17个STM32F030C8T6例程
- 0.0.0 VScode插件platformIO开发环境的安装[esp32、8266]_̌萌新历险记的博客-CSDN博客.mhtml
- 基于matlab故障级联预测和分析的影响模型的源代码.rar
- 基于matlab实现的Frank-Wolfe算法,交通网络流中交通分配能用上.rar
- Editor下载非常好用的工具
- 基于matlab实现的NALM锁模激光器仿真,非线性环路反射镜锁模获得飞秒激光脉冲.rar
- 基于matlab实现的mimo空时编码STBC,以最大似然值算法做检测.rar
- 基于matlab实现的交通分配的GUI程序代码.rar
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功