找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1975|回復(fù): 1
收起左側(cè)

請問我這段單片機(jī)開關(guān)控制繼電器代碼有什么問題?

[復(fù)制鏈接]
ID:350479 發(fā)表于 2018-6-19 17:26 | 顯示全部樓層 |閱讀模式
P1.4接繼電器的控制口,控制繼電器的開關(guān)
P0.0接開關(guān)K1
按下開關(guān)后定時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();
}
}

回復(fù)

使用道具 舉報(bào)

ID:155507 發(fā)表于 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) //定時器初始化函數(shù)
  10. {
  11.         TMOD = 0x10;//定時2.5ms
  12.         TH1 = 0xFC;
  13.         TL1 = 0x18;
  14.         TR1 = 0; //關(guān)定時器1定時器開關(guān)
  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定時器開關(guān)
  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() //使用軟件查詢方式 定時計(jì)數(shù)器1
  51. {     
  52.         //u8 j=0;  //有問題  要用全局變量
  53.         if(TF1==1) // 定時器1溢出標(biāo)志位
  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();   // 有問題 沒有執(zhí)行定時器初始化函數(shù)
  70.         while(1)
  71.         {
  72.                 keyscan();
  73.                 process();
  74.         }
  75. }

復(fù)制代碼
回復(fù)

使用道具 舉報(bào)

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表