找回密码
 立即注册

QQ登录

只需一步,快速开始

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

请问我这段单片机开关控制继电器代码有什么问题?

[复制链接]
跳转到指定楼层
楼主
ID:350479 发表于 2018-6-19 17:26 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
P1.4接继电器的控制口,控制继电器的开关
P0.0接开关K1
按下开关后定时2秒后在给P1.4输入低电平,选通继电器。

#include<reg52.h>
typedef unsigned char u8;
typedef unsigned int u16;
sbit rely=P1^4;
sbit k1=P0^0;
void InitTimer1(void)
{
    TMOD = 0x10;//定时2.5ms
    TH1 = 0xFC;
    TL1 = 0x18;
    TR1 = 0;
}
void delay(u16 i)
{
while(i--);
}
void keyscan()
{
u8 m=0;
  if(m==0)
  {
   if(k1==0)
   {
    delay(1000);
    if(k1==0)
    {
     TR1=1;
     m=1;
    }
    while(!k1);
   }
  }
  else
  {
   if(k1==0)
   {
    delay(1000);
    if(k1==0)
    {
     rely=1;
     m=0;
    }
    while(!k1);
   }
  }
  
}
void process()
{     
  u8 j=0;
  if(TF1==1)
  {
   TF0=0;
   TH0=0XFC;
   TL0=0X18;//定时1ms
   j++;
   if(j==2000)  //1s
   {
    j=0;
    rely=0;
   
   }
  }
}
void main()
{

while(1)
{
keyscan();
process();
}
}

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

使用道具 举报

沙发
ID:155507 发表于 2018-6-19 23:21 | 只看该作者
  1. #include<reg52.h>

  2. typedef unsigned char u8;
  3. typedef unsigned int u16;
  4. sbit rely=P1^4;
  5. sbit k1=P0^0;
  6. u8 m=0;  //要用全局变量
  7. //u8 j=0;  //有问题 u8 是0-255
  8. u16 j=0;  //要用全局变量
  9. void InitTimer1(void) //定时器初始化函数
  10. {
  11.         TMOD = 0x10;//定时2.5ms
  12.         TH1 = 0xFC;
  13.         TL1 = 0x18;
  14.         TR1 = 0; //关定时器1定时器开关
  15. }
  16. void delay(u16 i)
  17. {
  18.         while(i--);
  19. }
  20. void keyscan()
  21. {
  22.         //u8 m=0; //有问题 要用全局变量
  23.         if(m==0)
  24.         {
  25.                 if(k1==0)
  26.                 {
  27.                         delay(1000);
  28.                         if(k1==0)
  29.                         {
  30.                                 TR1=1; //打开定时器1定时器开关
  31.                                 m=1;
  32.                         }
  33.                         while(!k1);
  34.                 }
  35.         }
  36.         else
  37.         {
  38.                 if(k1==0)
  39.                 {
  40.                         delay(1000);
  41.                         if(k1==0)
  42.                         {
  43.                                 rely=1;
  44.                                 m=0;
  45.                         }
  46.                         while(!k1);
  47.                 }
  48.         }

  49. }
  50. void process() //使用软件查询方式 定时计数器1
  51. {     
  52.         //u8 j=0;  //有问题  要用全局变量
  53.         if(TF1==1) // 定时器1溢出标志位
  54.         {
  55.                 TF0=0;
  56.                 TH0=0XFC;
  57.                 TL0=0X18;//定时1ms
  58.                 j++;
  59.                 if(j==2000)  //1s
  60.                 {
  61.                         j=0;
  62.                         rely=0;
  63.                        
  64.                 }
  65.         }
  66. }

  67. void main()
  68. {
  69.         InitTimer1();   // 有问题 没有执行定时器初始化函数
  70.         while(1)
  71.         {
  72.                 keyscan();
  73.                 process();
  74.         }
  75. }

复制代码
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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