DS1302设计的可调万年历(实测正常,附有程序) - 图文
更新时间:2024-03-10 21:02:01 阅读量: 综合文库 文档下载
DS1302设计的可调万年历
(本制作所用数码管全为共阳数码管)
我刚开始想做万年历的时候是上网找别人的程序,可是发现找了很多都不理想,要不就没日历和时间一起显示,要不就不能调时间的,后来我研究了两天,自己终于把程序编了出来。好了,废话我就不多说,本制作我已经把实物做了出来,保证没问题!下面附有仿真图和实物图。
拍摄的效果不够好,但实物是不错的,本人实物中用三级管代替了仿真图的74HC04非门,用哪个都是可以的……
请注意:本程序分两个C文件的,如果不会编,可以Q我:1107588997 我直接发程序过去给你…… 软件源程序:(初始化程序只在开始时用一次,之后要把它屏蔽掉)
#include
uchar time_data[7]={0,0,0,0,0,0,0};
uchar write_add[7]={0x8c,0x8a,0x88,0x86,0x84,0x82,0x80}; uchar read_add[7]={0x8d,0x8b,0x89,0x87,0x85,0x83,0x81}; void write_ds1302_byte(uchar dat) {
uchar i;
for(i=0;i<8;i++) { sck=0; io=dat&0x01; dat=dat>>1; sck=1; } }
void write_ds1302(uchar add,uchar dat) {
rst=0;_nop_(); sck=0;_nop_(); rst=1;_nop_();
write_ds1302_byte(add); write_ds1302_byte(dat); rst=0;_nop_(); io=1; sck=1; }
uchar read_ds1302(uchar add) {
uchar i,value; rst=0;_nop_(); sck=0;_nop_(); rst=1;_nop_();
write_ds1302_byte(add); for(i=0;i<8;i++) { value=value>>1; sck=0; if(io) value=value|0x80; sck=1; }
rst=0;_nop_(); sck=0;_nop_(); sck=1; io=1;
return value; }
void read_rtc(void) {
uchar i;
for(i=0;i<7;i++) { time_data[i]=read_ds1302(read_add[i]); } }
void time_pros(void)
{
nian=time_data[0]/16*10+time_data[0]; yue=time_data[2]/16*10+time_data[2]; ri=time_data[3]/16*10+time_data[3]; xi=time_data[1]/16*10+time_data[1]; shi=time_data[4]/16*10+time_data[4]; fen=time_data[5]/16*10+time_data[5]; miao=time_data[6]/16*10+time_data[6]; }
void main() {
// Init_DS1302();//初始化 while(1) { read_rtc(); time_pros(); display(); button(); } }
//---------------------------- zichengxu.c ---------------------------------------------- #define DUAN1 P2 #define DUAN2 P3 #define WEI P0
#define uint unsigned int #define uchar unsigned char sbit sck = P1^1; sbit io = P1^0; sbit rst = P1^2 ; sbit k1=P1^4; sbit k2=P1^5; sbit k3=P1^6; sbit k4=P1^7;
uchar shi,fen,miao,nian,yue,ri,xi,menu,y;
unsigned char code quan[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
void write_ds1302_byte(uchar dat);
void write_ds1302(uchar add,uchar dat); uchar read_ds1302(uchar add);
//void Init_DS1302(void); // 初始化 void read_rtc(void); void time_pros(void);
void display(void); void button(void);
void delay(uint z) {
uchar x,y;
for(x=z;x>0;x--) for(y=110;y>0;y--); }
/*(void Init_DS1302(void) //初始化 {
write_ds1302(0x8e,0x00); write_ds1302(0x80,0x00); write_ds1302(0x82,0x20); write_ds1302(0x84,0x09); write_ds1302(0x86,0x25); write_ds1302(0x88,0x12); write_ds1302(0x8a,0x06); write_ds1302(0x8c,0x10); write_ds1302(0x90,0x01); write_ds1302(0xc0,0xf0); write_ds1302(0x8e,0x80); } */
void display(void) {
WEI=0;
DUAN1=quan[2];
if(menu==3&&y<80&&k1!=0&&k2!=0&&k3!=0&&k4!=0) {DUAN2=0xff; }
else DUAN2=quan[shi/10]; delay(2);
DUAN1=0xff; DUAN2=0xff;
WEI=1;
DUAN1=quan[0];
if(menu==3&&y<80&&k1!=0&&k2!=0&&k3!=0&&k4!=0) {DUAN2=0xff; }
else DUAN2=quan[shi]; delay(2);
DUAN1=0xff; DUAN2=0xff;
WEI=2;
if(menu==7&&y<80&&k1!=0&&k2!=0&&k3!=0&&k4!=0) {DUAN1=0xff; }
else DUAN1=quan[nian/10];
if(menu==2&&y<80&&k1!=0&&k2!=0&&k3!=0&&k4!=0) {DUAN2=0xff; }
else DUAN2=quan[fen/10]; delay(2);
DUAN1=0xff; DUAN2=0xff;
WEI=3;
if(menu==7&&y<80&&k1!=0&&k2!=0&&k3!=0&&k4!=0) {DUAN1=0xff; }
else DUAN1=quan[nian];
if(menu==2&&y<80&&k1!=0&&k2!=0&&k3!=0&&k4!=0) {DUAN2=0xff; }
else DUAN2=quan[fen]; delay(2);
DUAN1=0xff; DUAN2=0xff;
WEI=4;
if(menu==6&&y<80&&k1!=0&&k2!=0&&k3!=0&&k4!=0) {DUAN1=0xff; }
else DUAN1=quan[yue/10];
if(menu==1&&y<80&&k1!=0&&k2!=0&&k3!=0&&k4!=0) {DUAN2=0xff; }
else DUAN2=quan[miao/10]; delay(2);
DUAN1=0xff; DUAN2=0xff;
WEI=5;
if(menu==6&&y<80&&k1!=0&&k2!=0&&k3!=0&&k4!=0) {DUAN1=0xff; }
else DUAN1=quan[yue];
if(menu==1&&y<80&&k1!=0&&k2!=0&&k3!=0&&k4!=0) {DUAN2=0xff; }
else DUAN2=quan[miao]; delay(2);
DUAN1=0xff; DUAN2=0xff;
WEI=6;
if(menu==5&&y<80&&k1!=0&&k2!=0&&k3!=0&&k4!=0) {DUAN1=0xff; }
else DUAN1=quan[ri/10]; DUAN2=0xff; delay(2);
DUAN1=0xff;
WEI=7;
if(menu==5&&y<80&&k1!=0&&k2!=0&&k3!=0&&k4!=0) {DUAN1=0xff; }
else DUAN1=quan[ri];
if(menu==4&&y<80&&k1!=0&&k2!=0&&k3!=0&&k4!=0) {DUAN2=0xff; }
else DUAN2=quan[xi]; delay(2);
DUAN1=0xff; DUAN2=0xff; }
void button(void) {
if(k4==0) { delay(10); if(k4==0) { menu++; if(menu>=8){menu=0;} while(!k4){display();} } }
if(menu==1) { if(k2==0) { delay(10); if(k2==0) { miao++; if(miao==60){miao=0;} while(!k2){display();} }
} if(k3==0) { delay(10); if(k3==0) { miao--; if(miao==255){miao=59;} while(!k3){display();} } } write_ds1302(0x8e,0x00); write_ds1302(0x80,miao/10*16+miao); write_ds1302(0x8e,0x80); y++; if(y>=160){y=0;} }
if(menu==2) { if(k2==0) { delay(10); if(k2==0) { fen++; if(fen==60){fen=0;} while(!k2){display();} } } if(k3==0) { delay(10); if(k3==0) { fen--; if(fen==255){fen=59;} while(!k3){display();} } } write_ds1302(0x8e,0x00); write_ds1302(0x82,fen/10*16+fen); write_ds1302(0x8e,0x80); y++; if(y>=160){y=0;} }
if(menu==3)
{ if(k2==0) { delay(10); if(k2==0) { shi++; if(shi==24){shi=0;} while(!k2){display();} } } if(k3==0) { delay(10); if(k3==0) { shi--; if(shi==255){shi=23;} while(!k3){display();} } } write_ds1302(0x8e,0x00); write_ds1302(0x84,shi/10*16+shi); write_ds1302(0x8e,0x80); y++; if(y>=160){y=0;} }
if(menu==4) { if(k2==0) { delay(10); if(k2==0) { xi++; if(xi==8){xi=1;} while(!k2){display();} } } if(k3==0) { delay(10); if(k3==0) { xi--;
if(xi==0){xi=7;} while(!k3){display();} } } write_ds1302(0x8e,0x00); write_ds1302(0x8a,xi/10*16+xi); write_ds1302(0x8e,0x80); y++; if(y>=160){y=0;} }
if(menu==5) { if(k2==0) { delay(10); if(k2==0) { ri++; if(ri==32){ri=1;} while(!k2){display();} } } if(k3==0) { delay(10); if(k3==0) { ri--; if(ri==0){ri=31;} while(!k3){display();} } } write_ds1302(0x8e,0x00); write_ds1302(0x86,ri/10*16+ri); write_ds1302(0x8e,0x80); y++; if(y>=160){y=0;} }
if(menu==6) { if(k2==0) { delay(10); if(k2==0) { yue++;
if(yue==13){yue=1;} while(!k2){display();} } } if(k3==0) { delay(10); if(k3==0) { yue--; if(yue==0){yue=12;} while(!k3){display();} } } write_ds1302(0x8e,0x00); write_ds1302(0x88,yue/10*16+yue); write_ds1302(0x8e,0x80); y++; if(y>=160){y=0;} }
if(menu==7) { if(k2==0) { delay(10); if(k2==0) { nian++; if(nian==100){nian=0;} while(!k2){display();} } } if(k3==0) { delay(10); if(k3==0) { nian--; if(nian==255){nian=99;} while(!k3){display();} } } write_ds1302(0x8e,0x00); write_ds1302(0x8c,nian/10*16+nian); write_ds1302(0x8e,0x80);
}
y++; if(y>=160){y=0;} }
if(k1==0) { menu=0; while(!k1){display();} }
正在阅读:
DS1302设计的可调万年历(实测正常,附有程序) - 图文03-10
移动通信的发展综述06-18
电子技大学1992-99年研究生入学考试试题与答案(组成原理)05-25
16一次函数的应用05-18
《经济地理学 第二版》课后思考题答案10-20
房地产投资分析,课程设计05-01
03专题三:国际组织的价值及案例评析10-20
短文摘抄之筑路人随遇而安的家国情怀12-02
- 多层物业服务方案
- (审判实务)习惯法与少数民族地区民间纠纷解决问题(孙 潋)
- 人教版新课标六年级下册语文全册教案
- 词语打卡
- photoshop实习报告
- 钢结构设计原理综合测试2
- 2014年期末练习题
- 高中数学中的逆向思维解题方法探讨
- 名师原创 全国通用2014-2015学年高二寒假作业 政治(一)Word版
- 北航《建筑结构检测鉴定与加固》在线作业三
- XX县卫生监督所工程建设项目可行性研究报告
- 小学四年级观察作文经典评语
- 浅谈110KV变电站电气一次设计-程泉焱(1)
- 安全员考试题库
- 国家电网公司变电运维管理规定(试行)
- 义务教育课程标准稿征求意见提纲
- 教学秘书面试技巧
- 钢结构工程施工组织设计
- 水利工程概论论文
- 09届九年级数学第四次模拟试卷
- 可调
- 实测
- 附有
- 万年历
- 正常
- 图文
- 程序
- DS1302
- 设计
- 高三生物二轮复习综合练习(9)(新人教版必修3)
- 移动应急指挥系统可作为便携设备随时随地架设
- 复变函数与积分变换模拟试题哈工大
- 名师串讲自考英语(二)(珍藏版)
- 结合中外园林史、展望现代园林发展方向
- 政治学原理网络核心课形成性考核
- 201X大学生村官工作总结范文-实用word文档(1页)
- 从董事会与股东会权力冲突看《公司法》的缺陷(1)
- 《电气测量》陈立周饭答案
- 盾构机操作与维修保养技术1 - 图文
- 行政审批专项效能监察工作方案
- 会计学指导书
- SYB创业培训导入题库2015.10
- 工程力学复习提纲(本)
- 大学英语四级作文模板大全
- 微量元素硒及其生物学功能
- XX县贯彻落实新农村建设动员会情况汇报
- 丽升网络阅卷系统阅卷工作流程
- 常用DN 管子规格
- GGD低压开关柜说明书