首页 > 编程知识 正文

ds1302时钟芯片与51单片机,单片机芯片有哪些型号

时间:2023-05-04 09:57:20 阅读:125017 作者:2370

ds1302实际上很简单,工作时先写8位控制命令,然后接收和发送。

我想写寄存器是这样的。 写地址,然后写命令。 地址是从0x80-0x90开始。 每个都是寄存器,里面有8位。

前两个是地址,后两个是每个地址中的具体情况。 例如初始化。 这样写

void Ds1302Init () {uchar n; ds 1302写入(0X00,0X00 ); //禁止写保护意味着关闭写保护功能for (n=0; n7; (n ) /写入7字节时钟信号)分分秒时日月周年(ds1302write ) write_RTC_addr[n],TIME[n] ); } ds 1302写入(0x80,0x80 ); //打开写保护功能}写地址后再写数据

# include ' ds 1302.h ' # include ' UART.h ' void delay 1s (void ) /误差0us ) unsignedchara,b,c; for(c=167; c0; c----for(b=171; b0; b--) for(a=16; a0; a----; _nop_ (); //if Keil,requireuseintrins.h }/* uchardisplaydata [8]; uchar code smgduan[10]={0x3f,0x 06,0x5b,0x4f,0x 66,0x6d,0x 07,0x7f,0x6f}; voiddelay(ucharI ) {while(I--}; }void datapros () { ds1302ReadTime ); 显示数据[0]=SMG Duan [ time [2]/16 ]; //时display data [1]=SMG Duan [ time [2]0x0f ]; 显示数据[2]=0x 40; 显示数据[3]=SMG Duan [ time [1]/16 ]; //display data [4]=SMG Duan [ time [1]0x0f ]; 显示数据[5]=0x 40; 显示数据[6]=SMG Duan [ time [0]/16 ]; //秒显示数据[7]=SMG Duan [ time [0]0x0f ]; }void DigDisplay () {uchar i; for(I=0; i8; I ) ) P1=~(0x01I ); P0=显示数据[ I ]; //发送数据的delay(100 ); //按一定时间间隔扫描P0=0x00 //消隐}}*/void main () {uchar i; uart_init (; //ds1302Init (; wile(1) { ds 1302读时间}; for(I=0; i7; I ) {UART_send_byte(time[I]; }UART_send_byte(0x99 ); URT_send_byte(0x99 ); delay1s (; delay1s (; }//ds1302Init (; /*while(1) {数据pros ); //数据处理函数DigDisplay (; //数码管显示函数} */}/* 234518010220999254518010102209920992001022099294518010220992099209920991801010220999993 include ' ds 1302.h ' uchar code read _ RTC _ addr [7]={0x 81,0x 83,0x 85,0x 87,0x 89,0x8b,0x8d}; uchar codewrite _ RTC _ addr [7]={0x 80,0x 82,0x 84,0x 86,0x 88,0x8a,0x8c}; //---DS1302时钟初始化2016年5月7日星期六12时00分00秒。 ------------存储顺序为秒时分日月周年,存储格式为BCD码---//uchar time [7]={0x 21,0x 45,0x 18,0x 01,0x 17,0x 02,0x 20 } voidds1302write(ucharadd,uchar val ) {uchar i; CE=0; _nop_ (); SCLK=0; _nop_ (); CE=1; _nop_ (); for(I=0; i8; I ) {DATA=add0x01; _nop_ (); SCLK=1; _nop_ (); SCLK=0; _nop_ (); add=1; (for ) I=0; i8; I ) {DATA=val0x01; _nop_ (); SCLK=1; _nop_ (); SCLK=0; _nop_ (); val=1; }CE=0; _nop_ (); }uchards1302read(ucharadd ) {uchar i,dat=0,dat1=0; CE=0; _nop_ (); SCLK=0; _nop_ (); CE=1; _nop_ (); for(I=0; i8; I ) {DATA=add0x01; _nop_ (); SCLK=1; _nop_ (); SCLK=0; _nop_ (); add=1; (for ) I=0; i8; I ) ) {dat1=DATA; dat=(|(dat17 )|) dat1; _nop_ (); SCLK=1; _nop_ (); SCLK=0; _nop_ (); }CE=0; _nop_ (); SCLK=1; _nop_ (); DATA=0; _nop_ (); DATA=1; _nop_ (); 返回日期; }void ds1302Init () {uchar i; ds 1302写入(0x00,0x00 ); for(I=0; i7; I ) ds1302write(write_RTC_addr[I],TIME[i]; } ds 1302写入(0x80,0x80 ); }void ds1302ReadTime () {uchar i; for(I=0; i7; I ) ) time [ I ]=ds 1302 read (read _ RTC _ addr [ I ]; } # ifndef _ ds 1302 _ h _ # define _ _ ds 1302 _ h _ # includere g51.h # includeintrins.htypedefunsignedchange typedef sbit CE=P3^5; sbit SCLK=P3^6; sbit DATA=P3^4; 扩展用户时间[7]; //添加全局变量void ds 1302读取时间(; void ds1302Init (; #endif

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。