历史上的今天
返回首页

历史上的今天

今天是:2025年06月25日(星期三)

正在发生

2018年06月25日 | 51单片机DS1302时钟芯片简单程序

2018-06-25 来源:eefocus

 #include
 #include
 #define uchar unsigned char
 #define uint unsigned int
data_7seg[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,}; 
uchar hour,min,sec; 
sbit shi=P1^0; 
sbit fen=P1^1; 
sbit miao=P1^2; 
sbit rst=P1^4; 
sbit sck=P1^5; 
sbit io=P1^6;
sbit fm=P1^7;
/*函数声明:*/ 
  void write_ds1302_byte(uchar dat); 
  void write_ds1302(uchar add,uchar dat); 
  uchar read_ds1302(uchar add); 
  void read_rtc(); 
  void set_rtc(); 
  void display(); 
  void delay(int n); 
  void show(); 
  void fmzz();  
   /*DS1302单字节写入:*/  
 void write_ds1302_byte(uchar dat) 
   { uchar i;
  //发送地址
     for(i=0;i<8;i++) //循环8次移位
{  sck=0;  
io=dat&0x01;   //每次传输低字节
dat=dat>>1;    //右移一位
sck=1; 

}   
/*DS1302多字节写入:*/ 
 void write_ds1302(uchar add,uchar dat) 
 {  
 rst=0;//CE引脚为低,数据传送中止
 _nop_(); 
 sck=0;    //清零时钟总线 
 _nop_(); 
 rst=1;   //CE引脚为高,逻辑控制有效
 _nop_();  
 write_ds1302_byte(add); 
 write_ds1302_byte(dat); 
 rst=0;
 _nop_(); 
 io=1; 
 sck=1; 
 } 
 /*DS1302读取:*/  
 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 set_rtc() 
{     
if (shi==0) 
delay(100);    
if (shi==0)    
{    
hour=(hour>>4)*10+(hour&0x0f);   
hour++;    
if (hour==24) 
hour=0;    
hour=((hour/10)<<4)+(hour%10);   
write_ds1302(0x84,hour);    
}      
if (fen==0) 
delay(100);    
if (fen==0)    
{    
min=(min>>4)*10+(min&0x0f);   
min++;    
if (min==60) 
min=0;    
min=((min/10)<<4)+(min%10);   
write_ds1302(0x82,min);    
}      
if (miao==0) 
delay(100);    
if (miao==0)    
{
sec=(sec>>4)*10+(sec&0x0f);   
sec++;    
if (sec==60) 
sec=0;    
sec=((sec/10)<<4)+(sec%10);   
write_ds1302(0x80,sec);    

}   
/*读取时间:*/ 
void read_rtc() 
{     
hour=read_ds1302(0x85);    
min=read_ds1302(0x83);    
sec=read_ds1302(0x81); 
}   
/*显示时间:*/ 
void display() 
{      
unsigned int a=1;  
P2=0x01;P0=data_7seg[hour/16];
delay(a); 
P2=0x02;P0=data_7seg[hour%16];
delay(a); 
P2=0x04;P0=data_7seg[min/16];
delay(a); 
P2=0x08;P0=data_7seg[min%16];
delay(a); 
P2=0x10;P0=data_7seg[sec/16];
delay(a); 
P2=0x20;P0=data_7seg[sec%16];
delay(a);         
}   
/*蜂鸣:*/  

void fmzz()   
{     
uint i;      
for (i=0;i<100;i++)      
{         
fm=!fm;        
delay(2); 
}
}
/*延时程序:*/ 
void delay(int n) 
{  unsigned int i,j; 
for(i=0;i{   
for(j=0;j<121;j++)  
{;} 

}
 /*显示学号:*/ 
 void show() 
 {    
 unsigned int m; 
 for(m=0;m<20;m++) 
 {  uint a=10;  
 P2=0x01;P0=data_7seg[7];delay(a); 
 P2=0x02;P0=data_7seg[2];delay(a); 
 P2=0x04;P0=data_7seg[4];delay(a); 
 P2=0x08;P0=data_7seg[1];delay(a); 
 P2=0x10;P0=data_7seg[1];delay(a); 
 P2=0x20;P0=data_7seg[8];delay(a); 
 }  
 }
  /*主程序:*/ 
  void main() 
  {      
  show();  
  write_ds1302(0x84,0x12); //初始化 
  write_ds1302(0x82,0x00); 
  write_ds1302(0x80,0x00); //秒寄存器(81h、80h)的位7  当该位置为0时,时钟开始运行。
  while (1) 
  {   set_rtc();  
read_rtc();  
display();  
if(min==0)
{ if(sec==0)      
{
fmzz();
}  

}
 } 

推荐阅读

史海拾趣

Data Translation Inc公司的发展小趣事

随着公司业务的不断发展,Data Translation开始寻求全球扩张的机会。公司通过设立海外分支机构、与当地企业合作等方式,成功将产品推向全球市场。同时,公司还加大了品牌建设的力度,通过参加国际展会、发布新产品等方式提高品牌知名度。这些举措不仅为公司带来了更多的客户和合作伙伴,还进一步巩固了其在全球数据采集和处理领域的领先地位。

EMC Technology RF Labs公司的发展小趣事

随着产品质量的不断提升和技术的不断创新,RF Labs开始积极拓展市场。他们不仅在国内市场上取得了良好的销售业绩,还成功进入了国际市场。RF Labs与多家国际知名电子企业建立了合作关系,共同研发新产品、开拓新市场。这些合作不仅为RF Labs带来了更多的商业机会,也进一步提升了公司的国际影响力。

安碁科技(AKER)公司的发展小趣事

品质是企业的生命线。安碁科技自成立以来,一直注重品质管理和技术创新。2000年,公司引进了全自动化制程设备,正式生产SMD产品,并通过了ISO9002认证。此后,安碁科技陆续通过了多项国际认证,如TL-9000、TS16949等,证明了其在品质管理方面的卓越表现。同时,公司也不断投入研发资源,推动技术创新和产品升级,以满足市场不断变化的需求。

E-tec Interconnect Ltd公司的发展小趣事

E-tec Interconnect Ltd成立于XX世纪初,起初是一家专注于电子连接器设计与制造的小型公司。在创始团队的带领下,E-tec注重基础技术的积累,投入大量资源进行研发和创新。他们成功开发了一系列高精度、高可靠性的连接器产品,为公司的后续发展奠定了坚实的基础。

GE Industrial Solutions公司的发展小趣事
使用高压测试仪测量输入输出之间的隔离电压,确保满足安全要求。
FINTEK公司的发展小趣事

在快速发展的同时,FINTEK公司始终不忘履行社会责任和推动可持续发展。公司积极参与环保公益事业,致力于减少生产过程中的能源消耗和废物排放。同时,FINTEK还加大了对清洁能源和可再生能源技术的研发投入,以推动电子行业的绿色转型。此外,FINTEK还积极履行纳税义务,为社会创造更多的就业机会和税收贡献。这些举措不仅彰显了FINTEK作为行业领导者的责任感,也为公司的长远发展奠定了良好的社会基础。

问答坊 | AI 解惑

ccs有没有函数感应功能,就像VC那样?

ccs有没有函数感应功能,就像VC那样?…

查看全部问答>

WinCE+PXA270 DMA传输问题!

我用的是WinCE5.0的系统,使用的BVDMAIN的bsp。 在driver里面有一个DMA文件夹,里面有一些使用DMA时相关的函数。还有一个例程代码。 但是我用例程代码调试,总是不成功。 请教一下是什么原因,谢谢 代码如下: #define FPGA_DMA_BUFFER_SI ...…

查看全部问答>

CD4098消抖电路

现在需要用cd4098——双单稳态触发器搭建一个键盘消抖电路,以前一直是软件消抖的,这个芯片不太会用,望高手赐教!…

查看全部问答>

关于WINCE MEDIPLAYER的问题--在线等

本人第1次用CE。。。。 刚装好platform builder时。马上Build了一个NK。BIn 放在目标机上可以好好的运行。目标机上的media player可以打开windows media server编码出来的WMV9的MMS流。 后来我更改了一些东西。。。再BUILd就打不能MMS流了。。连 ...…

查看全部问答>

IO口中断的奇怪问题

本人用F412做仪表,设置一个按键P16来关机,关机后进入LPM4,同时设定IO口中断,结果发现进入休眠以后P1IE莫名其妙地被清零,硬件仿真的时候读出来的P1IE为0,从而导致不能再次开机,修改内存把它改为0x40(BIT6)后才能进入中断唤醒,再次进入休眠 ...…

查看全部问答>

eZ430-RF2500体验之前奏

  今天上午刚刚收到eZ430-RF2500,上传几张照片,作为一个纪念,另外谢谢寄给我东西的那位同学的精心包装,什么话都不说,先上图,呵呵…

查看全部问答>

2011年全国电子设计大赛基本仪器和主要元器件清单

本帖最后由 paulhyde 于 2014-9-15 09:47 编辑 、基本仪器清单 20MHz普通示波器(双通道,外触发输入,有X轴输入) 60MHz双通道数字示波器 低频信号发生器(1Hz~1MHz) 标准高频信号发生器(1MHz~30MHz,可输出1mV小信号) 函数发生器(10 M ...…

查看全部问答>

为什么写了一个简单的软件延时程序无法调试

我在书上抄的一段程序 #include \"io430.h\" #include<msp430x44x.h>#define Const 100vodi SoftDelay(int Factor){int i,j;for(i=0;i<Factor;i++)    for(j=0;j<Const;j++); }void main(void){ _NOP();  SoftDelay ...…

查看全部问答>

msp430LaunchPad风火轮触摸板手册

msp430LaunchPad风火轮触摸板手册   …

查看全部问答>

对比分析几种LED保护电路设计方案心得

白光LED属于电压敏感型的器件,在实际工作中是以20mA的电流为上限,但往往会由于在使用中的各种原因而造成电流增大,如果不采取保护措施,这种增大的电流超过一定的时间和幅度后LED就会损坏。   造成LED损坏的原因主要有:    ...…

查看全部问答>