作息时间为主多功能设计.doc_第1页
作息时间为主多功能设计.doc_第2页
作息时间为主多功能设计.doc_第3页
作息时间为主多功能设计.doc_第4页
作息时间为主多功能设计.doc_第5页
已阅读5页,还剩8页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

#include /包含单片机寄存器的头文件#include /包含_nop_()函数定义的头文件#define uchar unsigned char#define uint unsigned int /宏定义/*以下是DS1302芯片的操作程序*/uchar code digit10=0123456789; /定义字符数组显示数字sbit RST=P01; /位定义1302芯片的接口,复位端口定义sbit DATA=P02; /位定义1302芯片的接口,数据输出端定义sbit SCLK=P00; /位定义1302芯片的接口,时钟输出端口定义sbit LED=P25;sbit dula=P26; /数码管段选锁存端sbit wela=P27; /数码管位选锁存端sbit RS=P35;sbit RW=P36;sbit DD=P37;sbit E=P34;sbit BF=P07; /忙碌标志位,将BF位定义sbit fm=P23;char k=0,q=0,w=0,e=0,r=12,t=11,y=5,u=10;uchar code table1=0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f,0xff; /LED字段uchar code table=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0xff;uchar ge,shi,bai,qian;uint tt;void display(uchar,uchar,uchar,uchar,uchar,uchar); /函数声明void delay(uint);/*数码管显示模块函数*/void displaymain() uint ttt; TMOD=0x10;/设置定时器1为工作方式1TH1=(65536-10000)/256;TL1=(65536-10000)%256;EA=1;/开总中断 yET1=1;/开定时器1中断TR1=1;/启动定时器1for(ttt=5000;ttt0;ttt-)display(0,0,qian,bai,shi,ge); TR1=0; void exter0() interrupt 3 / 定时器1中断TH1=(65536-10000)/256;TL1=(65536-10000)%256;tt+;if(tt=60000)tt=0;qian=tt/1000;bai=tt/100%10;shi=tt%10%10;ge=tt%10;void display(uchar one,uchar two,uchar three,uchar four,uchar five,uchar six) dula=1;P0=tableone; /送段数据dula=0;P0=0xff;/送位数据前关闭所有显示,防止打开位选锁存后段选数据通过位选锁存器wela=1;P0=0xfe;wela=0;delay(1);dula=1;P0=tabletwo;dula=0;P0=0xff;wela=1;P0=0xfd;wela=0;delay(1);dula=1;P0=tablethree;dula=0;P0=0xff;wela=1;P0=0xfb;wela=0;delay(1); dula=1;P0=tablefour; /送段数据dula=0;P0=0xff;/送位数据前关闭所有显示,防止打开位选锁存后段选数据通过位选锁存器wela=1;P0=0xf7;wela=0;delay(1);dula=1;P0=tablefive;dula=0;P0=0xff;wela=1;P0=0xef;wela=0;delay(1);dula=1;P0=tablesix;dula=0;P0=0xff;wela=1;P0=0xdf;wela=0;delay(1);/* */void delay(uint z) /延时子函数uint x,y;for(x=z;x0;x-)for(y=110;y0;y-); /*蜂鸣器*/void SPEAKER() /蜂鸣器 uchar x;for(x=10;x0;x-)delay(100);fm=0;delay(100);fm=1; /*流水灯显示*/void LLED() /流水灯函数 闪烁10S uchar x,n1; for(x=32;x0;x-) LED=1; P1=table1n1; delay(200); n1=n1+1; if(n1=8) n1=0; P1=table18; /*函数功能:延时程序*/ void delaynus(uchar n) unsigned char i; for(i=0;in;i+) ;/*函数功能:向1302写一个字节数据*/ void Write1302(uchar dat) uchar i; SCLK=0; /拉低SCLK,为脉冲上升沿写入数据做好准备 delaynus(2); /稍微等待,使硬件做好准备 for(i=0;i1; /将dat的各数据位右移1位,准备写入下一个数据位 /*函数功能:根据命令字,向1302写一个字节数据入口参数:Cmd,储存命令字;dat*/ void WriteSet1302(uchar Cmd,uchar dat) RST=0; /禁止数据传递 SCLK=0; /确保写数居前SCLK被拉低 RST=1; /启动数据传输 delaynus(2); /稍微等待,使硬件做好准备 Write1302(Cmd); /写入命令字 Write1302(dat); /写数据 SCLK=1; /将时钟电平置于已知状态 RST=0; /禁止数据传递 /*函数功能:从1302读一个字节数据*/ uchar Read1302(void) uchar i,dat;delaynus(2); /稍微等待,使硬件做好准备for(i=0;i=1; /将dat的各数据位右移1位,因为先读出的是字节的最低位if(DATA=1) /如果读出的数据是1 dat|=0x80; /将1取出,写在dat的最高位 SCLK=1; /将SCLK置于高电平,为下降沿读出 delaynus(2); /稍微等待 SCLK=0; /拉低SCLK,形成脉冲下降沿 delaynus(2); /稍微等待 return dat; /将读出的数据返回 /*函数功能:根据命令字,从1302读取一个字节数据入口参数:Cmd*/ uchar ReadSet1302(uchar Cmd) unsigned char dat; RST=0; /拉低RST SCLK=0; /确保写数居前SCLK被拉低 RST=1; /启动数据传输 Write1302(Cmd); /写入命令字 dat=Read1302(); /读出数据 SCLK=1; /将时钟电平置于已知状态 RST=0; /禁止数据传递 return dat; /将读出的数据返回/*函数功能: 1302进行初始化设置*/ void Init_DS1302(void) WriteSet1302(0x8E,0x00); /根据写状态寄存器命令字,写入不保护指令 WriteSet1302(0x80,(50/10)4|(0%10); /根据写秒寄存器命令字,写入秒的初始值 WriteSet1302(0x82,(50/10)4|(9%10); /根据写分寄存器命令字,写入分的初始值WriteSet1302(0x84,(0/10)4|(5%10); /根据写小时寄存器命令字,写入小时的初始值WriteSet1302(0x86,(10/10)4|(11%10); /根据写日寄存器命令字,写入日的初始值WriteSet1302(0x88,(0/10)4|(15%10); /根据写月寄存器命令字,写入月的初始值WriteSet1302(0x8a,(5/10)4|(5%10); /根据写星期寄存器命令字,写入星期的初始值WriteSet1302(0x8c,(10/10)4|(12%10); /根据写年寄存器命令字,写入年的初始值/*/*函数功能:延时1ms(3j+2)*i=(333+2)10=1010(微秒),可以认为是1毫秒*/void delay1ms() unsigned char i,j; for(i=0;i10;i+) for(j=0;j33;j+) ; /*函数功能:延时若干毫秒入口参数:n*/ void delaynms(uchar n) unsigned char i;for(i=0;i4)*10 + (ReadValue&0x0F);/将读出数据转化 DisplaySecond(second); /显示秒 ReadValue = ReadSet1302(0x83); /从分寄存器读 minute=(ReadValue&0x70)4)*10 + (ReadValue&0x0F); /将读出数据转化 DisplayMinute(minute); /显示分 ReadValue = ReadSet1302(0x85); /从分寄存器读 hour=(ReadValue&0x70)4)*10 + (ReadValue&0x0F); /将读出数据转化 DisplayHour(hour); /显示小时 ReadValue = ReadSet1302(0x87); /从分寄存器读 day=(ReadValue&0x70)4)*10 + (ReadValue&0x0F); /将读出数据转化 DisplayDay(day); /显示日 ReadValue = ReadSet1302(0x89); /从分寄存器读 month=(ReadValue&0x70)4)*10 + (ReadValue&0x0F); /将读出数据转化 DisplayMonth(month); /显示月 ReadValue = ReadSet1302(0x8b); /从分寄存器读 week=(ReadValue&0x70)4)*10 + (ReadValue&0x0F); /将读出数据转化 DisplayWeek(week); /显示星期 ReadValue = ReadSet13

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论