找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1486|回复: 6
打印 上一主题 下一主题
收起左侧

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

[复制链接]
跳转到指定楼层
楼主




  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. { init();

  134. pm[i]=read_add(i);

  135. }  

  136. }

  137. //****读取密码****//

  138. void readpm()

  139. { uchar i;

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

  141. { init();

  142.    pm[i]=read_add(i);

  143. }
  144. }

  145. //****密码比较****//

  146. uchar pmcmp()

  147. {

  148. char flag;

  149. char t,num1;

  150. t=0;

  151. num1=0;

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

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

  154.   num1++;

  155. if(num1==4)
  156. flag=1;

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

  158. return(flag);

  159. }

  160. //****键盘扫描****//

  161. uchar keyscan()

  162. {  
  163. uchar num=0;   

  164. temp=P2;

  165. temp=temp&0xf0;

  166. while(temp!=0xf0)

  167. {

  168. delay(10);

  169.   temp=P2;

  170. temp=temp&0xf0;

  171.   while(temp!=0xf0)

  172. {

  173. temp=P2;

  174. switch(temp)

  175.    {

  176.      case 0xee:num=1;

  177.         break;
  178.     case 0xde:num=2;

  179.         break;

  180.     case 0xbe:num=3;

  181.         break;

  182.     case 0x7e:num=4;

  183.      break;

  184. }

  185.   while(temp!=0xf0)

  186. {

  187. temp=P2;

  188.   temp=temp&0xf0;

  189.   }

  190. }

  191. }


  192. P2=0xfd;

  193. temp=P2;

  194. temp=temp&0xf0;

  195. while(temp!=0xf0)

  196. {

  197. delay(10);

  198. temp=P2;

  199. temp=temp&0xf0;

  200. while(temp!=0xf0)

  201. {

  202.    delay(10);

  203.   temp=P2;

  204. temp=temp&0xf0;

  205.   while(temp!=0xf0)

  206.   {

  207. temp=P2;

  208. switch(temp)

  209.    {

  210. case 0xed:num=5;

  211.    break;

  212.   case 0xdd:num=6;

  213.     break;


  214.     case 0xbd:num=7;

  215.    break;

  216. case 0x7d:num=8;

  217. break;

  218. }

  219. while(temp!=0xf0)

  220. {

  221. temp=P2;

  222.   temp=temp&0xf0;

  223.   }

  224. }
  225. }



  226. P2=0xfb;

  227. temp=P2;

  228. temp=temp&0xf0;

  229. while(temp!=0xf0)

  230. {

  231. delay(10);

  232.   temp=P2;

  233. temp=temp&0xf0;

  234. while(temp!=0xf0)

  235.   {

  236. temp=P2;

  237. switch(temp)

  238. {

  239. case 0xeb:num=9;

  240.    break;

  241.   case 0xdb:num=10;

  242.    break;

  243.   case 0xbb:num=11;

  244.    break;

  245.    case 0x7b:num=12;

  246.    break;

  247.   }

  248. while(temp!=0xf0)

  249.   {

  250. temp=P2;

  251. temp=temp&0xf0;

  252.   }

  253. }

  254. }


  255. return num;
  256. }
  257. //****主程序****//

  258. void main()

  259. { uchar key,count,pmflag;
  260. uchar i,j;

  261. count=0;

  262.   num2=0;

  263. enterflag=0;

  264.   pmflag=0;

  265.   readpm();

  266. while(1)

  267. {           

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

  269.         {

  270.     P2=table[i];

  271.    P0=inbuf[i];   

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

  273.      }   

  274.   P2=0xff;   

  275.       key=keyscan();

  276.        switch(key)  

  277.   {

  278.       case 1:  
  279. if(count<4)

  280. { inbuf[count]=0xf7;

  281.    pmbuf[count]=0;

  282. count++;

  283.   }

  284.    break;

  285.   case 2:

  286.   if(count<4)

  287.   { inbuf[count]=0xf7;

  288.        pmbuf[count]=1;

  289. count++;

  290.     }

  291.         break;

  292.    case 3:

  293.   if(count<4)

  294.   { inbuf[count]=0xf7;

  295.       pmbuf[count]=2;

  296.      count++;

  297.     }
  298.        count++;

  299.   }

  300.       break;

  301.   case 3:

  302. if(count<4)

  303.   { inbuf[count]=0xf7;
  304. pmbuf[count]=2;

  305.      count++;

  306.    }
  307.     break;

  308. case 4:

  309. if(count<4)

  310. { inbuf[count]=0xf7;

  311.      pmbuf[count]=3;

  312.      count++;

  313.     }

  314.       break;

  315.   case 5:

  316.   if(count<4)

  317.   { inbuf[count]=0xf7;

  318.      pmbuf[count]=4;

  319.     count++;

  320.   }

  321.     break;

  322.   case 6:

  323. if(count<4)

  324.    { inbuf[count]=0xf7;

  325.     pmbuf[count]=5;

  326. count++;

  327. }
  328.      break;

  329.     case 7:

  330.    if(count<4)

  331.     { inbuf[count]=0xf7;

  332.      pmbuf[count]=6;

  333.     count++;

  334.    }

  335.     break;

  336.   case 8:

  337. if(count<4)

  338.     { inbuf[count]=0xf7;

  339.         pmbuf[count]=7;
  340. count++;

  341.     }

  342.           break;

  343. case 9:

  344.    if(count<4)
  345.   { inbuf[count]=0xf7;

  346.    pmbuf[count]=8;

  347.     count++;

  348.   }

  349.       break;

  350.   case 10:

  351.    if(count<4)

  352.    { inbuf[count]=0xf7;

  353.      pmbuf[count]=9;

  354.     count++;  

  355.     }

  356.      break;

  357.   case 11:  //设置键

  358.      { if(count= =4)

  359.    {count=0;

  360. pmset();

  361. }

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

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

  364.       break
  365. }
  366. case 12:     //确认键

  367.       { enterflag=1;

  368.       if(count= =4)

  369.     pmflag=pmcmp();      


  370.      else pmflag=0;

  371.     break;

  372.    }

  373.   default:break;

  374.    }

  375. if(enterflag= =1)

  376.    {  enterflag=0;

  377.     count=0;

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

  379.     pmbuf[i]=0xf7;

  380.     if(pmflag= =1)

  381.     {   
  382. P1=0xf0;

  383.    D3=0;

  384.            while(1)

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

  386.        {

  387.   P2=table[i];

  388.        P0=table2[i];

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

  390.      }

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

  392.     { D3=1;

  393.     P1=0xff;

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

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

  396.     break;

  397.     }

  398.    }

  399. }        

  400.    if(pmflag= =0)

  401. {
  402.     num2++;

  403.    P1=0x0f;

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

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

  406.   if(num2= =3)     

  407.      {  

  408.              while(1)

  409.           { P1=0;

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

  411.          {

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

  413.          P2=table[i];

  414.        P0=table3[i];

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

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

  417.       D1=~D1;

  418. }
  419. if(D2= =0)    //复位
  420.   {num2=0;  

  421.     P1=0xff;

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

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

  424.    break;

  425.           }     

  426.       }

  427.       }

  428.     }  

  429.    }

  430.   }  

  431. }
复制代码

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:156796 发表于 2016-12-22 11:01 | 只看该作者
这叫人怎么要看。。。起码要知道那一块有问题吧、
回复

使用道具 举报

板凳
ID:135369 发表于 2016-12-22 12:48 来自手机 | 只看该作者
手上没电脑,用手机看你这代码特蛋疼!!!
回复

使用道具 举报

地板
ID:135369 发表于 2016-12-22 12:54 来自手机 | 只看该作者
你这键盘扫描函数,层层嵌套,中括号可能有少或多的,恕我暂时手里没有电脑。只能推测
回复

使用道具 举报

5#
ID:98767 发表于 2016-12-22 16:21 | 只看该作者
没错,括号的确是出了问题
回复

使用道具 举报

6#
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. }  

复制代码
回复

使用道具 举报

7#
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;
                                        }     
                                }
                        }
                }  
        }
}  
}
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

Powered by 单片机教程网

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