找回密码
 立即注册

QQ登录

只需一步,快速开始

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

大佬们请帮我看看这个单片机按键控制灯程序咋回事啊?

[复制链接]
跳转到指定楼层
楼主
ID:498772 发表于 2020-4-12 17:51 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我按下p3.2之后全亮但是我按下p3.3没有用了,还有就是怎么实现按两下p3.2关闭这些灯啊跪求!

单片机源程序如下:
  1. #include<reg52.h>

  2. unsigned char flag,led,k,i;
  3. sbit key1=P3^2;
  4. sbit key2=P3^3;
  5. void delay(unsigned char n)
  6. {
  7.    unsigned char a;
  8.    for(a=0;a<n;a++);

  9. }
  10. void init(void)
  11. {
  12.   IT1=1;
  13.   IT0=1;
  14.   EA=1;
  15.   EX1=1;
  16.   EX0=1;
  17.   led=0xff;
  18. }
  19. int main(void)
  20. {
  21. unsigned char code table[]={0x33,0xcc,0x33,0xcc};
  22. init();

  23. while(1)
  24. {
  25. if(flag==1)
  26. { delay(1000);
  27. if(!key1)
  28. {
  29.    while(!key1)
  30.    P1=0x00;
  31.    }
  32.    flag=0;
  33.    EX0=1;
  34.   }
  35. if(flag==2)
  36. {
  37.         delay(1000);
  38.         if(!key2)
  39.         {
  40.         while(!key2);
  41. while(1)
  42.   {
  43.    for(i=0;i<4;i++)
  44.    {
  45.      P1=table[i];
  46.          delay(100000);
  47.   }
  48.   }
  49.   }
  50.   flag=0;
  51.   EX1=1;
  52. }        
  53. }
  54. }



  55. void exzd0(void) interrupt 0
  56. {
  57. flag=1;
  58. EX0=0;
  59. }
  60. void exzd1(void) interrupt 2
  61. {
  62.    flag=2;
  63.    EX1=0;

  64. }
复制代码



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

使用道具 举报

沙发
ID:367369 发表于 2020-4-13 12:33 | 只看该作者
按一下亮按一下灭
#include<reg52.h>
sbit  key1=P3^2;

unsigned char flag=0;
void delay(unsigned char n)
{
   unsigned char a;
   for(a=0;a<n;a++);

}

void main ()
{
        while (1)
        {
        if(key1==0)
                delay(10000);
        if(key1==0)
                flag=~flag;
        if (flag==0)
                P0=0x00;
        else
                P0=0xff;
       
        }
       
       
}
回复

使用道具 举报

板凳
ID:498772 发表于 2020-4-13 19:09 | 只看该作者
game灬boy 发表于 2020-4-13 12:33
按一下亮按一下灭
#include
sbit  key1=P3^2;

我不是这个意思大佬,我是说两个中断不能切换只能独立按才能有用是为什么呢
回复

使用道具 举报

地板
ID:704640 发表于 2020-4-14 10:04 来自手机 | 只看该作者
你做个反转看看
回复

使用道具 举报

5#
ID:367369 发表于 2020-4-16 11:48 | 只看该作者
2929198192 发表于 2020-4-13 19:09
我不是这个意思大佬,我是说两个中断不能切换只能独立按才能有用是为什么呢

这两个是外部中断,需要硬件上的电平变化才能触发中断
如果你想在中断0中触发中断1,完全用不到中断1,直接在代码中写就行了
中断就是停下来去做另一件事,
外部中断就像是有人叫你干其他的事,而你所谓的切换就像你自己想做其他的事,当你想做的时候直接去就行了,不需要别人叫你,这里的别人叫你就相当于外部中断。/****你细品*****/
回复

使用道具 举报

6#
ID:367369 发表于 2020-4-16 11:55 | 只看该作者
2929198192 发表于 2020-4-13 19:09
我不是这个意思大佬,我是说两个中断不能切换只能独立按才能有用是为什么呢

每个中断的服务函数只有一个,中断内只能执行一个程序;
还有你说的“按下p3.2之后全亮但是我按下p3.3没有用了”这是中断优先级的问题,优先级高的可以打断低的,低的不可以打断高得
你说的按两下关闭是指什么?按一下开再按一下关还是指快速按两下关?
回复

使用道具 举报

7#
ID:498772 发表于 2020-4-20 14:23 | 只看该作者
game灬boy 发表于 2020-4-16 11:48
这两个是外部中断,需要硬件上的电平变化才能触发中断
如果你想在中断0中触发中断1,完全用不到中断1, ...

我懂了,大佬,我的意思是按一下开,再按一下就是关
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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