找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

單片機(jī)按鍵改變輸出方波的頻率,有大神能幫我看看錯在哪里嗎

[復(fù)制鏈接]
ID:330707 發(fā)表于 2018-5-15 20:40 | 顯示全部樓層 |閱讀模式
寫了一個定時器輸出方波的程序,然后通過按鍵改變輸出方波的頻率,但是實(shí)際使用沒效果,頻率沒在變,請大神們看下問題出在哪里
(K1,K2是調(diào)頻率的)求大神們指點(diǎn)一下

單片機(jī)源碼:
  1. #include<reg52.h>

  2. sbit qw=P1^1;
  3. sbit OUT=P1^2;
  4. sbit K1=P2^0;
  5. sbit K2=P2^1;
  6. sbit K3=P2^2;
  7. sbit K4=P2^3;
  8. int i=0,t=5;

  9. void main(void)           
  10. {
  11.   TMOD=0x01;  
  12.   EA=1;        
  13.   ET0=1;      
  14.   TR0=1;      
  15.   TH0=(65536-20)/256;      
  16.   TL0=(65536-20)%256;     
  17.   qw=0;                    
  18.     while(1)
  19.         {               
  20.            if(K1==0)  
  21.            {
  22.                  {
  23.                    t--;
  24.                    if(t==0)   
  25.                    {
  26.                      t=9;     
  27.                    }
  28.                  while(!K1);  
  29.                  }
  30.            }
  31.            if(K2==0)      
  32.            {
  33.             
  34.                  {
  35.                    t++;      
  36.                    if(t==10)   
  37.                    {
  38.                      t=1;     
  39.                    }
  40.                  while(!K2);   
  41.                  }
  42.            }
  43.       if(K4==0)     
  44. {
  45.    
  46. {
  47. TR0=0;
  48.      OUT=0;      
  49.     }
  50. while(!K4);   
  51.    }
  52.            if(K3==0)     
  53.            {

  54.                  {
  55.                    qw=~qw;   
  56.                  }
  57.              while(!K3);   
  58.            }                                       
  59.         }
  60. }

  61. void Time0_serve(void)        interrupt 1      
  62. {
  63.   TH0=(65536-20)/256;               
  64.   TL0=(65536-20)%256;               
  65.   i++;
  66.   if(i==t)
  67.   {
  68.         OUT=0;
  69.   }
  70.   if(i==10)
  71.   {
  72.     i=0;
  73.     OUT=1;
  74.   }
  75. }

復(fù)制代碼


回復(fù)

使用道具 舉報(bào)

ID:190832 發(fā)表于 2018-5-15 22:39 | 顯示全部樓層
寫程序要養(yǎng)成良好的備注習(xí)慣,不然別人怎么看的懂你的代碼
回復(fù)

使用道具 舉報(bào)

ID:330707 發(fā)表于 2018-5-15 23:09 | 顯示全部樓層
hange_v 發(fā)表于 2018-5-15 22:39
寫程序要養(yǎng)成良好的備注習(xí)慣,不然別人怎么看的懂你的代碼

include<reg52.h>

sbit qw=P1^1; 方向輸出
sbit OUT=P1^2;調(diào)速輸出
sbit K1=P2^0; 減速
sbit K2=P2^1; 加速
sbit K3=P2^2; 方向按鍵
sbit K4=P2^3;停止按鍵
int i=0,t=5;

void main(void)           
{
  TMOD=0x01;  使用定時器T0模式1
  EA=1;        開總中斷
  ET0=1;       定時器T0中斷允許
  TR0=1;       啟動定時器T0
  TH0=(65536-20)/256;      定時器T0賦初值
  TL0=(65536-20)%256;     定時器T0賦初值
  qw=0;                    取反初值
    while(1)
        {               
           if(K1==0)  減速
           {
                 {
                   t--;
                   if(t==0)    當(dāng)速度最低
                   {
                     t=9;     循環(huán)為最高
                   }
            while(!K1);  松手檢測
                 }
           }
           if(K2==0)      加速
           {
                 {
                   t++;      
                   if(t==10)   當(dāng)速度最高
                   {
                     t=1;     循環(huán)為最低
                   }
          while(!K2);   松手檢測
                 }
           }
      if(K4==0)     停止鍵
{
    {
     OUT=0;      輸出0
    }
while(!K4);    松手檢測停止
   }
           if(K3==0)     反轉(zhuǎn)鍵
           {
                 {
                   qw=~qw;    電平取反 ,換向
                 }
    while(!K3);    松手檢測
           }                                       
        }
}

void Time0_serve(void)        interrupt 1        定時器中斷
{
  TH0=(65536-20)/256;                定時器高八位賦值
  TL0=(65536-20)%256;        定時器低八位賦值       
  i++;/0-10循環(huán)
  if(i==t)
  {
        OUT=0;/
  }
  if(i==10)
  {
    i=0;
    OUT=1;/
  }
}

不好意思
回復(fù)

使用道具 舉報(bào)

ID:248733 發(fā)表于 2018-5-16 00:00 | 顯示全部樓層
while(!K1);
while(!K2);
while(!K3);
while(!K4);
這個樣操作會進(jìn)入死循環(huán),讓你找不到錯誤的地方
回復(fù)

使用道具 舉報(bào)

ID:158375 發(fā)表于 2018-5-16 08:40 | 顯示全部樓層
你的程序結(jié)構(gòu)需要斟酌,現(xiàn)在的,按鍵太快了吧。
回復(fù)

使用道具 舉報(bào)

ID:330707 發(fā)表于 2018-5-16 09:30 | 顯示全部樓層
笨笨兔 發(fā)表于 2018-5-16 08:40
你的程序結(jié)構(gòu)需要斟酌,現(xiàn)在的,按鍵太快了吧。

是的,按鍵按下去,轉(zhuǎn)速幾乎沒變化,不知道怎么修改好
回復(fù)

使用道具 舉報(bào)

ID:330707 發(fā)表于 2018-5-16 09:35 | 顯示全部樓層
polo_angel 發(fā)表于 2018-5-16 00:00
while(!K1);
while(!K2);
while(!K3);

請問如何修改啊
回復(fù)

使用道具 舉報(bào)

ID:330198 發(fā)表于 2018-5-16 12:03 | 顯示全部樓層
你的程序改變的是占空比。要想改變頻率就要給定時器重新賦變化的值。
回復(fù)

使用道具 舉報(bào)

ID:330707 發(fā)表于 2018-5-16 13:40 | 顯示全部樓層
zhanghyg 發(fā)表于 2018-5-16 12:03
你的程序改變的是占空比。要想改變頻率就要給定時器重新賦變化的值。

請問大神改頻率怎么寫?
回復(fù)

使用道具 舉報(bào)

ID:331240 發(fā)表于 2018-5-16 13:52 | 顯示全部樓層
你這代碼寫的,格式完全不對
回復(fù)

使用道具 舉報(bào)

ID:331422 發(fā)表于 2018-5-16 16:58 | 顯示全部樓層
建議通過PCA寄存器實(shí)現(xiàn)頻率和占空比可變的PWM波輸出
回復(fù)

使用道具 舉報(bào)

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

本版積分規(guī)則

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

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

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