找回密码
 立即注册

QQ登录

只需一步,快速开始

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

51单片机中断问题,求大佬求教

[复制链接]
跳转到指定楼层
楼主
ID:292464 发表于 2018-3-15 20:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
1黑币
我的想法是做一个从中间到两边的流水灯,然后用P3独立按键控制,不知道为什么达不到想要的效果。
求大佬指点
  1. #include "reg52.h"
  2. #include<intrins.h>
  3. typedef unsigned int u16;
  4. typedef unsigned char u8;
  5. sbit k3=P3^3;
  6. #define led P2
  7. u8 P2led[7]={0xE7,0xDB,0xBD,0x7E,0xBD,0xDB,0xE7};
  8. u8 press=0;
  9. void delay(u16 i)
  10. {
  11.   while(i--);
  12. }
  13.   
  14. void ledopen()
  15. {
  16.   u8 i;
  17. led= 0xE7;
  18. delay(50000);
  19. for(i=0;i<7;i++)
  20. {
  21.   led = ~P2led[i];
  22.   delay(50000);
  23. }
  24.   for(i=0;i<7;i++)
  25. {
  26.    led= P2led[i];
  27.   delay(50000);
  28. }
  29. }
  30. void Int0Init()
  31. {
  32.   IT0=1;
  33. EX0=1;
  34. EA=1;
  35. }
  36. void main()
  37. {
  38. Int0Init();
  39. if(k3 == 1)
  40. {
  41.     delay(1000);  
  42.   ledopen();
  43. }
  44.   if(k3 == 0);
  45. {
  46.    delay(1000);
  47.    led=0xFF;
  48. }
  49. }
  50. void Int0() interrupt 0
  51. {
  52.   delay(1000);
  53. while(k3 == 0)
  54. {
  55. press +=1;
  56. if(press == 2)
  57. press=0;
  58. delay(10);
  59. }
  60. }
复制代码

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

使用道具 举报

沙发
ID:61973 发表于 2018-3-15 23:10 来自手机 | 只看该作者
你主函数的while呢?
回复

使用道具 举报

板凳
ID:164602 发表于 2018-3-16 08:29 | 只看该作者
我调试好了,通过按键k3,开关LED灯。
#include "reg52.h"
#include<intrins.h>
typedef unsigned int u16;
typedef unsigned char u8;
//sbit k3=P3^3;
#define led P2
u8 P2led[7]={0xE7,0xDB,0xBD,0x7E,0xBD,0xDB,0xE7};
bit press=0;
void delay(u16 i)
{
  while(i--);
}
  
void ledopen()
{
  u8 i;
led= 0xE7;
delay(50000);
for(i=0;(i<7)&&(press==0);i++)
{
  led = ~P2led[i];
  delay(50000);
}
  for(i=0;(i<7)&&(press==0);i++)
{
   led= P2led[i];
  delay(50000);
}
}
void Int0Init()
{
  IT0=1;
EX0=1;
EA=1;
}
void main()
{
Int0Init();
while (1)
{
if(press==0)
{
    delay(1000);  
  ledopen();
}
  if(press==1);
{
   delay(1000);
   led=0xFF;
}
}
}
void Int0() interrupt 0
{
  delay(5000);
press =~press;
delay(5000);
IE0=0;
}
回复

使用道具 举报

地板
ID:292621 发表于 2018-3-16 09:40 | 只看该作者
全部函数贴出来
回复

使用道具 举报

5#
ID:251640 发表于 2018-3-16 10:01 | 只看该作者
把延时放在中断外,中断里尽量少干活.
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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