久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 4273|回復: 10
收起左側

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

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

單片機源碼:
  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. }

復制代碼


回復

使用道具 舉報

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

使用道具 舉報

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

include<reg52.h>

sbit qw=P1^1; 方向輸出
sbit OUT=P1^2;調速輸出
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)    當速度最低
                   {
                     t=9;     循環為最高
                   }
            while(!K1);  松手檢測
                 }
           }
           if(K2==0)      加速
           {
                 {
                   t++;      
                   if(t==10)   當速度最高
                   {
                     t=1;     循環為最低
                   }
          while(!K2);   松手檢測
                 }
           }
      if(K4==0)     停止鍵
{
    {
     OUT=0;      輸出0
    }
while(!K4);    松手檢測停止
   }
           if(K3==0)     反轉鍵
           {
                 {
                   qw=~qw;    電平取反 ,換向
                 }
    while(!K3);    松手檢測
           }                                       
        }
}

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

不好意思
回復

使用道具 舉報

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

使用道具 舉報

ID:158375 發表于 2018-5-16 08:40 | 顯示全部樓層
你的程序結構需要斟酌,現在的,按鍵太快了吧。
回復

使用道具 舉報

ID:330707 發表于 2018-5-16 09:30 | 顯示全部樓層
笨笨兔 發表于 2018-5-16 08:40
你的程序結構需要斟酌,現在的,按鍵太快了吧。

是的,按鍵按下去,轉速幾乎沒變化,不知道怎么修改好
回復

使用道具 舉報

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

請問如何修改啊
回復

使用道具 舉報

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

使用道具 舉報

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

請問大神改頻率怎么寫?
回復

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 成年人在线播放 | 日本午夜在线视频 | 羞羞午夜| 9191成人精品久久 | 国产九九精品 | 欧美日韩在线观看视频网站 | 欧美一区二区三区四区视频 | 日日草夜夜草 | 日本一二三区高清 | 毛片av免费在线观看 | 久久久网| 国产精品一区二区三区久久久 | www日本在线 | 欧美一区二区三区在线免费观看 | 日韩有码一区 | 欧美理伦片在线播放 | 久久久精品天堂 | 亚洲精品视频久久 | 在线观看视频h | 成人亚洲片 | 亚州午夜精品 | 亚洲国产精品99久久久久久久久 | 国产一区二区三区四区 | 超碰97在线免费 | 成人免费视频网站在线观看 | 日韩视频在线免费观看 | 欧美亚洲国产一区二区三区 | 亚洲黄色一级毛片 | 国产一区中文字幕 | 国产精品久久久久久高潮 | 日韩精品在线观看网站 | 午夜电影在线播放 | av天天爽| 欧美成人在线影院 | 亚洲久久一区 | 中文字幕一区二区三区精彩视频 | 五月婷婷 六月丁香 | 亚洲 中文 欧美 日韩 在线观看 | 国产在线看片 | 亚洲精品在线91 | 亚洲国产精品人人爽夜夜爽 |