标题:
现在把代码全都贴出来,求大神们帮我看看哪错了!十分感谢
[打印本页]
作者:
轩子敖
时间:
2016-12-21 22:40
标题:
现在把代码全都贴出来,求大神们帮我看看哪错了!十分感谢
7ZV3JUGPU0YO8G9{T{GQ%%T.png
(35.17 KB, 下载次数: 56)
下载附件
2016-12-21 22:40 上传
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
uchar code table[4]={0xef,0xdf,0xbf,0x7f}; //位选码
uchar code table1[4]={0x3d,0x28,0x3c,0x61};//显示"锁"字
uchar code table2[4]={0x28,0x70,0x30,0x68};//显示"开"字
uchar code table3[4]={0x74,0x60,0xeb,0x3d};//显示"失败"字
uchar inbuf[4]={0x3d,0x28,0x3c,0x61}; //输入缓冲区
uchar pm[4]={1,2,3,4};//密码
uchar inbuf[4],pmbuf[4];
uchar temp,enterflag,num2,count;
sbit sda=P3^5;
sbit scl=P3^4;
sbit D1=P3^7; //蜂鸣器
sbit D2=P3^3; //复位键
sbit D3=P3^6; //继电器
void delayus() //延时几微秒
{ ;; }
void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=120;y>0;y--);
}
void start() //开始信号
{
sda=1;
delayus();
scl=1;
delayus();
sda=0;
delayus();
}
void stop() //停止信号
{
sda=0;
delayus();
scl=1;
delayus();
sda=1;
delayus();
}
void respons() //应答信号
{
uchar i;
scl=1;
delayus();
while((sda==1)&&(i<250))i++;
scl=0;
delayus();
}
void init() //初始化
{
sda=1;
delayus();
scl=1;
delayus();
}
void write_byte(uchar date) //主机向24c02写数据
{
uchar i,temp;
temp=date;
for(i=0;i<8;i++)
{
temp=temp<<1;
scl=0;
delayus();
sda=CY;
delayus();
scl=1;
delayus();
delayus();
}
scl=0;
delayus();
sda=1;
delayus();
}
uchar read_byte() //主机从24c02读数据
{
uchar i,k;
scl=0;
delayus();
sda=1;
delayus();
for(i=0;i<8;i++)
{
scl=1;
delayus();
k=(k<<1)|sda;
scl=0;
delayus();
}
return k;
}
void write_add(uchar address,uchar date)
{
start();
write_byte(0xa0);
respons();
write_byte(address);
respons();
write_byte(date);
respons();
stop();
}
uchar read_add(uchar address)
{
uchar date;
start();
write_byte(0xa0);
respons();
write_byte(address);
respons();
start();
write_byte(0xa1);
respons();
date=read_byte();
stop();
return date;
}
//****设置密码****//
void pmset()
{
uchar i;
for(i=0;i<4;i++)
{
init();
write_add(i,pmbuf[i]);
}
delay(100);
for(i=0;i<4;i++)
{ init();
pm[i]=read_add(i);
}
}
//****读取密码****//
void readpm()
{ uchar i;
for(i=0;i<4;i++)
{ init();
pm[i]=read_add(i);
}
}
//****密码比较****//
uchar pmcmp()
{
char flag;
char t,num1;
t=0;
num1=0;
for(t=0;t<4;t++)
if(pm[t]==pmbuf[t])
num1++;
if(num1==4)
flag=1;
else{ flag=0;t=4;}
return(flag);
}
//****键盘扫描****//
uchar keyscan()
{
uchar num=0;
temp=P2;
temp=temp&0xf0;
while(temp!=0xf0)
{
delay(10);
temp=P2;
temp=temp&0xf0;
while(temp!=0xf0)
{
temp=P2;
switch(temp)
{
case 0xee:num=1;
break;
case 0xde:num=2;
break;
case 0xbe:num=3;
break;
case 0x7e:num=4;
break;
}
while(temp!=0xf0)
{
temp=P2;
temp=temp&0xf0;
}
}
}
P2=0xfd;
temp=P2;
temp=temp&0xf0;
while(temp!=0xf0)
{
delay(10);
temp=P2;
temp=temp&0xf0;
while(temp!=0xf0)
{
delay(10);
temp=P2;
temp=temp&0xf0;
while(temp!=0xf0)
{
temp=P2;
switch(temp)
{
case 0xed:num=5;
break;
case 0xdd:num=6;
break;
case 0xbd:num=7;
break;
case 0x7d:num=8;
break;
}
while(temp!=0xf0)
{
temp=P2;
temp=temp&0xf0;
}
}
}
P2=0xfb;
temp=P2;
temp=temp&0xf0;
while(temp!=0xf0)
{
delay(10);
temp=P2;
temp=temp&0xf0;
while(temp!=0xf0)
{
temp=P2;
switch(temp)
{
case 0xeb:num=9;
break;
case 0xdb:num=10;
break;
case 0xbb:num=11;
break;
case 0x7b:num=12;
break;
}
while(temp!=0xf0)
{
temp=P2;
temp=temp&0xf0;
}
}
}
return num;
}
//****主程序****//
void main()
{ uchar key,count,pmflag;
uchar i,j;
count=0;
num2=0;
enterflag=0;
pmflag=0;
readpm();
while(1)
{
for(i=0;i<4;i++)
{
P2=table[i];
P0=inbuf[i];
for(j=500;j>0;j--);
}
P2=0xff;
key=keyscan();
switch(key)
{
case 1:
if(count<4)
{ inbuf[count]=0xf7;
pmbuf[count]=0;
count++;
}
break;
case 2:
if(count<4)
{ inbuf[count]=0xf7;
pmbuf[count]=1;
count++;
}
break;
case 3:
if(count<4)
{ inbuf[count]=0xf7;
pmbuf[count]=2;
count++;
}
count++;
}
break;
case 3:
if(count<4)
{ inbuf[count]=0xf7;
pmbuf[count]=2;
count++;
}
break;
case 4:
if(count<4)
{ inbuf[count]=0xf7;
pmbuf[count]=3;
count++;
}
break;
case 5:
if(count<4)
{ inbuf[count]=0xf7;
pmbuf[count]=4;
count++;
}
break;
case 6:
if(count<4)
{ inbuf[count]=0xf7;
pmbuf[count]=5;
count++;
}
break;
case 7:
if(count<4)
{ inbuf[count]=0xf7;
pmbuf[count]=6;
count++;
}
break;
case 8:
if(count<4)
{ inbuf[count]=0xf7;
pmbuf[count]=7;
count++;
}
break;
case 9:
if(count<4)
{ inbuf[count]=0xf7;
pmbuf[count]=8;
count++;
}
break;
case 10:
if(count<4)
{ inbuf[count]=0xf7;
pmbuf[count]=9;
count++;
}
break;
case 11: //设置键
{ if(count= =4)
{count=0;
pmset();
}
for(i=0;i<4;i++) //擦除缓冲区
inbuf[i]=table1[i];
break
}
case 12: //确认键
{ enterflag=1;
if(count= =4)
pmflag=pmcmp();
else pmflag=0;
break;
}
default:break;
}
if(enterflag= =1)
{ enterflag=0;
count=0;
for(i=0;i<4;i++)
pmbuf[i]=0xf7;
if(pmflag= =1)
{
P1=0xf0;
D3=0;
while(1)
{ for(i=0;i<4;i++)
{
P2=table[i];
P0=table2[i];
for(j=500;j>0;j--);
}
if(D2= =0) //复位
{ D3=1;
P1=0xff;
for(i=0;i<4;i++)
inbuf[i]=table1[i];
break;
}
}
}
if(pmflag= =0)
{
num2++;
P1=0x0f;
for(i=0;i<4;i++)
inbuf[i]=table1[i];
if(num2= =3)
{
while(1)
{ P1=0;
for(i=0;i<4;i++)
{
for(j=500;j>0;j--);
P2=table[i];
P0=table3[i];
for(j=500;j>0;j--);
for(j=50;j>0;j--)
D1=~D1;
}
if(D2= =0) //复位
{num2=0;
P1=0xff;
for(i=0;i<4;i++)
inbuf[i]=table1[i];
break;
}
}
}
}
}
}
}
复制代码
作者:
51hei电子论坛
时间:
2016-12-22 11:01
这叫人怎么要看。。。起码要知道那一块有问题吧、
作者:
xiaoer
时间:
2016-12-22 12:48
手上没电脑,用手机看你这代码特蛋疼!!!
作者:
xiaoer
时间:
2016-12-22 12:54
你这键盘扫描函数,层层嵌套,中括号可能有少或多的,恕我暂时手里没有电脑。只能推测
作者:
kkfy888
时间:
2016-12-22 16:21
没错,括号的确是出了问题
作者:
angmall
时间:
2016-12-22 21:37
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
uchar code table[4]={0xef,0xdf,0xbf,0x7f}; //位选码
uchar code table1[4]={0x3d,0x28,0x3c,0x61};//显示"锁"字
uchar code table2[4]={0x28,0x70,0x30,0x68};//显示"开"字
uchar code table3[4]={0x74,0x60,0xeb,0x3d};//显示"失败"字
uchar inbuf[4]={0x3d,0x28,0x3c,0x61}; //输入缓冲区
uchar pm[4]={1,2,3,4};//密码
uchar inbuf[4],pmbuf[4];
uchar temp,enterflag,num2,count;
sbit sda=P3^5;
sbit scl=P3^4;
sbit D1=P3^7; //蜂鸣器
sbit D2=P3^3; //复位键
sbit D3=P3^6; //继电器
void delayus() //延时几微秒
{ ;; }
void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=120;y>0;y--);
}
void start() //开始信号
{
sda=1;
delayus();
scl=1;
delayus();
sda=0;
delayus();
}
void stop() //停止信号
{
sda=0;
delayus();
scl=1;
delayus();
sda=1;
delayus();
}
void respons() //应答信号
{
uchar i;
scl=1;
delayus();
while((sda==1)&&(i<250))i++;
scl=0;
delayus();
}
void init() //初始化
{
sda=1;
delayus();
scl=1;
delayus();
}
void write_byte(uchar date) //主机向24c02写数据
{
uchar i,temp;
temp=date;
for(i=0;i<8;i++)
{
temp=temp<<1;
scl=0;
delayus();
sda=CY;
delayus();
scl=1;
delayus();
delayus();
}
scl=0;
delayus();
sda=1;
delayus();
}
uchar read_byte() //主机从24c02读数据
{
uchar i,k;
scl=0;
delayus();
sda=1;
delayus();
for(i=0;i<8;i++)
{
scl=1;
delayus();
k=(k<<1)|sda;
scl=0;
delayus();
}
return k;
}
void write_add(uchar address,uchar date)
{
start();
write_byte(0xa0);
respons();
write_byte(address);
respons();
write_byte(date);
respons();
stop();
}
uchar read_add(uchar address)
{
uchar date;
start();
write_byte(0xa0);
respons();
write_byte(address);
respons();
start();
write_byte(0xa1);
respons();
date=read_byte();
stop();
return date;
}
//****设置密码****//
void pmset()
{
uchar i;
for(i=0;i<4;i++)
{
init();
write_add(i,pmbuf[i]);
}
delay(100);
for(i=0;i<4;i++)
{
init();
pm[i]=read_add(i);
}
}
//****读取密码****//
void readpm()
{
uchar i;
for(i=0;i<4;i++)
{
init();
pm[i]=read_add(i);
}
}
//****密码比较****//
uchar pmcmp()
{
char flag;
char t,num1;
t=0;
num1=0;
for(t=0;t<4;t++)
if(pm[t]==pmbuf[t])
num1++;
if(num1==4)
flag=1;
else{ flag=0;t=4;}
return(flag);
}
//****键盘扫描****//
uchar keyscan()
{
uchar num=0;
temp=P2;
temp=temp&0xf0;
while(temp!=0xf0)
{
delay(10);
temp=P2;
temp=temp&0xf0;
while(temp!=0xf0)
{
temp=P2;
switch(temp)
{
case 0xee:num=1;
break;
case 0xde:num=2;
break;
case 0xbe:num=3;
break;
case 0x7e:num=4;
break;
}
while(temp!=0xf0)
{
temp=P2;
temp=temp&0xf0;
}
}
}
P2=0xfd;
temp=P2;
temp=temp&0xf0;
while(temp!=0xf0)
{
delay(10);
temp=P2;
temp=temp&0xf0;
while(temp!=0xf0)
{
delay(10);
temp=P2;
temp=temp&0xf0;
while(temp!=0xf0)
{
temp=P2;
switch(temp)
{
case 0xed:num=5;
break;
case 0xdd:num=6;
break;
case 0xbd:num=7;
break;
case 0x7d:num=8;
break;
}
while(temp!=0xf0)
{
temp=P2;
temp=temp&0xf0;
}
}
}
P2=0xfb;
temp=P2;
temp=temp&0xf0;
while(temp!=0xf0)
{
delay(10);
temp=P2;
temp=temp&0xf0;
while(temp!=0xf0)
{
temp=P2;
switch(temp)
{
case 0xeb:num=9;
break;
case 0xdb:num=10;
break;
case 0xbb:num=11;
break;
case 0x7b:num=12;
break;
}
while(temp!=0xf0)
{
temp=P2;
temp=temp&0xf0;
}
}
}
}
return num;
}
//****主程序****//
void main()
{ uchar key,count,pmflag;
uchar i,j;
count=0;
num2=0;
enterflag=0;
pmflag=0;
readpm();
while(1)
{
for(i=0;i<4;i++)
{
P2=table[i];
P0=inbuf[i];
for(j=500;j>0;j--);
}
P2=0xff;
key=keyscan();
switch(key)
{
case 1:
if(count<4)
{ inbuf[count]=0xf7;
pmbuf[count]=0;
count++;
}
break;
case 2:
if(count<4)
{ inbuf[count]=0xf7;
pmbuf[count]=1;
count++;
}
break;
case 3:
if(count<4)
{ inbuf[count]=0xf7;
pmbuf[count]=2;
count++;
}
count++;
}
break;
/*
case 3:
if(count<4)
{ inbuf[count]=0xf7;
pmbuf[count]=2;
count++;
}
break;
*/
case 4:
if(count<4)
{ inbuf[count]=0xf7;
pmbuf[count]=3;
count++;
}
break;
case 5:
if(count<4)
{ inbuf[count]=0xf7;
pmbuf[count]=4;
count++;
}
break;
case 6:
if(count<4)
{ inbuf[count]=0xf7;
pmbuf[count]=5;
count++;
}
break;
case 7:
if(count<4)
{ inbuf[count]=0xf7;
pmbuf[count]=6;
count++;
}
break;
case 8:
if(count<4)
{ inbuf[count]=0xf7;
pmbuf[count]=7;
count++;
}
break;
case 9:
if(count<4)
{ inbuf[count]=0xf7;
pmbuf[count]=8;
count++;
}
break;
case 10:
if(count<4)
{ inbuf[count]=0xf7;
pmbuf[count]=9;
count++;
}
break;
case 11: //设置键
{ if(count= =4)
{count=0;
pmset();
}
for(i=0;i<4;i++) //擦除缓冲区
inbuf[i]=table1[i];
break;
}
case 12: //确认键
{ enterflag=1;
if(count= =4)
pmflag=pmcmp();
else pmflag=0;
break;
}
default: break;
}
if(enterflag= =1)
{ enterflag=0;
count=0;
for(i=0;i<4;i++)
pmbuf[i]=0xf7;
if(pmflag= =1)
{
P1=0xf0;
D3=0;
while(1)
{ for(i=0;i<4;i++)
{
P2=table[i];
P0=table2[i];
for(j=500;j>0;j--);
}
if(D2= =0) //复位
{ D3=1;
P1=0xff;
for(i=0;i<4;i++)
inbuf[i]=table1[i];
break;
}
}
}
if(pmflag= =0)
{
num2++;
P1=0x0f;
for(i=0;i<4;i++)
inbuf[i]=table1[i];
if(num2= =3)
{
while(1)
{ P1=0;
for(i=0;i<4;i++)
{
for(j=500;j>0;j--);
P2=table[i];
P0=table3[i];
for(j=500;j>0;j--);
for(j=50;j>0;j--)
D1=~D1;
}
if(D2= =0) //复位
{num2=0;
P1=0xff;
for(i=0;i<4;i++)
inbuf[i]=table1[i];
break;
}
}
}
}
}
}
复制代码
作者:
a0931727149
时间:
2016-12-23 06:18
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
uchar code table[4]={0xef,0xdf,0xbf,0x7f}; //???
uchar code table1[4]={0x3d,0x28,0x3c,0x61};//??"?"?
uchar code table2[4]={0x28,0x70,0x30,0x68};//??"?"?
uchar code table3[4]={0x74,0x60,0xeb,0x3d};//??"??"?
uchar inbuf[4]={0x3d,0x28,0x3c,0x61}; //?????
uchar pm[4]={1,2,3,4};//??
uchar inbuf[4],pmbuf[4];
uchar temp,enterflag,num2,count;
sbit sda=P3^5;
sbit scl=P3^4;
sbit D1=P3^7; //???
sbit D2=P3^3; //???
sbit D3=P3^6; //???
void delayus() //?????
{ ;; }
void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=120;y>0;y--);
}
void start() //????
{
sda=1;
delayus();
scl=1;
delayus();
sda=0;
delayus();
}
void stop() //????
{
sda=0;
delayus();
scl=1;
delayus();
sda=1;
delayus();
}
void respons() //????
{
uchar i;
scl=1;
delayus();
while((sda==1)&&(i<250))i++;
scl=0;
delayus();
}
void init() //???
{
sda=1;
delayus();
scl=1;
delayus();
}
void write_byte(uchar date) //???24c02???
{
uchar i,temp;
temp=date;
for(i=0;i<8;i++)
{
temp=temp<<1;
scl=0;
delayus();
sda=CY;
delayus();
scl=1;
delayus();
delayus();
}
scl=0;
delayus();
sda=1;
delayus();
}
uchar read_byte() //???24c02???
{
uchar i,k;
scl=0;
delayus();
sda=1;
delayus();
for(i=0;i<8;i++)
{
scl=1;
delayus();
k=(k<<1)|sda;
scl=0;
delayus();
}
return k;
}
void write_add(uchar address,uchar date)
{
start();
write_byte(0xa0);
respons();
write_byte(address);
respons();
write_byte(date);
respons();
stop();
}
uchar read_add(uchar address)
{
uchar date;
start();
write_byte(0xa0);
respons();
write_byte(address);
respons();
start();
write_byte(0xa1);
respons();
date=read_byte();
stop();
return date;
}
//****????****//
void pmset()
{
uchar i;
for(i=0;i<4;i++)
{
init();
write_add(i,pmbuf[i]);
}
delay(100);
for(i=0;i<4;i++)
{
init();
pm[i]=read_add(i);
}
}
//****????****//
void readpm()
{
uchar i;
for(i=0;i<4;i++)
{
init();
pm[i]=read_add(i);
}
}
//****????****//
uchar pmcmp()
{
char flag;
char t,num1;
t=0;
num1=0;
for(t=0;t<4;t++)
if(pm[t]==pmbuf[t])
num1++;
if(num1==4)
flag=1;
else{ flag=0;t=4;}
return(flag);
}
//****????****//
uchar keyscan()
{
uchar num=0;
temp=P2;
temp=temp&0xf0;
while(temp!=0xf0)
{
delay(10);
temp=P2;
temp=temp&0xf0;
while(temp!=0xf0)
{
temp=P2;
switch(temp)
{
case 0xee:num=1;
break;
case 0xde:num=2;
break;
case 0xbe:num=3;
break;
case 0x7e:num=4;
break;
}
while(temp!=0xf0)
{
temp=P2;
temp=temp&0xf0;
}
}
}
P2=0xfd;
temp=P2;
temp=temp&0xf0;
while(temp!=0xf0)
{
delay(10);
temp=P2;
temp=temp&0xf0;
while(temp!=0xf0)
{
delay(10);
temp=P2;
temp=temp&0xf0;
while(temp!=0xf0)
{
temp=P2;
switch(temp)
{
case 0xed:num=5;
break;
case 0xdd:num=6;
break;
case 0xbd:num=7;
break;
case 0x7d:num=8;
break;
}
while(temp!=0xf0)
{
temp=P2;
temp=temp&0xf0;
}
}
}
P2=0xfb;
temp=P2;
temp=temp&0xf0;
while(temp!=0xf0)
{
delay(10);
temp=P2;
temp=temp&0xf0;
while(temp!=0xf0)
{
temp=P2;
switch(temp)
{
case 0xeb:num=9;
break;
case 0xdb:num=10;
break;
case 0xbb:num=11;
break;
case 0x7b:num=12;
break;
}
while(temp!=0xf0)
{
temp=P2;
temp=temp&0xf0;
}
}
}
}
return num;
}
//****???****//
void main()
{ uchar key,count,pmflag;
uchar i,j;
count=0;
num2=0;
enterflag=0;
pmflag=0;
readpm();
while(1)
{
for(i=0;i<4;i++)
{
P2=table[i];
P0=inbuf[i];
for(j=500;j>0;j--);
}
P2=0xff;
key=keyscan();
switch(key)
{
case 1:
if(count<4)
{ inbuf[count]=0xf7;
pmbuf[count]=0;
count++;
}
break;
case 2:
if(count<4)
{ inbuf[count]=0xf7;
pmbuf[count]=1;
count++;
}
break;
/*
case 3:
if(count<4)
{ inbuf[count]=0xf7;
pmbuf[count]=2;
count++;
}
count++;
// }
break;
*/
case 3:
if(count<4)
{ inbuf[count]=0xf7;
pmbuf[count]=2;
count++;
}
break;
case 4:
if(count<4)
{ inbuf[count]=0xf7;
pmbuf[count]=3;
count++;
}
break;
case 5:
if(count<4)
{ inbuf[count]=0xf7;
pmbuf[count]=4;
count++;
}
break;
case 6:
if(count<4)
{ inbuf[count]=0xf7;
pmbuf[count]=5;
count++;
}
break;
case 7:
if(count<4)
{ inbuf[count]=0xf7;
pmbuf[count]=6;
count++;
}
break;
case 8:
if(count<4)
{ inbuf[count]=0xf7;
pmbuf[count]=7;
count++;
}
break;
case 9:
if(count<4)
{ inbuf[count]=0xf7;
pmbuf[count]=8;
count++;
}
break;
case 10:
if(count<4)
{ inbuf[count]=0xf7;
pmbuf[count]=9;
count++;
}
break;
case 11://
{ //if(count= =4)
if(count==4)
{count=0;
pmset();
}
for(i=0;i<4;i++)
inbuf[i]=table1[i];
//break;
}
break;
case 12:
{ enterflag=1;
//if(count= =4)
if(count==4)
pmflag=pmcmp();
else pmflag=0;
break;
}
default:
break;
}
// if(enterflag= =1)
if(enterflag==1)
{ enterflag=0;
count=0;
for(i=0;i<4;i++)
pmbuf[i]=0xf7;
//if(pmflag= =1)
if(pmflag==1)
{
P1=0xf0;
D3=0;
while(1)
{ for(i=0;i<4;i++)
{
P2=table[i];
P0=table2[i];
for(j=500;j>0;j--);
}
//if(D2= =0) //??
if(D2==0)
{ D3=1;
P1=0xff;
for(i=0;i<4;i++)
inbuf[i]=table1[i];
break;
}
}
}
//if(pmflag= =0)
if(pmflag==0)
{
num2++;
P1=0x0f;
for(i=0;i<4;i++)
inbuf[i]=table1[i];
// if(num2= =3)
if(num2==3)
{
while(1)
{ P1=0;
for(i=0;i<4;i++)
{
for(j=500;j>0;j--);
P2=table[i];
P0=table3[i];
for(j=500;j>0;j--);
for(j=50;j>0;j--)
D1=~D1;
}
//if(D2= =0) //??
if(D2==0)
{num2=0;
P1=0xff;
for(i=0;i<4;i++)
inbuf[i]=table1[i];
break;
}
}
}
}
}
}
}
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1