哥哥度度 哥哥度度
技术宅。
关注数: 38 粉丝数: 35 发帖数: 2,201 关注贴吧数: 46
12行之前少分号?请大家给指点下。 /*2012-06-01凌晨。重新写的时钟程序*/ #include<reg52.h> #include<intrins.h> sbit sclk=P1^1; sbit sda=P1^2; sbit ce=P1^3; #define uchar unsigned char #define uint unsigned int uchar read_add[]={0x81,0x83,0x85,0x87,0x89,0x8b,0x8d}; //读取时间的地址.分别为:秒分时日月周年// uchar write_add[]={0x80,0x82,0x84,0x86,0x88,0x8a,0x8c}; //设置时间的地址// ucahr set_time[7]; //直接设置时间的数据// uchar time[]={20,17,5,1,6,4,12}; //2012-06-01,05:17:20// void delay_10us(void) { _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_();} void write_byte(uchar add,uchar dat)//数据在时钟上升沿输入// { uchar i; sclk=0; ce=0; ce=1;//制造开始// for(i=1;i<8;i++) { sclk=0; sda=add&0x01;//从数据的最低位开始输入// sclk=1;//制造上升沿// add>>=1;//右移七次// } for(i=1;i<8;i++) { sclk=0; sda=dat&0x01; sclk=1; dat>>=1; } sclk=0; ce=0;//停止传输// } uchar read_byte(uchar add) { uchar value; sclk=0; ce=0; ce=1; for(i=1;i<8;i++) { sclk=0; sda=add|0x01; sclk=1; add>>1;//右移七次// } //地址传送完成后,时钟任高// for(i=0;i<8;i++)//读取数据时,数据在时钟下降沿输出// { sclk=1; sclk=0; if(sda) value&=0x80;//数据从最低位开始输出,此语句是将数据存至最高位,此处要注意与地址传送区别// value>>=1; } sclk=0; ce=0; return(value);} void set_rtc(){ uchar temp; write_byte(0x8e,0x0);//关闭写保护// for(i=0;i<;i++) { temp=time[i]/10;//十进制的时间转换为1602需要的时间格式// temp=temp<<4; set_time[i]=temp+time[i]%10; write_byte(set_add[i],set_time[i]); } write_byte(0x8e,0x80);//打开写保护,防止误操作//}
首页 1 2 下一页