找回密码
 立即注册

QQ登录

只需一步,快速开始

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

STC89C52单片机C语言代码在用数组判断处无法判断,再次请各位大佬出山看看

[复制链接]
跳转到指定楼层
楼主
STC89C52代码在用数组判断处无法判断,再次跪求请各位大佬出山看看
自己调试过发现是判断无效,也就是“keyword[y]==right[y]”无效,但是语言和逻辑上都没有错呀,实在想不通,还请各位指点

主要单片机代码如下:
  1. #include<reg52.h>
  2. #include<stdio.h>
  3. #include<OLED.h>               
  4. #include <intrins.h>
  5. #define led P1

  6. sbit b1=P2^0;
  7. sbit b2=P3^3;
  8. sbit b3=P2^1;
  9. sbit b4=P2^2;
  10. sbit b5=P4^2;
  11. sbit b6=P4^3;
  12. sbit bee=P2^4;
  13. sbit b10=P1^0;



  14. unsigned int y;
  15. unsigned int right[6]={1,3,1,4,2,1};
  16. unsigned int keyword[6]={1,3,1,4,2,1};

  17. void delay(int ms)
  18. {
  19.    int ii,jj;
  20.    if (ms<1) ms=1;
  21.    for(ii=0;ii<ms;ii++)
  22.      for(jj=0;jj<500;jj++);      
  23. }

  24. void start()
  25. {
  26.         bee=0;
  27.         delay(10);
  28.         OLED_Init();
  29.         OLED_CLS();
  30.         OLED_Fill(0x00);
  31.         OLED_P14x16Ch(25,1,0);
  32.         OLED_P14x16Ch(39,1,1);
  33.         OLED_P14x16Ch(53,1,2);                     
  34.         OLED_P14x16Ch(67,1,3); //显示密码文字//               
  35.         OLED_P14x16Ch(81,1,4);        
  36. }

  37. void beep()
  38. {
  39.         delay(20);
  40.         bee=1;
  41.         delay(100);
  42.         bee=0;
  43. }

  44. void data_input()
  45. {
  46.         unsigned int i=0;
  47.         unsigned char location[6]={36,46,56,66,76,86};

  48.         start();

  49.         while(1)
  50.         {
  51.                 if(i<=5)
  52.                 {
  53.                         if(b1==0)
  54.                         {
  55.                                 delay(20);
  56.                                 while(!b1);
  57.                                 beep();
  58.                                 keyword[i]=1;
  59.                                 OLED_P6x8Str(location[i],5,"1");
  60.                                 i++;
  61.                         }
  62.                
  63.                         if(b5==0)
  64.                         {
  65.                                 delay(20);
  66.                                 while(!b5);
  67.                                 beep();
  68.                                 keyword[i]=2;
  69.                                 OLED_P6x8Str(location[i],5,"2");
  70.                                 i++;
  71.                         }
  72.                
  73.                         if(b2==0)
  74.                         {
  75.                                 delay(20);
  76.                                 while(!b2);
  77.                                 beep();
  78.                                 keyword[i]=3;
  79.                                 OLED_P6x8Str(location[i],5,"3");
  80.                                 i++;
  81.                         }
  82.                
  83.                         if(b6==0)
  84.                         {
  85.                                 delay(20);
  86.                                 while(!b6);
  87.                                 beep();
  88.                                 keyword[i]=4;
  89.                                 OLED_P6x8Str(location[i],5,"4");
  90.                                 i++;
  91.                         }
  92.                 }

  93.                 if(b3==0&&i<=6)
  94.                 {
  95.                         delay(20);
  96.                         while(!b3);
  97.                         beep();
  98.                         i--;
  99.                         OLED_P6x8Str(location[i],5," ");
  100.                 }

  101.                 if(b4==0)
  102.                 {
  103.                         delay(20);
  104.                         while(!b4);
  105.                         beep();
  106.                         break;
  107.                 }
  108.         }
  109. }

  110. void main()
  111. {
  112.         unsigned int t;
  113.     data_input();
  114.         for(y=0;y<6;y++)
  115.         {
  116.                 if(keyword[y]==right[y])
  117.                 {
  118.                         t++;
  119.                 }
  120.         }
  121.         while(1)
  122.         {
  123.                 if(t==5)
  124.                 {
  125.                         bee=0;
  126.                 delay(10);
  127.                  OLED_Init();
  128.                 OLED_CLS();
  129.                 OLED_Fill(0x00);
  130.                         OLED_P14x16Ch(30,6,3);
  131.                         OLED_P14x16Ch(46,6,4);
  132.                         OLED_P14x16Ch(62,6,5);
  133.                         OLED_P14x16Ch(78,6,6);
  134.                         delay(20);
  135.                         bee=1;
  136.                         delay(10000);
  137.                         bee=0;        
  138.                 }
  139.                 else
  140.                 {
  141.                         OLED_P14x16Ch(30,6,3);
  142.                         OLED_P14x16Ch(46,6,4);
  143.                         OLED_P14x16Ch(62,6,7);
  144.                         OLED_P14x16Ch(78,6,8);
  145.                         delay(20);
  146.                         bee=1;
  147.                         delay(1000);
  148.                         bee=0;
  149.                         led=0;
  150.                         delay(50000);        
  151.                         while(1)
  152.                 {
  153.                                 P0=0x00;
  154.                     delay(1000);
  155.                     P0=0xff;
  156.                     delay(1000);
  157.                }
  158.                 }
  159.         }
  160. }
复制代码
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:94031 发表于 2021-9-2 19:14 | 只看该作者
本帖最后由 xuyaqi 于 2021-9-2 19:17 编辑

这个循环进去就出不来,程序没发循环。while(1)
{
    P0=0x00;
    delay(1000);
    P0=0xff;
   delay(1000);
}

回复

使用道具 举报

板凳
ID:332444 发表于 2021-9-2 19:31 | 只看该作者
做这样判断有和用处!Y值一样数组值一样还用判断?
回复

使用道具 举报

地板
ID:950769 发表于 2021-9-2 19:33 | 只看该作者
xianfajushi 发表于 2021-9-2 19:31
做这样判断有和用处!Y值一样数组值一样还用判断?

两个数组一样是之前为了查问题换了,原来keyword那个数组应该是空的
回复

使用道具 举报

5#
ID:624769 发表于 2021-9-2 19:47 | 只看该作者
把:
unsigned int right[6]={1,3,1,4,2,1};
unsigned int keyword[6]={1,3,1,4,2,1};
改成:
unsigned char code right[]={1,3,1,4,2,1};
unsigned char code keyword[]={1,3,1,4,2,1};
试试,别谈理论,试完再说。
回复

使用道具 举报

6#
ID:950769 发表于 2021-9-2 19:59 | 只看该作者
xuyaqi 发表于 2021-9-2 19:14
这个循环进去就出不来,程序没发循环。while(1)
{
    P0=0x00;

我知道这里跳不出来但我想问的问题是
for(y=0;y<6;y++)
        {
                if(keyword[y]==right[y])
                {
                        t++;
                }
        }
这里的判断为什么不起作用
回复

使用道具 举报

7#
ID:950769 发表于 2021-9-2 20:01 | 只看该作者
188610329 发表于 2021-9-2 19:47
把:
unsigned int right[6]={1,3,1,4,2,1};
unsigned int keyword[6]={1,3,1,4,2,1};

已经试过了,没用
回复

使用道具 举报

8#
ID:624769 发表于 2021-9-2 20:11 | 只看该作者
雨人1212 发表于 2021-9-2 20:01
已经试过了,没用

for(y=0;y<6;y++)
        {
                if(keyword[y]==right[y])
                {
                        t++;
                }
        }
你这里只跑一次,跑完t = 6;
之后进入while(1) 这里就再也不跑了,你说的不起作用是什么不起作用? 不相等? t不变6?
回复

使用道具 举报

9#
ID:950769 发表于 2021-9-2 21:27 | 只看该作者

按道理是t变成6进入循环,循环判断t==6,然后执行t=6时的程序,但是始终执行的是else后的程序,我想不通是哪里出问题了
回复

使用道具 举报

10#
ID:161164 发表于 2021-9-2 22:18 | 只看该作者
雨人1212 发表于 2021-9-2 21:27
按道理是t变成6进入循环,循环判断t==6,然后执行t=6时的程序,但是始终执行的是else后的程序,我想不通是 ...


t==6 执行else,没错啊~?
回复

使用道具 举报

11#
ID:950769 发表于 2021-9-2 22:25 | 只看该作者
lkc8210 发表于 2021-9-2 22:18
t==6 执行else,没错啊~?

那个是之前调试错误的时候改的忘了改为“t==6”,但就算改为"t==6"这个判断仍然是不起作用的,我很迷
回复

使用道具 举报

12#
ID:161164 发表于 2021-9-2 22:57 | 只看该作者
雨人1212 发表于 2021-9-2 22:25
那个是之前调试错误的时候改的忘了改为“t==6”,但就算改为"t==6"这个判断仍然是不起作用的,我很迷

我改为“t==6”
运行后直接按b4
可以进if(t==6)啊~

你如何判断进哪个?

另外
你开头#define led P1
在else内又是用P0=0x00;
你硬件是接哪组脚?
回复

使用道具 举报

13#
ID:94031 发表于 2021-9-3 06:19 | 只看该作者
雨人1212 发表于 2021-9-2 19:59
我知道这里跳不出来但我想问的问题是
for(y=0;y

你根据什么说判断不起作用。
回复

使用道具 举报

14#
ID:935919 发表于 2021-9-3 08:18 | 只看该作者
代码我没有细看, 不知道right和keword的值在中间过程有没有变化.

但是根据你的描述, 你看看编译后的汇编代码, 看看right[y] == keyword[y]是否存在?

可以试试用下面的方法再试试看看:
volatile unsigned int right[6]={1,3,1,4,2,1};
volatile unsigned int keyword[6]={1,3,1,4,2,1};
回复

使用道具 举报

15#
ID:332444 发表于 2021-9-3 08:50 | 只看该作者
从哪里你得出无法正确判断的结论?
回复

使用道具 举报

16#
ID:332444 发表于 2021-9-3 08:51 | 只看该作者
代码执行后t等于多少知道?
回复

使用道具 举报

17#
ID:332444 发表于 2021-9-3 08:52 | 只看该作者
而且那段代码只能执行一次
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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