DS1302数码管显示程序.doc_第1页
DS1302数码管显示程序.doc_第2页
DS1302数码管显示程序.doc_第3页
DS1302数码管显示程序.doc_第4页
DS1302数码管显示程序.doc_第5页
已阅读5页,还剩3页未读 继续免费阅读

下载本文档

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

文档简介

/*/ huaqinMCU DS1302 实验程序 数码管显示 时钟设置说明/ 8键为时钟设置、时分切换、保存 0键为加 4键为减/*/#include #define uchar unsigned char #define uint unsigned int/=以下IO定义请根据您硬件的连接修改=sbit T_RST=P35;/ds1302-5sbit T_IO=P34;/ds1302-6sbit T_CLK=P36;/ds1302-7sbit ACC0=ACC0;sbit ACC7=ACC7;/累加器A 51单片机原理中有介绍sbit up=P31;sbit down=P32;sbit set=P30;uchar a,b,clock_ss,clock_sg,clock_fs,clock_fg,clock_ms,clock_mg;int hour,mie,sei;uchar clk_time3; /秒,分,时寄存器初始值code uchar ledmap=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40;/数码管段码 /*DS1302:写入操作(上升沿)*/ void write_byte(uchar da) uchar i; ACC=da; for(i=8;i0;i-) T_IO=ACC0; T_CLK=0; T_CLK=1; ACC=ACC1; /*DS1302:读取操作(下降沿)*/uchar read_byte(void) uchar i; for(i=0;i1; T_CLK = 1; T_CLK = 0; ACC7 = T_IO; return(ACC);/*DS1302:写入数据(先送地址,再写数据)*/ void write_1302(uchar addr,uchar da) T_RST=0; /停止工作 T_CLK=0; T_RST=1; /重新工作 write_byte(addr); /写入地址 write_byte(da); T_RST=0; T_CLK=1;/*DS1302:读取数据(先送地址,再读数据)*/uchar read_1302(uchar addr) uchar temp; T_RST=0; /停止工作 T_CLK=0; T_RST=1; /重新工作 write_byte(addr); /写入地址 temp=read_byte(); T_RST=0; T_CLK=1; /停止工作 return(temp);/*延时程序=a*1ms*/void delay(uchar a) uchar i; while(a- !=0) / led_disp(); for(i=0;i125;i+); /*显示程序*/* DS1302秒,分,时寄存器是BCD码形式: 用16求商和余进行高4位和低4位分离 */*/ void led_disp() uchar cant1,cant2; if(b=0) cant1=0;cant2=0;clock_ms=clk_time0/ 16; clock_mg=clk_time0%16;clock_fs=clk_time1/ 16; clock_fg=clk_time1%16;mie=clock_fs*10+ clock_fg;clock_ss=clk_time2/ 16; clock_sg=clk_time2%16;/BCD*to*10hour=clock_ss*10+ clock_sg; /用16求商和余进行高4位和低4位分离 if(b=1) cant1+; cant2=0;clock_ss=hour/ 10; clock_sg=hour%10;clock_fs=mie/ 10; clock_fg=mie%10;clock_ms=sei/10; clock_mg=sei%10; if(b=2) cant1=0; cant2+;clock_ss=hour/ 10; clock_sg=hour%10;clock_fs=mie/ 10; clock_fg=mie%10;clock_ms=sei/10; clock_mg=sei%10; if(cant1=3) P2=0;P0=ledmapclock_ss;delay(1);P0=0X00;P2=1;P0=ledmapclock_sg;/时个位delay(1);P0=0X00;if(cant1=5) cant1=0; P2=2;P0=ledmap10;/显示-数组里的 0x40delay(1);P0=0X00; if(cant2=3) P2=3;P0=ledmapclock_fs;/分十位delay(1); P0=0X00;P2=4;P0=ledmapclock_fg;/时个位delay(1);P0=0X00; if(cant2=5) cant2=0; P2=5;P0=ledmap10;/显示-数组里的 0x40delay(1);P0=0X00; P2=6;P0=ledmapclock_ms;/秒十位delay(1); P0=0X00;P2=7;P0=ledmapclock_mg;delay(1);P0=0X00; /*按键延时程序=a*1ms*/void delayAJ(uchar a) uchar i; while(a-) for(i=0;i=24) hour=0;delayAJ(10);if(b=2) mie+;if(mie=60) mie=0;delayAJ(10); /以上时钟+设定 if(down=0) delayAJ(5);/消抖 if(down=0) delayAJ(5); if(b=1) hour-; if(hour0) hour=23; delayAJ(10); if(b=2) mie-; if(mie0) mie=59; delayAJ(10); /以上时钟-设定 /*以下是转BCD码的程序 DS1302认BCD码 clock_s1=hour/10;clock_s2=hour%10;clock_s1=clock_s1&0xff;clock_s2=clock_s2&0xff;clock_s1=4;clock_s1=clock_s1|clock_s2;/ 10to16clock_f1=mie/10;clock_f2=mie%10;clock_f1=clock_f1&0xff; /全1出1 与运算clock_f2=clock_f2&0xff;clock_f1=4;clock_f1=clock_f1|clock_f2;/ 10to16/*转BCD码的程序 DS1302认BCD码 if(b=3) b=0; write_1302(0x8e,0x00); /WP=0 写操作write_1302(0x80,0x01);/0x80是写秒数据此处写进01秒write_1302(0x82,clock_f1);/0x82是写分数据write_1302(0x84,clock_s1);/0x84是写时数据write_1302(0x8e,0x80); /WP=1 写保护 delay(255); /*主程序*/void main(void) uc

温馨提示

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

评论

0/150

提交评论