51单片机定时器0中断方式点亮LED灯源程序

[复制链接]
查看1 | 回复0 | 2021-6-11 02:49:33 | 显示全部楼层 |阅读模式
此程序采用的模块化编程,模块化在编程中很重要。要想学号单片机,请务必掌握。案例实际使用的STC15单片机,但是对于51单片机也同样的使用。只需要将15单片机的头文件更改为51单片机的头文件即可。还有几处需要该的地方我在程序中都有详细的注释。
用到的硬件有有源蜂鸣器(就是比无源蜂鸣器多了一个震荡电路)
1.jpg
另外就是15单片机的一块开发板,上面集成了LED灯,在此就不需要外置LED灯了
2.jpg
原理图
3.jpg
定时器 中断 是单片机中的重点难点之一
以下部分代码,完整代码见附件
  1. #include "int_0time.h" //自定义的头文件

  2. void Timer0_Tint(void) //初始化定时器0
  3. {
  4. //        AUXR &= 0X7F;      //定时/计数器辅助寄存器,用51单片机此处忽略屏蔽
  5.         TMOD &= 0XF0;      //定时器计数器的工作模式寄存器(配置为定时器启动仅由TR0决定)
  6.         TH0   = 0XDC;      //给计数寄存器赋值          //(选择为定时模式,工作模式0)
  7.         TL0   = 0X00;      //TH0、TR0配置的定时值为10ms
  8.         TR0   = 1 ;        //运行控制位(允许允许)
  9.         ET0   = 1 ;        //定时器0的中断允许控制位(允许T0中断)
  10.         EA    = 1 ;        //总中断(使用中断,必须打开总中断)
  11. }
  12. /****************************************
  13. void Timer0_Rountine(void) interrupt 1 (定时器0的中断函数,中断号为 1 )
  14. ****************************************/
  15. void Timer0_Rountine(void) interrupt 1  
  16. {
  17.         static unsigned char time = 0 ;    //static 静态变量(作用限制作用域)定义time无符号char型变量只在
  18.         time++;  //自加1,记录溢出的次数   //此函数内有用
  19.         if(time == 100)                    //1S
  20.         {
  21.                 time = 0;                      //清除中断次数
  22.                 buzz =~ buzz;                  //蜂鸣器端口状态翻转
  23.                 LED1 =~ LED1;                  //灯端口状态翻转
  24.         }
  25. }

  26. 以下是.h文件代码

  27. #ifndef __TIN_0TIMER_H__
  28. #define __TIN_0TIMER_H__

  29. #include <STC15W.h>      //此处是自定义的15单片机头文件(51单片机改成reg51.h)

  30. sbit LED1 = P0^5;        //
  31. sbit LED2 = P0^7;
  32. sbit buzz = P0^3;        //蜂鸣器的端口定义(蜂鸣器用的是有源蜂鸣器,有源和无源蜂鸣器可自行百度)

  33. extern void Timer0_Tint(void);  //extern 外部变量声明 声明定时器0中断给外部函数调用

  34. #endif
  35. ```

  36. main 代码

  37. #include "int_0time.h"   //自定义的头文件

  38. void main (void)         //主函数
  39. {
  40.         P0M1 = 0 ; P0M0 = 0 ;//配置15单片机的P0端口为准双向口模式,51单片机此处可忽略屏蔽
  41.         Timer0_Tint();       //调用初始化定时器0
  42.         while(1)
  43.         {
  44.                 LED2 = 0;        //主任务,LED2常亮 中断发生后LED1被点亮 并伴随蜂鸣器发声
  45.         }
  46. }
复制代码
定时器0中断点亮LED灯.zip (313.1 KB, 售价: 1 工控币)


回复

使用道具 举报

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

本版积分规则