No.2061 作者:东海飘萍客 邮件:axiaxi520@sohu.com ID:6050 登陆:1次 文章数:42篇 最后登陆IP: 最后登陆:2001/9/18 15:50:00 注册:2001/9/18 15:50:00 财富:154 发帖时间:2001/10/23 10:54:00 发贴者IP:61.160.222.163 标题:东海飘萍客:C51编程:天啦,我的程序怎么会这样,各位大虾帮帮忙看一下吧,指条明路给小弟! 摘要:No.2061C51编程:天啦,我的程序怎么会这样,各位大虾帮帮忙看一下吧,指条明路给小弟! #include <reg51.h> #include <intrins.h> #include <string.h> sbit SDA=P1^5;sbit SCL=P1^4;sbit p06=P0^6;sbit p05=P0^5; sbit p04=P0^4;sbit p03=P0^3;sbit p02=P0^2;sbit p01=P0^1; sbit p00=P0^0;sbit bell=P2^5; sbit led_yellow=P2^2;sbit led_red=P2^1; unsigned char mode; void delay(unsigned int delay_time); //延时delay_timeMS void RW24C01(unsigned char Address,unsigned char *p,unsigned char size,bit control); void bellx(unsigned char bell_count); void delay_us(unsigned int delay_time); bit Input_Keyboard(unsigned char *p2); //bit compare_key(bit manage); bit Modify(bit manage); bit Input_Ic(unsigned char *p); void main(void) { bit flag; bellx(1); flag=Modify(1); if(flag) {led_red=0;led_yellow=0;} else{led_red=1;led_yellow=1;} while(1);} bit Input_Ic(unsigned char *p) {return 0;} /*bit compare_key(bit manage) //如果有管理员,则manage为1,主要是进行密码 判别。 {unsigned char temp1,temp2; unsigned char Ram_Key[12]; unsigned char Input_Key[12]; unsigned char *p; if(manage) { RW24C01(0x01,Ram_Key,0x08,1); manage=Input_Keyboard(Input_Key); if(!manage) return 0; temp1=strncmp(Ram_Key,Input_Key,8); if(!(temp1==0)) return 0; return 1;} temp1=0x10; while(1){if(temp1>=0x60) return 0; RW24C01(temp1,&temp2,1,1); if(!(temp2==mode)){ temp1+=0x10;continue;} switch(mode){ case 1:manage=Input_Ic(Input_Key); if(!manage) return 0; temp1++; RW24C01(temp1,Ram_Key,4,1); manage=strncmp(Input_Key,Ram_Key,4); if(!(manage==0)) {temp1+=0x0f;break;} else return 1; case 2:manage=Input_Ic(Input_Key); if(!manage) return 0; p=Input_Key; p+=4; manage=Input_Keyboard(p); if(!manage) return 0; RW24C01(temp1,Ram_Key,12,1); manage=strcmp(Input_Key,Ram_Key); if(!(manage==0)) {temp1+=0x0f;break;} else return 1; case 0:RW24C01(temp1,Ram_Key,8,1); manage=Input_Keyboard(Input_Key); if(!manage) return 0; manage=strncmp(Input_Key,Ram_Key,8); if(!(manage==0)){temp1+=0x0f;break;} else return 1; }} return 0;}*/ //修改设置 bit Modify(bit manage) {unsigned char temp1,temp2,temp3,temp4,temp5; unsigned char *p; unsigned char Input_Key[12]; unsigned char reimport[12]; bit error; error=0; if(manage) //判断是否有管理员设置,如有,则改设置须先输入 { manage=Input_Keyboard(Input_Key); if(!manage) return 0; if(!(Input_Key[0]==0xc0)) //如果不须修改管理密码,进入下面的设置 {temp2=3; //最多可修改三次 while(temp2>0) {manage=Input_Keyboard(Input_Key); //键盘输入新的管理密码 if(!manage) {temp2--;error=1;continue; } bellx(1); manage=Input_Keyboard(reimport); //再输入一次,以便确认 if(!manage) {temp2--;error=1; continue; //键盘输入发生错误,退出 } manage=strncmp(Input_Key,reimport,8);//两次密码进行比较,若相等,则进行修改 if(manage==0) {for(temp3=5;temp3>0;temp3--) {RW24C01(0x01,Input_Key,0x08,0); //将密码写进内存,再取出进行比较。 RW24C01(0x01,reimport,0x08,1); manage=strncmp(Input_Key,reimport,8); if(manage==0) return 1; error=1;} if(error==1) return 0;} temp2--;error=1;} if(error==1) return 0; } } manage=Input_Keyboard(Input_Key); //输入修改第几组,在1-5之间,如不在, if(!manage) return 0; //则退出 temp1=Input_Key[0]; temp1>>=4; temp1&=0x0f; if(temp1==0x0c) return 1; //不须修改则退出 if((temp1<6)&&(temp1>0)) //确定写进内存的地址 temp1*=0x10; else return 0; & ......
>>返回讨论的主题
|