完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
#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; ***it shi=P1^0; ***it fen=P1^1; ***it miao=P1^2; ***it rst=P1^4; ***it sck=P1^5; ***it io=P1^6; ***it 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(); } } } } |
|
相关推荐
4 个讨论
|
|
感谢分享经验。。
|
|
|
|
|
|
没事,大家一起学习
|
|
|
|
|
|
298 浏览 1 评论
《DNESP32S3使用指南-IDF版_V1.6》第二十六章 INFRARED_RECEPTION实验
309 浏览 0 评论
826 浏览 0 评论
求助一下关于51系列单片机的Timer0的计时问题,TH0、TL0+1的时间是怎么算的?
1911 浏览 2 评论
【RA-Eco-RA4E2-64PIN-V1.0开发板试用】开箱+Keil环境搭建+点灯+点亮OLED
1427 浏览 0 评论
【youyeetoo X1 windows 开发板体验】少儿AI智能STEAM积木平台
12031 浏览 31 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-25 00:37 , Processed in 0.464242 second(s), Total 40, Slave 34 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号