DS1302设计的可调万年历(实测正常,附有程序)

2018-12-29 22:41

DS1302设计的可调万年历

(本制作所用数码管全为共阳数码管)

我刚开始想做万年历的时候是上网找别人的程序,可是发现找了很多都不理想,要不就没日历和时间一起显示,要不就不能调时间的,后来我研究了两天,自己终于把程序编了出来。好了,废话我就不多说,本制作我已经把实物做了出来,保证没问题!下面附有仿真图和实物图。

拍摄的效果不够好,但实物是不错的,本人实物中用三级管代替了仿真图的74HC04非门,用哪个都是可以的……

请注意:本程序分两个C文件的,如果不会编,可以Q我:1107588997 我直接发程序过去给你…… 软件源程序:(初始化程序只在开始时用一次,之后要把它屏蔽掉)

#include #include #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;


DS1302设计的可调万年历(实测正常,附有程序).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:索克曼UPS应用 - 图文

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: