找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索

关于单片机标志位出错,新手请求指导

查看数: 1569 | 评论数: 6 | 收藏 0
关灯 | 提示:支持键盘翻页<-左 右->
    组图打开中,请稍候......
发布时间: 2019-9-17 23:21

正文摘要:

本帖最后由 H方与圆H 于 2019-9-17 23:34 编辑 新手向大家请教一个关于标志位的问题,当直接给P1口赋值时,无任何问题。当使用标志位时出错,按下按键后0xfe与0xf7交替闪烁,再次按按键停在0xf7。 单片机源程序 ...

回复

ID:601863 发表于 2019-9-19 15:43
wulin 发表于 2019-9-19 09:28
楼主去掉所有多余语句加标志复位就行了

非常感谢您的热心指点,不过您是让它第二个按键按下去亮0xf7,我是想利用标志位让它松手的时候亮0xf7。谢谢。
ID:213173 发表于 2019-9-19 09:28
H方与圆H 发表于 2019-9-18 21:34
谢谢指点,但是我现在将标志位复位,依然有问题。
void bc()
{

楼主去掉所有多余语句加标志复位就行了
  1. #include<reg52.h>           
  2. #define uchar unsigned char
  3. #define uint unsigned int
  4. uchar a,b,c;

  5. void delay(uint z)
  6. {
  7.     uint x,y;   
  8.     for(x=z;x>0;x--)
  9.         for(y=110;y>0;y--);
  10. }
  11. void key()
  12. {
  13.         P3=0x0f;
  14.         if(P3!=0x0f)
  15.         {
  16.                 delay(5);
  17.                 if(P3!=0x0f)
  18.                 {   
  19.                         if(P3==0x0e)
  20.                                 b=0;
  21.                         if(P3==0x0d)
  22.                                 c=0;
  23.                 }
  24.         }
  25. }
  26. void bc()
  27. {
  28.     if(b==0)
  29.     {              
  30.                 P1=0xfe;
  31.                 b=1;
  32.         }
  33.     if(c==0)
  34.         {        
  35.                 P1=0xf7;
  36.                 c=1;
  37.         }   
  38. }
  39. void main()
  40. {
  41.     P1=0x7f;                //P1口赋初值
  42.     b=1;                    //标志位赋初值
  43.     c=1;                    //标志位赋初值
  44.     while(1)
  45.     {
  46.         key();
  47.         bc();
  48.     }
  49. }
  50.   
复制代码
ID:601863 发表于 2019-9-18 21:37
hantu 发表于 2019-9-18 09:31
把文件全打包了发上来呀,包括仿真文件和项目文件、源码。

上传压缩包?我没注意到在哪儿上传呀?
ID:601863 发表于 2019-9-18 21:34
tyrl800 发表于 2019-9-18 11:01
你这程序,标志位都没有复位,当然有问题

谢谢指点,但是我现在将标志位复位,依然有问题。
void bc()
{
    if(b==0)                 //检测标志位值
    {              
        P1=0xfe;
        if(P1==0xfe)       //检测LED状态
        {     
             b=1;            //标志位复位
         }
     }
    if(c==0)                //检测标志位值
    {        
        P1=0xf7;
        if(P1==0xf7)      //检测LED状态
        {
            c=1;            //标志位复位
        }
     }   
}
  
我改成这样之后,开始没问题,当我按下按键无任何反应变化,松开按键直接点亮0xf7然后常亮。不论怎么按按键都无任何反应变化。
中间按下按键这部分看上去是被跳过了,但是我用直接给P1口赋值和把C屏蔽掉测试发现这部分并没被跳过。但是仿真实际表现是跳过了。
ID:275826 发表于 2019-9-18 11:01
你这程序,标志位都没有复位,当然有问题
ID:462827 发表于 2019-9-18 09:31
把文件全打包了发上来呀,包括仿真文件和项目文件、源码。

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

Powered by 单片机教程网

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