我自带电路图,急要,私我。
一段定时关机的代码就行。
基础代码不复杂,很快的,快来快来
2条回答 默认 最新
关注 #include<reg51.h> #include <as.h> #include <sd.h> #include <math.h> #define uint unsigned int #define uchar unsigned char uchar miao,shi,fen,t,al,temp; int k; sbit SCLK = P1^4; /*实时时钟时钟线引脚 */ sbit IO = P1^5; /*实时时钟数据线引脚 */ sbit RST = P1^6; /*实时时钟复位线引脚 */ sbit ACC0=ACC^0; sbit ACC7=ACC^7; //校时按键与C51的引脚连接定义 sbit key1=P1^2; //设置键 sbit key2=P1^7; //加键 sbit dianji=P1^3; sbit xiadong=P3^2; void write_byte(uchar dat)//写一个字节 { ACC=dat; RST=1; for(al=8;al>0;al--) { IO=ACC0; SCLK=0; SCLK=1; ACC=ACC>>1; } } uchar read_byte()//读一个字节 { RST=1; for(al=8;al>0;al--) { ACC7=IO; SCLK=1; SCLK=0; ACC=ACC>>1; } return (ACC); } //---------------------------------------- void write_1302(uchar add,uchar dat)//向1302芯片写函数,指定写入地址,数据 { RST=0; SCLK=0; RST=1; write_byte(add); write_byte(dat); SCLK=1; RST=0; } uchar read_1302(uchar add)//从1302读数据函数,指定读取数据来源地址 { uchar temp; RST=0; SCLK=0; RST=1; write_byte(add); temp=read_byte(); SCLK=1; RST=0; return(temp); } uchar BCD_Decimal(uchar bcd)//BCD码转十进制函数,输入BCD,返回十进制 { uchar Decimal; Decimal=bcd>>4; return(Decimal=Decimal*10+(bcd&=0x0F)); } //-------------------------------------- void ds1302_init() //1302芯片初始化子函数(2010-01-07,12:00:00,week4) { RST=0; SCLK=0; write_1302(0x8e,0x00); //允许写,禁止写保护 //write_1302(0x80,0x00); //向DS1302内写秒寄存器80H写入初始秒数据00 //write_1302(0x82,0x00);//向DS1302内写分寄存器82H写入初始分数据00 //write_1302(0x84,0x12);//向DS1302内写小时寄存器84H写入初始小时数据12 //write_1302(0x8a,0x04);//向DS1302内写周寄存器8aH写入初始周数据4 //write_1302(0x86,0x07);//向DS1302内写日期寄存器86H写入初始日期数据07 //write_1302(0x88,0x01);//向DS1302内写月份寄存器88H写入初始月份数据01 //write_1302(0x8c,0x10);//向DS1302内写年份寄存器8cH写入初始年份数据10 write_1302(0x8e,0x80); //打开写保护 } void init() //定时器、计数器设置函数 { TMOD=0x11; //指定定时/计数器的工作方式为3 TH0=0; //定时器T0的高四位=0 TL0=0; //定时器T0的低四位=0 EA=1; //系统允许有开放的中断 ET0=1; //允许T0中断 TR0=1; //开启中断,启动定时器 } void main() { ds1302_init(); init(); //调用定时计数器的设置子函数 key1=1; key2=1; dianji=0; TR0=1; xiadong=1; while(1) //无限循环下面的语句: { if(key2==0) { delay(20); if(key2==0) { t=50; TR0=0; miao=0; temp=(miao)/10*16+(miao)%10;//秒数据写入DS1302 write_1302(0x8e,0x00); write_1302(0x80,0x80|temp);//miao write_1302(0x8e,0x80); fen++; if(fen==60){fen=0;} temp=(fen)/10*16+(fen)%10;//十进制转换成DS1302要求的DCB码 write_1302(0x8e,0x00);//允许写,禁止写保护 write_1302(0x82,temp);//向DS1302内写小时寄存器84H写入调整后的小时数据BCD码 write_1302(0x8e,0x80);//打开写保护 while(t>0) { t--; xianshi( shi,fen); } TR0=1; temp=(miao)/10*16+(miao)%10; write_1302(0x8e,0x00); write_1302(0x80,0x00|temp);//miao数据写入DS1302 write_1302(0x8e,0x80); } } TR0=1; if(key1==0) { delay(20); if(key1==0) { t=50; TR0=0; shi++; if(shi==24){shi=0;} temp=(shi)/10*16+(shi)%10;//十进制转换成DS1302要求的DCB码 write_1302(0x8e,0x00);//允许写,禁止写保护 write_1302(0x84,temp);//向DS1302内写小时寄存器84H写入调整后的小时数据BCD码 write_1302(0x8e,0x80);//打开写保护 miao=0; while(t>0) { t--; xianshi( shi,fen); } TR0=1; //开启中断,启动定时器 temp=(miao)/10*16+(miao)%10; write_1302(0x8e,0x00); write_1302(0x80,0x00|temp);//miao数据写入DS1302 write_1302(0x8e,0x80); } } k=shi*100+fen; if(xiadong==1) { if(0<=k && k<400){dianji=0;} if(400<=k && k<=530 ){dianji=1;} if(530<k && k<1830){dianji=0;} if(1830<=k && k<=2030){dianji=1;} if(2030<k && k<2400){dianji=0;} } if(xiadong==0) { if(0<=k && k<500){dianji=0;} if(500<=k && k<=630){dianji=1;} if(630<k && k<1700){dianji=0;} if(1700<=k && k<=2000){dianji=1;} if(2000<k && k<2400){dianji=0;} } xianshi(shi,fen); } //调用键盘扫描子函数 } void timer0() interrupt 1 //取得并显示日历和时间 { miao = BCD_Decimal( read_1302(0x81) ); fen = BCD_Decimal( read_1302(0x83) ); shi = BCD_Decimal( read_1302(0x85) ); } #ifndef _as_h_ #define _as_h_ #include<math.h> #include<sd.h> #include<wei.h> sbit dian=P2^7; char code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; char code tab[]={0x70,0xb0,0xd0,0xe0}; int numb[4]={0}; int a,b,c,d,js; int x; void xianshi( int ho, mi) { a=ho/10; b=ho%10; c=mi/10; d=mi%10; numb[0]=a; numb[1]=b; numb[2]=c; numb[3]=d; x=0; dian=0; while(x<4) { P0=tab[x]; js=30; while(js>0) { P2=table[ numb[x]]; if(x==1) { dian=1;} js--; } P2=0x00; x++; } } #endif #ifndef _sd_h_ #define _sd_h_ void delay(int z) { int x,j; for(j=0;j<z;j++) for(x=0;x<=50;x++); } #endif
解决 无用评论 打赏 举报
悬赏问题
- ¥15 基础的图像处理问题求解答
- ¥50 全国两定智慧医保接口开发相关业务文档,以及技术实现流程文档
- ¥15 idea做图书管理系统,要求如下
- ¥15 最短路径分配法——多路径分配
- ¥15 SQL server 2022安装程序(英语)无法卸载
- ¥15 关于#c++#的问题:把一个三位数的素数写在另一个三位数素数的后面
- ¥15 求一个nao机器人跳舞的程序
- ¥15 anaconda下载后spyder内无法正常运行
- ¥20 统计PDF文件指定词语的出现的页码
- ¥50 分析一个亿级消息接收处理策略的问题?