找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 947|回复: 5
收起左侧

51单片机加减程序运行错误,求帮助

[复制链接]
ID:977177 发表于 2021-11-2 21:53 | 显示全部楼层 |阅读模式
我写的是0~9的加减,从0~9的加法是可行的。
但是按下s4就直接回到0了。没有减下去请问大佬们我哪里写错了吗

单片机源程序如下:
  1. #include <reg51.h>
  2. sbit s2=P3^0;
  3. sbit s3=P3^1;
  4. sbit s4=P3^2;
  5. sbit we=P2^7;
  6. sbit du=P2^6;
  7. char code m[]={0x3f,0x06,0x5b,0x4f,0x66,0xdf6d,0x7d,0x07,0x7f,0x77};
  8. int c=0;
  9. void ys(int a)
  10. {
  11.    int i,j;
  12.    for(i=0;i<a;i++)
  13.    for(j=0;j<a;j++);
  14. }
  15. void main()
  16. {
  17. while(1)
  18.   {         
  19.          we=1;
  20.          P0=0xfe;
  21.          we=0;
  22.          if(s2==0)
  23.          {
  24.            ys(10);
  25.            if(s2==0)
  26.            {
  27.                   du=1;
  28.                   P0=0x00;
  29.                   du=0;
  30.                   ys(200);
  31.            }
  32.          }
  33.          if(s3==0)
  34.          {
  35.            ys(20);
  36.            if(s3==0)
  37.            {
  38.               if(c<9)
  39.                   {
  40.                         c++;
  41.                         du=1;
  42.                         P0=m[c];
  43.                         du=0;
  44.                         ys(200);
  45.                   }
  46.            }
  47.          }
  48.          if(s4==0)
  49.          {
  50.            ys(20);
  51.            if(s4==0)
  52.            {
  53.               if(c>0)
  54.                   {
  55.                         c--;
  56.                         du=1;
  57.                         P0=m[c];
  58.                         du=0;
  59.                         ys(200);
  60.                   }
  61.            }
  62.          }   
  63.   }                       
  64. }
复制代码
回复

使用道具 举报

ID:213173 发表于 2021-11-3 06:25 | 显示全部楼层
  1. #include <reg51.h>
  2. sbit s2=P3^0;
  3. sbit s3=P3^1;
  4. sbit s4=P3^2;
  5. sbit we=P2^7;
  6. sbit du=P2^6;
  7. char code m[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
  8. int c=0;
  9. void ys(int a)
  10. {
  11.         int i,j;
  12.         for(i=0;i<a;i++)
  13.                 for(j=0;j<110;j++);
  14. }
  15. void main()
  16. {
  17.         du=1;
  18.         P0=m[c];
  19.         du=0;
  20.         ys(10);
  21.         while(1)
  22.         {         
  23.                 we=1;
  24.                 P0=0xfe;
  25.                 we=0;
  26.                 if(s2==0)
  27.                 {
  28.                         ys(10);
  29.                         if(s2==0)
  30.                         {
  31.                                 du=1;
  32.                                 P0=0x00;
  33.                                 du=0;
  34.                                 while(s2==0);
  35.                         }
  36.                 }
  37.                 if(s3==0)
  38.                 {
  39.                         ys(20);
  40.                         if(s3==0)
  41.                         {
  42.                                 if(c<9)
  43.                                 {
  44.                                         c++;
  45.                                         du=1;
  46.                                         P0=m[c];
  47.                                         du=0;
  48.                                         while(s3==0);
  49.                                 }
  50.                         }
  51.                 }
  52.                 if(s4==0)
  53.                 {
  54.                         ys(20);
  55.                         if(s4==0)
  56.                         {
  57.                                 if(c>0)
  58.                                 {
  59.                                         c--;
  60.                                         du=1;
  61.                                         P0=m[c];
  62.                                         du=0;
  63.                                         while(s4==0);
  64.                                 }
  65.                         }
  66.                 }
  67.         }
  68. }
复制代码
回复

使用道具 举报

ID:332444 发表于 2021-11-3 06:46 | 显示全部楼层
回复

使用道具 举报

ID:339654 发表于 2021-11-3 08:07 | 显示全部楼层
你搞个按键松开检测,你按着按键会一直加
回复

使用道具 举报

ID:908826 发表于 2021-11-3 08:19 | 显示全部楼层
是不是你的按键时间的问题,虽然只摁一下,但是对于单片机来说已经运算了好几次减法的程序
回复

使用道具 举报

ID:453974 发表于 2021-11-3 21:54 | 显示全部楼层
加一个松手检测试一下
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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