找回密码
 立即注册

QQ登录

只需一步,快速开始

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

求助 51单片机外部中断下的LED控制器

[复制链接]
跳转到指定楼层
楼主
ID:318909 发表于 2018-4-29 14:43 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
独立按键启动外部中断,按下K1后小灯全亮,再次按下K1小灯恢复原状态。外部中断服务函数内不知道该怎么写
  1. <div>#include "reg52.h"</div><div>#include<intrins.h>  //左右移函数头文件
  2. #define GPIO_LED P0  //将P0口另外取名为GPIO_LED  </div><div>   
  3. typedef unsigned int u16;   
  4. typedef unsigned char u8;</div><div>
  5. </div><div>void type1();
  6. void type2();
  7. void type3();   
  8. void type4();
  9. void allbright();  
  10.      
  11. sbit k1=P3^2;     //暂停全亮
  12. sbit k2=P3^2;     //自动与手动切换功能
  13. sbit k3=P0^2;     //type1
  14. sbit k4=P0^1;  //type2
  15. sbit k5=P0^0;  //type3
  16. sbit k6=P0^3;  //type4</div><div>void Delay1ms(unsigned int c)   //延时函数
  17. {
  18.     unsigned char a,b;
  19. for (; c>0; c--)
  20. {
  21.   for(b=199;b>0;b--)
  22.   {
  23.    for(a=1;a>0;a--);
  24.   }
  25.         
  26. }
  27.    
  28. }
  29.   
  30. void Int0Init()   //外部中断0和1初始化设置
  31. {
  32. IT0=1;
  33. EX0=1;
  34. IT1=1;
  35. EX1=1;
  36. EA=1;
  37. }</div><div>/*初始效果:四种模式轮流播放*/
  38. /*按下K1:暂停全亮,再按一次复位*/
  39. /*按下K2:进入自选模式,按下K3456选择相应模式,再按K2复位*/
  40. void main()
  41. {
  42.    while(1)
  43.    {
  44.         Int0Init();
  45.   type1();
  46.   type2();
  47.   type3();
  48.   type4();
  49.    }
  50. }</div><div>void allbright()  //暂停全亮
  51. {
  52.     P0=0xff;
  53. Delay1ms(1000);
  54. }
  55. void type1()  //间隔亮灭
  56. {
  57.     P0=0xaa;
  58. Delay1ms(1000);
  59. P0=0x55;
  60. Delay1ms(1000);
  61. }
  62. void type2()  //半亮半灭
  63. {
  64.     P0=0xf0;
  65. Delay1ms(1000);
  66. P0=0x0f;
  67. Delay1ms(1000);
  68. }</div><div>void type3()  //流水效果1
  69. {
  70.     unsigned char n;
  71. GPIO_LED=0xfe;//1111_1110->1111_1101
  72. for(n=0;n<7;n++)       //左移7次,这样子就会到达最左边
  73. {
  74.   GPIO_LED=_crol_(GPIO_LED,1); //将GPIO_LED左移一位
  75.   Delay1ms(100);        //延时
  76. }
  77. for(n=0;n<7;n++)        //右移7次,这样子就会到达最右边
  78. {
  79.   GPIO_LED=_cror_(GPIO_LED,1); //将GPIO_LED右移一位
  80.   Delay1ms(100);        //延时
  81. }
  82. }</div><div>void type4()  //流水效果2
  83. {
  84. unsigned char n;
  85. GPIO_LED=0x01;//0000_0001->0000_0010
  86. for(n=0;n<7;n++)       //左移7次,这样子就会到达最左边
  87. {
  88.   GPIO_LED=_crol_(GPIO_LED,1); //将GPIO_LED左移一位
  89.   Delay1ms(100);        //延时
  90. }
  91. for(n=0;n<7;n++)        //右移7次,这样子就会到达最右边
  92. {
  93.   GPIO_LED=_cror_(GPIO_LED,1); //将GPIO_LED右移一位
  94.   Delay1ms(100);        //延时
  95. }
  96. }</div><div>
  97. </div><div>void Int0() interrupt 0  //外部中断0  K1按下自动进入该服务函数
  98. {
  99. ???
  100. }</div><div>

  101. </div>
复制代码


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

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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