找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索

现在把代码全都贴出来,求大神们帮我看看哪错了!十分感谢

查看数: 2041 | 评论数: 6 | 收藏 0
关灯 | 提示:支持键盘翻页<-左 右->
    组图打开中,请稍候......
发布时间: 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};//显示"锁 ...

回复

ID:140371 发表于 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;
                                        }     
                                }
                        }
                }  
        }
}  
}
ID:155507 发表于 2016-12-22 21:37
  1. #include<reg52.h>
  2. #define uchar unsigned char
  3. #define uint unsigned int

  4. uchar code table[4]={0xef,0xdf,0xbf,0x7f}; //位选码
  5. uchar code table1[4]={0x3d,0x28,0x3c,0x61};//显示"锁"字
  6. uchar code table2[4]={0x28,0x70,0x30,0x68};//显示"开"字
  7. uchar code table3[4]={0x74,0x60,0xeb,0x3d};//显示"失败"字
  8. uchar inbuf[4]={0x3d,0x28,0x3c,0x61};      //输入缓冲区
  9. uchar  pm[4]={1,2,3,4};//密码
  10. uchar inbuf[4],pmbuf[4];
  11. uchar temp,enterflag,num2,count;

  12. sbit sda=P3^5;
  13. sbit scl=P3^4;
  14. sbit D1=P3^7;   //蜂鸣器
  15. sbit D2=P3^3;   //复位键
  16. sbit D3=P3^6;   //继电器

  17. void delayus()   //延时几微秒
  18. { ;; }

  19. void delay(uint z)
  20. {

  21.         uint x,y;

  22.         for(x=z;x>0;x--)

  23.         for(y=120;y>0;y--);

  24. }

  25. void start()  //开始信号
  26. {

  27.         sda=1;
  28.         delayus();
  29.         scl=1;
  30.         delayus();
  31.         sda=0;
  32.         delayus();

  33. }


  34. void stop()   //停止信号

  35. {
  36.         sda=0;
  37.         delayus();
  38.         scl=1;
  39.         delayus();
  40.         sda=1;
  41.         delayus();

  42. }


  43. void respons()  //应答信号

  44. {

  45.         uchar i;

  46.         scl=1;
  47.         delayus();
  48.         while((sda==1)&&(i<250))i++;
  49.         scl=0;
  50.         delayus();

  51. }

  52. void init()   //初始化

  53. {

  54.         sda=1;
  55.         delayus();
  56.         scl=1;
  57.         delayus();

  58. }


  59. void write_byte(uchar date)  //主机向24c02写数据

  60. {

  61.         uchar i,temp;

  62.         temp=date;
  63.         for(i=0;i<8;i++)
  64.         {

  65.                 temp=temp<<1;
  66.                 scl=0;
  67.                 delayus();
  68.                 sda=CY;
  69.                 delayus();
  70.                 scl=1;
  71.                 delayus();
  72.                 delayus();
  73.         }

  74.         scl=0;
  75.         delayus();
  76.         sda=1;
  77.         delayus();

  78. }



  79. uchar read_byte()  //主机从24c02读数据
  80. {

  81.         uchar i,k;

  82.         scl=0;
  83.         delayus();
  84.         sda=1;
  85.         delayus();

  86.         for(i=0;i<8;i++)
  87.         {

  88.                 scl=1;
  89.                 delayus();  

  90.                 k=(k<<1)|sda;

  91.                 scl=0;
  92.                 delayus();  
  93.         }
  94.         return k;
  95. }

  96. void write_add(uchar address,uchar date)
  97. {
  98.         start();
  99.         write_byte(0xa0);
  100.         respons();
  101.         write_byte(address);
  102.         respons();
  103.         write_byte(date);
  104.         respons();
  105.         stop();

  106. }
  107. uchar read_add(uchar address)

  108. {

  109.         uchar date;
  110.         start();
  111.         write_byte(0xa0);
  112.         respons();
  113.         write_byte(address);
  114.         respons();
  115.         start();
  116.         write_byte(0xa1);
  117.         respons();
  118.         date=read_byte();
  119.         stop();

  120.         return date;

  121. }



  122. //****设置密码****//

  123. void pmset()
  124. {   
  125.         uchar i;

  126.         for(i=0;i<4;i++)  
  127.         {
  128.                 init();
  129.                 write_add(i,pmbuf[i]);

  130.         }
  131.         delay(100);

  132.         for(i=0;i<4;i++)

  133.         {
  134.                 init();
  135.                 pm[i]=read_add(i);

  136.         }  
  137. }

  138. //****读取密码****//

  139. void readpm()
  140. {
  141.         uchar i;

  142.         for(i=0;i<4;i++)
  143.         {
  144.                 init();
  145.                 pm[i]=read_add(i);

  146.         }
  147. }

  148. //****密码比较****//

  149. uchar pmcmp()
  150. {

  151.         char flag;
  152.         char t,num1;

  153.         t=0;
  154.         num1=0;

  155.         for(t=0;t<4;t++)

  156.         if(pm[t]==pmbuf[t])

  157.         num1++;

  158.         if(num1==4)
  159.         flag=1;

  160.         else{ flag=0;t=4;}

  161.         return(flag);

  162. }

  163. //****键盘扫描****//

  164. uchar keyscan()

  165. {  
  166.         uchar num=0;   

  167.         temp=P2;

  168.         temp=temp&0xf0;

  169.         while(temp!=0xf0)

  170.         {

  171.                 delay(10);

  172.                 temp=P2;

  173.                 temp=temp&0xf0;

  174.                 while(temp!=0xf0)
  175.                 {

  176.                         temp=P2;

  177.                         switch(temp)

  178.                         {

  179.                         case 0xee:num=1;

  180.                                 break;
  181.                         case 0xde:num=2;

  182.                                 break;

  183.                         case 0xbe:num=3;

  184.                                 break;

  185.                         case 0x7e:num=4;

  186.                                 break;

  187.                         }

  188.                         while(temp!=0xf0)

  189.                         {

  190.                                 temp=P2;

  191.                                 temp=temp&0xf0;

  192.                         }

  193.                 }

  194.         }


  195.         P2=0xfd;
  196.         temp=P2;
  197.         temp=temp&0xf0;

  198.         while(temp!=0xf0)
  199.         {

  200.                 delay(10);
  201.                 temp=P2;
  202.                 temp=temp&0xf0;

  203.                 while(temp!=0xf0)
  204.                 {

  205.                         delay(10);
  206.                         temp=P2;
  207.                         temp=temp&0xf0;

  208.                         while(temp!=0xf0)
  209.                         {
  210.                                 temp=P2;

  211.                                 switch(temp)
  212.                                 {

  213.                                 case 0xed:num=5;

  214.                                         break;

  215.                                 case 0xdd:num=6;

  216.                                         break;


  217.                                 case 0xbd:num=7;

  218.                                         break;

  219.                                 case 0x7d:num=8;

  220.                                         break;

  221.                                 }

  222.                                 while(temp!=0xf0)

  223.                                 {

  224.                                         temp=P2;
  225.                                         temp=temp&0xf0;

  226.                                 }

  227.                         }
  228.                 }



  229.                 P2=0xfb;
  230.                 temp=P2;
  231.                 temp=temp&0xf0;

  232.                 while(temp!=0xf0)
  233.                 {

  234.                         delay(10);
  235.                         temp=P2;
  236.                         temp=temp&0xf0;

  237.                         while(temp!=0xf0)

  238.                         {
  239.                                 temp=P2;

  240.                                 switch(temp)
  241.                                 {

  242.                                 case 0xeb:num=9;

  243.                                         break;

  244.                                 case 0xdb:num=10;

  245.                                         break;

  246.                                 case 0xbb:num=11;

  247.                                         break;

  248.                                 case 0x7b:num=12;

  249.                                         break;

  250.                                 }

  251.                                 while(temp!=0xf0)

  252.                                 {

  253.                                         temp=P2;

  254.                                         temp=temp&0xf0;

  255.                                 }

  256.                         }

  257.                 }
  258.         }


  259.         return num;
  260. }
  261. //****主程序****//

  262. void main()

  263. { uchar key,count,pmflag;
  264.         uchar i,j;

  265.         count=0;
  266.         num2=0;
  267.         enterflag=0;
  268.         pmflag=0;
  269.         readpm();

  270.         while(1)
  271.         {           

  272.                 for(i=0;i<4;i++)
  273.                 {

  274.                         P2=table[i];
  275.                         P0=inbuf[i];   

  276.                         for(j=500;j>0;j--);

  277.                 }   

  278.                 P2=0xff;   

  279.                 key=keyscan();
  280.                 switch(key)  
  281.                 {

  282.                 case 1:  
  283.                         if(count<4)

  284.                         { inbuf[count]=0xf7;

  285.                                 pmbuf[count]=0;

  286.                                 count++;
  287.                         }
  288.                         break;

  289.                 case 2:

  290.                         if(count<4)
  291.                         { inbuf[count]=0xf7;

  292.                                 pmbuf[count]=1;
  293.                                 count++;
  294.                         }
  295.                         break;

  296.                 case 3:

  297.                         if(count<4)
  298.                         { inbuf[count]=0xf7;

  299.                                 pmbuf[count]=2;
  300.                                 count++;
  301.                         }
  302.                         count++;
  303.                 }
  304.                 break;
  305.                 /*
  306.         case 3:

  307.                 if(count<4)

  308.                 { inbuf[count]=0xf7;
  309.                         pmbuf[count]=2;

  310.                         count++;

  311.                 }
  312.                 break;
  313. */
  314.         case 4:

  315.                 if(count<4)

  316.                 { inbuf[count]=0xf7;

  317.                         pmbuf[count]=3;

  318.                         count++;

  319.                 }

  320.                 break;

  321.         case 5:

  322.                 if(count<4)

  323.                 { inbuf[count]=0xf7;

  324.                         pmbuf[count]=4;

  325.                         count++;

  326.                 }

  327.                 break;

  328.         case 6:

  329.                 if(count<4)

  330.                 { inbuf[count]=0xf7;

  331.                         pmbuf[count]=5;

  332.                         count++;

  333.                 }
  334.                 break;

  335.         case 7:

  336.                 if(count<4)

  337.                 { inbuf[count]=0xf7;

  338.                         pmbuf[count]=6;

  339.                         count++;

  340.                 }

  341.                 break;

  342.         case 8:

  343.                 if(count<4)

  344.                 { inbuf[count]=0xf7;

  345.                         pmbuf[count]=7;
  346.                         count++;

  347.                 }

  348.                 break;

  349.         case 9:

  350.                 if(count<4)
  351.                 { inbuf[count]=0xf7;

  352.                         pmbuf[count]=8;

  353.                         count++;

  354.                 }

  355.                 break;

  356.         case 10:

  357.                 if(count<4)

  358.                 { inbuf[count]=0xf7;

  359.                         pmbuf[count]=9;

  360.                         count++;  

  361.                 }

  362.                 break;

  363.         case 11:  //设置键

  364.                 { if(count= =4)

  365.                         {count=0;

  366.                                 pmset();

  367.                         }

  368.                         for(i=0;i<4;i++)  //擦除缓冲区

  369.                         inbuf[i]=table1[i];

  370.                         break;
  371.                 }
  372.         case 12:     //确认键

  373.                 { enterflag=1;

  374.                         if(count= =4)

  375.                         pmflag=pmcmp();      


  376.                         else pmflag=0;

  377.                         break;

  378.                 }

  379.         default:  break;

  380.         }

  381.         if(enterflag= =1)

  382.         {  enterflag=0;

  383.                 count=0;

  384.                 for(i=0;i<4;i++)

  385.                 pmbuf[i]=0xf7;

  386.                 if(pmflag= =1)

  387.                 {   
  388.                         P1=0xf0;

  389.                         D3=0;

  390.                         while(1)

  391.                         { for(i=0;i<4;i++)

  392.                                 {

  393.                                         P2=table[i];

  394.                                         P0=table2[i];

  395.                                         for(j=500;j>0;j--);

  396.                                 }

  397.                                 if(D2= =0)   //复位

  398.                                 { D3=1;

  399.                                         P1=0xff;

  400.                                         for(i=0;i<4;i++)

  401.                                         inbuf[i]=table1[i];

  402.                                         break;

  403.                                 }

  404.                         }

  405.                 }        

  406.                 if(pmflag= =0)

  407.                 {
  408.                         num2++;

  409.                         P1=0x0f;

  410.                         for(i=0;i<4;i++)

  411.                         inbuf[i]=table1[i];

  412.                         if(num2= =3)     

  413.                         {  

  414.                                 while(1)

  415.                                 { P1=0;

  416.                                         for(i=0;i<4;i++)

  417.                                         {

  418.                                                 for(j=500;j>0;j--);

  419.                                                 P2=table[i];

  420.                                                 P0=table3[i];

  421.                                                 for(j=500;j>0;j--);

  422.                                                 for(j=50;j>0;j--)

  423.                                                 D1=~D1;

  424.                                         }
  425.                                         if(D2= =0)    //复位
  426.                                         {num2=0;  

  427.                                                 P1=0xff;

  428.                                                 for(i=0;i<4;i++)

  429.                                                 inbuf[i]=table1[i];

  430.                                                 break;
  431.                                         }     
  432.                                 }
  433.                         }
  434.                 }  
  435.         }
  436. }  

复制代码
ID:98767 发表于 2016-12-22 16:21
没错,括号的确是出了问题
ID:135369 发表于 2016-12-22 12:54
你这键盘扫描函数,层层嵌套,中括号可能有少或多的,恕我暂时手里没有电脑。只能推测
ID:135369 发表于 2016-12-22 12:48
手上没电脑,用手机看你这代码特蛋疼!!!
ID:156796 发表于 2016-12-22 11:01
这叫人怎么要看。。。起码要知道那一块有问题吧、

小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表