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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2570|回復: 2
打印 上一主題 下一主題
收起左側

用pwm調節led燈亮度 編譯沒毛病 燒錄到單片機沒反應 這個代碼哪里出問題?

[復制鏈接]
跳轉到指定樓層
樓主
ID:841280 發表于 2020-11-24 00:12 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
150黑幣
*單片機實現PWM調節LED燈的亮度*/
#include<reg52.h>
#define uchar unsigned char
sbit P2_0=P2^0;
sbit key1=P3^4;
sbit key2=P3^5;
uchar zkb,i;// zkb指占空比
void delay(uchar z)
{
  uchar x,y;
  for(x=z;x>0;x--)
   for(y=110;y>0;y--);
}
void init()  //初始化函數
{
     TMOD=0X01;
  TH0=(65536-10)/256;
  TL0=(65536-10)%256;
  EA=1;
  ET0=1;
  TR0=1;
}
void keyscan()  //鍵盤掃描
  {
    P3=0XFF;
if(key1==0)
  {
   delay(5);
    if(key1==0)
    {
     while(!key1);
     
  if(zkb<9)
   {
     zkb++;
   }
  
    }
  }
if(key2==0)
  {
   delay(5);
    if(key2==0)
    {
     while(!key2);
     if(zkb>0)  
   {
     zkb--;
   }

    }
  }  
  }
void main() //主函數
  {
   
    zkb=2;
    init();
while(1)
{
  keyscan();
}
  }
void time0(void) interrupt 1  //中斷函數
  {
   
    TH0=(65536-10)/256;
TL0=(65536-10)%256;
++i;
if(i>10)
   {
   i=0;
   };
if(i<=zkb)
{
  P2_0=1;
}
else P2_0=0;

  }

最佳答案

查看完整內容

樓主這個程序從表面看沒有什么毛病,其實有諸多毛病。 1.設置中斷周期10us,但10us時間根本完不成中斷任務,必然達不到設計意圖。 2.延時程序看來按1ms寫的,但數據類型用錯,實際延時時間只有1/4。 3.按鍵掃描函數語句排列不當,導致按鍵松手才能響應。 4.計數方式不當,導致PWM控制范圍只能10~90%。達不到0~100%。 修改如下:
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏1 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:213173 發表于 2020-11-24 00:12 | 只看該作者
樓主這個程序從表面看沒有什么毛病,其實有諸多毛病。
1.設置中斷周期10us,但10us時間根本完不成中斷任務,必然達不到設計意圖。
2.延時程序看來按1ms寫的,但數據類型用錯,實際延時時間只有1/4。
3.按鍵掃描函數語句排列不當,導致按鍵松手才能響應。
4.計數方式不當,導致PWM控制范圍只能10~90%。達不到0~100%。
修改如下:
  1. #include<reg52.h>
  2. #define uchar unsigned char
  3. #define uint unsigned int
  4. sbit P2_0=P2^0;
  5. sbit key1=P3^4;
  6. sbit key2=P3^5;
  7. uchar zkb,i;// zkb指占空比
  8. void delay(uint z)
  9. {
  10.         uint x,y;
  11.         for(x=z;x>0;x--)
  12.                 for(y=110;y>0;y--);
  13. }
  14. void init()  //初始化函數
  15. {
  16.         TMOD=0X01;
  17.         TH0=(65536-100)/256;
  18.         TL0=(65536-100)%256;
  19.         EA=1;
  20.         ET0=1;
  21.         TR0=1;
  22. }
  23. void keyscan()  //鍵盤掃描
  24. {
  25.         if(key1==0)
  26.         {
  27.                 delay(10);
  28.                 if(key1==0)
  29.                 {
  30.                         if(zkb<10)
  31.                         {
  32.                                 zkb++;
  33.                         }
  34.                         while(!key1);
  35.                 }
  36.         }
  37.         if(key2==0)
  38.         {
  39.                 delay(10);
  40.                 if(key2==0)
  41.                 {
  42.                         if(zkb>0)  
  43.                         {
  44.                                 zkb--;
  45.                         }
  46.                         while(!key2);
  47.                 }
  48.         }  
  49. }
  50. void main()
  51. {
  52.         zkb=2;
  53.         init();
  54.         while(1)
  55.         {
  56.                 keyscan();
  57.         }
  58. }
  59. void time0(void) interrupt 1  //中斷函數
  60. {
  61.         TH0=(65536-100)/256;
  62.         TL0=(65536-100)%256;
  63.         ++i;
  64.         if(i==10)
  65.         {
  66.                 i=0;
  67.         }
  68.         if(zkb>i)
  69.         {
  70.                 P2_0=1;
  71.         }
  72.         else P2_0=0;
  73. }
復制代碼
回復

使用道具 舉報

板凳
ID:443955 發表于 2020-11-24 10:06 | 只看該作者
uint timer0_count=0;                                //計數次數,由于定時器的本質是計數器

void timer0_init(void)        //定時器0初始化
{
        TMOD=0x01;                        //設置定時器0的定時方式
        TH0=(65536-50000)/256;        //設置初值,相當于每50毫秒進入一次中斷函數
        TL0=(65536-50000)/256;
        EA=1;                                //開啟總中斷
        ET0=1;                                //開啟定時器0中斷
        TR0=1;                                //啟動定時器0中斷
}

void timer0_interrupt(void)interrupt 1                //定時器0的中斷函數
{
        count++;                                                //每加一次代表過了一個50毫秒
        if(count==220)                                        //代表過了11秒
        {
                //然后打開LED2;
        }
        //之后的15秒鐘的自己就OK了吧
}

評分

參與人數 1黑幣 +30 收起 理由
admin + 30 回帖助人的獎勵!

查看全部評分

回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 久久精品国产精品青草 | av一区二区三区在线观看 | 日韩国产专区 | 精品国产欧美一区二区三区不卡 | 精品国产一区二区在线 | 国产成人艳妇aa视频在线 | 亚洲精品一区二区在线观看 | 久久综合九色综合欧美狠狠 | av黄色在线 | 色婷婷综合成人av | 国产一区二区在线播放视频 | 午夜一级做a爰片久久毛片 精品综合 | 国产精品爱久久久久久久 | 97国产精品 | 波多野结衣一区二区三区 | 国产精品久久久久一区二区三区 | 中文在线一区 | 97色在线视频 | 欧美久| 亚洲美女在线视频 | 亚洲精品久久久久久一区二区 | 国产精品久久久久久久久久久久久久 | 国产日产欧产精品精品推荐蛮挑 | 中文字幕av中文字幕 | 日韩av一二三区 | 中文字幕一区二区三区精彩视频 | 亚洲欧美日韩精品 | 亚洲成人免费av | 日韩精品一区二区不卡 | 在线观看免费高清av | 欧美日韩国产中文 | 亚洲激情在线观看 | 国产三级精品三级在线观看四季网 | 国精产品一品二品国精在线观看 | 欧美三级在线 | 日本三级做a全过程在线观看 | 成人在线视频免费播放 | 国产不卡一区 | 国产精品久久久久免费 | 97色伦网| 91看片免费 |