找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索

请教一个问题:51单片机用外部中断通过矩阵按键控制led的亮灭

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

正文摘要:

请教一个问题:51单片机用外部中断通过矩阵按键控制led的亮灭。想要达到目的:每一次按键被触发,LED的状态翻转一次。 单片机电路图如下: 我自己写的程序如下:下载后单片机的效果是按下按键led小灯点亮,一直 ...

回复

ID:332444 发表于 2023-3-9 21:10
15818463972 发表于 2020-6-26 12:34
感谢你了,我一直困在循环这里搞不明白,自己摸索了两天都搞不明白,现在懂了,看了代码后恍然大悟

不过不管如何都不建议在中断里面使用循环,为了说明问题,勉强修改,中断里面可以使用变量累加判断。
ID:1064915 发表于 2023-3-9 17:30
for(i=0;i<1000;i++);
延时时间怎么计算?
ID:789846 发表于 2020-6-26 12:36
void int0_process() interrupt 0
{        
        unsigned int i;
        for(i=0;i<1000;i++);
        LED = ~LED;
                     
}
ID:789846 发表于 2020-6-26 12:34

感谢你了,我一直困在循环这里搞不明白,自己摸索了两天都搞不明白,现在懂了,看了代码后恍然大悟
ID:789846 发表于 2020-6-26 12:25
xianfajushi 发表于 2020-6-26 09:16
代码按我的电路修改了,仅供参考。

可以了,现在明白了,谢谢你
ID:332444 发表于 2020-6-26 09:16
代码按我的电路修改了,仅供参考。
ID:332444 发表于 2020-6-26 09:12
  1. #include <reg52.h>
  2. sbit LED = P0^0;
  3. sbit wai = P3^2;
  4. sbit key = P1^7;
  5. void main()
  6. {
  7.         int i;
  8.         P1 = 0XF7;        //矩阵按键变为独立按键
  9.         P0 = 0x00;        //熄灭led
  10.         IT0 = 1;                //下降沿触发
  11.         EX0 = 1;                //开启INT0中断
  12.         EA = 1;                        //开启总中断  

  13.         while(1)
  14.         {
  15.         if(key == 0)
  16.         {
  17.                 for(i=0;i<1000;i++);      //按键消抖
  18.                 if(key==0)wai = 0;                //令P3^2引脚电平为0,下降沿出发外部中断
  19.                                 }
  20.         wai = 1;
  21.         }
  22. }
  23. void int0_process() interrupt 0
  24. {        
  25.         unsigned int i;
  26.         for(i=0;i<1000;i++);
  27.         LED = ~LED;                        
  28. }
复制代码
ID:332444 发表于 2020-6-26 07:55
按键代码要包含在无限循环中,不是无限循环被按键代码包含。
ID:332444 发表于 2020-6-26 07:49
中断函数内多余代码去掉,保留LED取反试看,按键代码无限循环去掉。

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

Powered by 单片机教程网

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