基于单片机和ds1302的万年历程序(其实只有时分秒)程序中缺少手动调节时间后再写入1302的程序,
#include<reg51.h> #define uint unsigned int #define uchar unsigned char sbit ACC0=ACC^0; sbit ACC7=ACC^7; sbit jiak=P2^3; sbit youyik=P2^2; sbit zuoyik=P2^1; sbit jiank=P2^0; sbit int1k=P3^3; sbit CLK=P3^5;//1302时钟信号线 sbit IO=P3^6;//1302的I/O数据线 sbit RST=P3^7;//1302的RST复位线 void InputByte(uchar);//输入1Byte uchar OutputByte(uchar);//输出1Byte void W1302(uchar,uchar); uchar R1302(uchar); uchar tab[6]; void display(); uchar a,c,i,b,m;//c表示中断次数a表示数码管移位次数 uint temp; uchar tab1[7]={0x40,0x59,0x11,0x11,0x02,0x06,0x06}; uchar code tab2[10]={0x88,0Xbe,0Xc4,0X94,0Xb2,0X91,0X81,0Xbc,0X80,0X90}; //延时1ms void delay(uint z) { uint x,y; for(x=z;x>0;x--) for(y=110;y>0;y--); } //往1302写入1Byte d为写入的数据入口参数 void InputByte(uchar date) { uchar i; ACC=date; for(i=8;i>0;i--) { IO=ACC0;//相当于汇编中的RRC CLK=1; CLK=0; ACC=ACC>>1; } } //从1302读取1Byte数据返回值ACC uchar OutputByte(void) { uchar i; for(i=8;i>0;i--) { ACC=ACC>>1; ACC7=IO; CLK=1; CLK=0; } return(ACC); } //往1302写入数据先写地址后写数据 ucADD ucDA是入口参数 void W1302(uchar addr,uchar date) { RST=0; CLK=0; RST=1; InputByte(addr);//写地址 InputByte(date);//写1Byte数据 CLK=1; RST=0; } //读取1302某地址的数据 先写地址 后读数据 ucAddr入口地址 ucDa是返回值 uchar R1302(uchar addr) { uchar date; RST=0; CLK=0; RST=1; InputByte(addr);//写地址 date=OutputByte();//读1Byte数据 CLK=1; RST=0; return(date); } void display() { uchar addr=0x80; if(int1k==0) //扫描p3 { delay(20); if(int1k==0) { while(!int1k); a=0; c++; if(c==2)c=0; } } if(c==1) { if(youyik==0) //扫描键盘 { delay(20); if(youyik==0) { while(!youyik); a++; if( a==6) a=0; } } if(zuoyik==0) { delay(20); if(zuoyik==0) { while(!zuoyik); if( a==0) a=6; a--; } } for(i=0;i<6;i++) //这个循环是个关键 { if( a==i) { SBUF=0xff; b=a; } else SBUF=tab2[tab[i]]; while(!TI); TI=0; } delay(100); if(b==a) { if(jiak==0) { delay(20); if(jiak==0) { while(!jiak); tab[b]++; if(tab[b]==10)tab[b]=0; } } if(jiank==0) { delay(20); if(jiank==0) { while(!jiank); if(tab[b]==0)tab[b]=10; tab[b]--; } } } } for(i=0;i<6;i++) { SBUF=tab2[tab[i]]; while(!TI); TI=0; } delay(50); } void main() { uchar miao,fen,shi; uchar Curtime[7]; uchar i1; uchar addr=0x80; W1302(0x8e,0x00);//控制命令字节WP=0 写操作 for(i1=0;i1<7;i1++) { W1302(addr,tab1[i1]);//秒分时日月星期年 addr+=2; } W1302(0x8e,0x80);//控制命令字节WP=1写保护 while(1) { if(c==1) display(); else { uchar i2; uchar addr=0x81; for(i2=0;i2<7;i2++) { Curtime[i2]=R1302(addr);//格式秒分时日月星期年 addr+=2; } miao=Curtime[0]; fen=Curtime[1]; shi=Curtime[2]; tab[5]=miao%16; tab[4]=miao/16; tab[3]=fen%16; tab[2]=fen/16; tab[1]=shi%16; tab[0]=shi/16; display(); } } }
答:我也正在写按键调整这一块,快结束了,再微调即可,效果比较理想,思路大体如下,与你即各位分享,也请高手指点。1.按键低电平触发外部中断0(INT0);2.INT0...详情>>
答:这是很正常的开机上电自检!没必要紧张!详情>>
问:我的惠普打印机安装WINDOWS打印机软件时搜索了HP Deskjet D240...
答:HP官方驱动下载,只要填上你打印机的型号就能找到合适的驱动。详情>>