微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 请大师们给指点一二。多谢!

请大师们给指点一二。多谢!

时间:10-02 整理:3721RD 点击:

  1. /***************************
  2.         独立按键控制继电器
  3. ***************************/
  4. #include <reg52.h>

  5. #define uchar unsigned char

  6. sbit KEY = P1 ^ 0;
  7. sbit RelayEN = P0 ^ 0;                                   //定义继电器开启信号

  8. void Timer0Init();                                           //声明定时器0初始化函数
  9. void RelayProcess();                                   //声明断电器处理函数

  10. uchar count = 0;                                           //计秒数

  11. void main()                                                           //主函数
  12. {
  13.         RelayEN = 1;                                           //开机时关闭继电器,否则一上电继电器有动作;

  14.         Timer0Init();
  15.         RelayProcess();
  16.         
  17. }

  18. void Timer0Init()                                           //定时器初始化函数
  19. {
  20.         TMOD |= 0x01;                                           //“|”使用多个定时器时不受影响
  21.         TH0 = 0xFC;                                                   //定时1MS
  22.         TL0 = 0x67;
  23.         EA = 1;                                                           //开启总中断
  24.         ET0 = 1;                                                   //开启定时器0中断
  25. }

  26. void RelayProcess()                                          //继电器处理函数
  27. {
  28.         KEY = 0x01;                                                  //读外部状态时,先使端口输出高电平;
  29.         while (1)
  30.         {
  31.                 if(!KEY)                                          //判定有无按键按下
  32.                 {
  33.                         TR0 = 1;                                  //按键按下开启定时器0,溢出后开启中断
  34.                         
  35.                         if (count >= 20)                  //判定秒数是否达到20MS,即去抖
  36.                         {
  37.                                 count = 0;
  38.                                 if (!KEY)
  39.                                 {
  40.                                         RelayEN = ~RelayEN;//当按键按下时,改变继电器的状态
  41.                                         while(!KEY);           //等待按键释放;
  42.                                 }
  43.                         }
  44.                 }
  45.         }
  46.         
  47. }

  48. void Timer0() interrupt 1          //定时器0中断函数
  49. {
  50.         count++;                                  //计秒数
  51.         TR0 =0;                                          //关闭定时器,否则无按键按下也计数;
  52.         TH0 = 0xFC;                                  //重新赋值给定时器0
  53.         TL0 = 0x67;
  54.                                                                         
  55. }

复制代码


Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top