完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
#include
#include #define uchar unsigned char #define uint unsigned int //位选段选 #define we_set PORTA|=BIT(0)// #define we_clr PORTA&=~BIT(0)// #define du_set PORTA|=BIT(1)// #define du_clr PORTA&=~BIT(1)// //1302端口定义 #define clk_set PORTB|=BIT(0) #define clk_clr PORTB&=~BIT(0) #define clk_OUT DDRB|=BIT(0)// #define io_set PORTB|=BIT(1)// #define io_clr PORTB&=~BIT(1)// #define io_OUT DDRB|=BIT(1)// #define io_IN DDRB&=~BIT(1)// #define io_r PINB&BIT(1)// #define rst_set PORTB|=BIT(2)// #define rst_clr PORTB&=~BIT(2)// #define rst_OUT DDRB|=BIT(2)// void write_ds1302_byte(uchar dat);//单字节写 void write_ds1302(uchar add,uchar dat);//多字节写 uchar read_ds1302(uchar add); uchar const table_we[]={0xDF,0xef,0xf7,0xfb,0xfd,0xfe}; uchar const table_du[]={ 0x3f,0x06,0x5b,0x4f, 0x66,0x6d,0x7d,0x07, 0x7f,0x6f}; uchar disp[8]; uchar i; uchar time_date[7]={12,1,11,23,12,02,02};//年周月日时分秒 uchar write_add[7]={0x8c,0x8a,0x88,0x86,0x84,0x82,0x80};//写年月日地址 uchar read_add[7]={0x8d,0x8b,0x89,0x87,0x85,0x83,0x81};//读比写多1 void set_rtc(void);//对时间 void read_rtc(void);//读时间 void time_pros(void);//处理函数 void dispiay(void); //显示函数 void delay(uint xms)//延时函数 { uint n,m; for(n=xms;n>0;n--) for(m=124;m>0;m--); } void duanko(void)//端口初始化 { DDRA=0XFF; PORTA=0XFF; DDRC=0XFF; PORTC=0Xff; } void write_ds1302_byte(uchar dat)//单字节写 { io_OUT; for(i=0;i<8;i++) { clk_clr; if(dat&0x01) io_set; else io_clr; clk_set; clk_clr; dat=dat>>1; } } void write_ds1302(uchar add,uchar dat)//写多个字节 { rst_clr; clk_clr; rst_set; write_ds1302_byte(add);//写地址 write_ds1302_byte(dat);//写数据 rst_clr; //io_set; //clk_set; } uchar read_ds1302(uchar add)//读地址 { uchar value; rst_clr; clk_clr; rst_set; write_ds1302_byte(add);//写地址 io_IN; for(i=0;i<8;i++) { value=value>>1; if(io_r) value=value|0x80; clk_set; clk_clr; } rst_clr; return value; } void set_rtc(void)//对时间 { uchar k; for(i=0;i<7;i++) { k=time_date[i]/10; time_date[i]=time_date[i]%10; time_date[i]=time_date[i]+k*16; } write_ds1302(0x8e,0x00);//去除写保护 for(i=0;i<7;i++) { write_ds1302(write_add[i],time_date[i]); } write_ds1302(0x8e,0x80);//加写保护 } void read_rtc(void)//读出对的时间 { for(i=0;i<7;i++) { time_date[i]=read_ds1302(read_add[i]); } } void time_pros(void)//处理 { disp[0]=time_date[6]%16; disp[1]=time_date[6]/16; disp[2]=time_date[5]%16; disp[3]=time_date[5]/16; disp[4]=time_date[4]%16; disp[5]=time_date[4]/16; } void display(void)//显示函数 { uchar j; for(j=0;j<6;j++) { we_set; PORTC=table_we[j]; we_clr; du_set; PORTC=table_du[disp[j]]; du_clr; delay(5); } } void main(void) { duanko(); clk_OUT; rst_OUT; set_rtc(); while(1) { read_rtc();//读出对的时间 time_pros();//处理 for(i=0;i<40;i++) { display();//显示函数 } } } |
|
相关推荐
1 个讨论
|
|
你介个问题 大家都难得去看代码额、一步一步测咯、用串口打印出来就看的到什么问题了
|
|
|
|
|
|
只有小组成员才能发言,加入小组>>
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-24 07:45 , Processed in 0.548645 second(s), Total 76, Slave 56 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号