找回密码
 立即注册

QQ登录

只需一步,快速开始

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

单片机大神们,这个程序的错误该怎么改?跪求。。。。

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

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

使用道具 举报

沙发
ID:144833 发表于 2016-12-21 22:17 | 只看该作者
你最好把代码全部贴出来
回复

使用道具 举报

板凳
ID:151846 发表于 2016-12-21 22:24 | 只看该作者
你的主程序里面有符号错误。
回复

使用道具 举报

地板
ID:156694 发表于 2016-12-21 22:36 | 只看该作者
言不敢说 发表于 2016-12-21 22:17
你最好把代码全部贴出来

全都贴出来啊!
回复

使用道具 举报

5#
ID:156694 发表于 2016-12-21 22:36 | 只看该作者

好的
回复

使用道具 举报

6#
ID:156694 发表于 2016-12-21 22:42 | 只看该作者
a4732710 发表于 2016-12-21 22:24
你的主程序里面有符号错误。

符号有错误?
回复

使用道具 举报

7#
ID:111634 发表于 2016-12-22 08:33 | 只看该作者
查找自编程序错误的最好方法是打好基础,阅读对照正确的程序。
回复

使用道具 举报

8#
ID:156796 发表于 2016-12-22 11:02 | 只看该作者
函数有问题,双击打开差再看看
回复

使用道具 举报

9#
ID:155507 发表于 2016-12-22 21:51 | 只看该作者
  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. }  
  437. //}

复制代码
回复

使用道具 举报

10#
ID:151846 发表于 2016-12-22 23:55 | 只看该作者
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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