欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

通過按鍵調節PWM進而控制led亮度的proteus仿真達不到預期的效果

[復制鏈接]
跳轉到指定樓層
樓主
各位大神,誰能幫我解答一下,為什么我的仿真達不到預期的效果,原代碼和圖像請參考
pwm.rar (80.14 KB, 下載次數: 50)
我所參考的鏈接:http://blog.163.com/asm_c/blog/static/2482031132012716860918/
我的結果截圖:


單片機源程序如下:
  1. #include<reg52.h>

  2. unsigned char a, b;

  3. sbit K1 = P3^2;     //定義兩個調整占空比的按鍵
  4. sbit K2 = P3^3;

  5. //------------------------------------------

  6. void  delay(unsigned int i)
  7. {
  8.     unsigned char j;
  9.     while(i--)  
  10.                 for(j = 0; j < 60; j++);
  11. }

  12. //------------------------------------------

  13. void main()
  14. {
  15.     TMOD = 0x01;               //T0定時方式1
  16.     TH0 = (65536 - 500) / 256; //500us@12MHz
  17.     TL0 = (65536 - 500) % 256;

  18.         EA = 1;
  19.     TR0 = 1;
  20.     ET0 = 1;   

  21.     a = 0;
  22.     b = 10;
  23.         P3^2=0;

  24.     while(1)  {
  25.       if(!K1)
  26.           {
  27.                   delay(20);
  28.                   if(!K1)
  29.                   {
  30.                           b++;
  31.                           if(b > 19)
  32.                                   b = 19;
  33.                           while(!K1);
  34.                   }
  35.           }
  36.       if(!K2)
  37.           {
  38.                   delay(20);
  39.                   if(!K2)
  40.                   {
  41.                           b--;
  42.                           if(b < 1)
  43.                           b = 1;
  44.                           while(!K2);
  45.                   }
  46.           }

  47.       //以上兩行是檢查按鍵、延時消抖、修改占空比、等待按鍵釋放,b = 1~19
  48.       P0 = ((b / 10) << 4) + b % 10; //顯示占空比等級
  49.     }
  50. }

  51. //------------------------------------------

  52. void time0() interrupt 1
  53. {
  54.     TL0 = (65536 - 493) % 256; //補償中斷進入時間
  55.     TH0 = (65536 - 493) / 256; //500us@12MHz

  56.     a--;                       //a = 1~20

  57.     if(a == 0)  
  58.         {
  59.                 a = 20;
  60.                 P2 = 0;
  61.         } //周期=20*500us

  62.     if(a <= b)  
  63.                 P2 = 255;      //輸出到示波器

  64.     P1 = ~P2;   //輸出到LED,低電平發光
  65. }

  66. //------------------------------------------
復制代碼


分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:222948 發表于 2018-3-13 21:30 | 只看該作者
把31行的P3^2=0;改為K1=0;就可以了
回復

使用道具 舉報

板凳
ID:288202 發表于 2018-3-14 10:33 | 只看該作者
999333 發表于 2018-3-13 21:30
把31行的P3^2=0;改為K1=0;就可以了

您好,謝謝您的解答。我已經解決了我之前說的問題。31行那個代碼應該是不存在的,也就是可能是我稀里糊涂的不知道怎么加上去的。不管怎樣,還是謝謝您!

但是我現在又發現了一個問題,就是當pwm調節在10-14的時候,LED會出現閃爍的情況,在15-19的時候,LED不會出現閃爍。但當我在D2(LED)再并聯一個LED之后,只有在19的時候,LED才不會出現閃爍,請問這是為什么呢?是電壓的問題嗎?可是一般用proteus仿真,對于電阻、電容等器件的值的大小不是沒有什么影響的嗎(難道是我一直以來的錯誤觀點?)?況且并聯電壓都一樣的呀?那是電流大小的問題嗎?
回復

使用道具 舉報

地板
ID:288202 發表于 2018-3-14 13:33 | 只看該作者
999333 發表于 2018-3-13 21:30
把31行的P3^2=0;改為K1=0;就可以了

隨后我用proteus仿真電壓表測量D2(led)兩端的電壓,發現跟電壓有關系,但是如果加入穩壓電路在D2(led)之前的話,就會導致無法實現pwm控制LED的亮度了,這該怎么解決呢?
回復

使用道具 舉報

5#
ID:291802 發表于 2018-3-14 14:41 來自觸屏版 | 只看該作者
proteus無法打開
回復

使用道具 舉報

6#
ID:287155 發表于 2018-3-15 08:03 來自觸屏版 | 只看該作者
Proteus只是做51程序仿真的,在做模擬仿真是不理想的,根本達不到預期效果,最好還動手實際操作!
回復

使用道具 舉報

7#
ID:288202 發表于 2018-3-15 11:41 | 只看該作者

可能是我用的proteus版本太高了,是8.6版的好像
回復

使用道具 舉報

8#
ID:288202 發表于 2018-3-15 11:43 | 只看該作者
ASDL 發表于 2018-3-15 08:03
Proteus只是做51程序仿真的,在做模擬仿真是不理想的,根本達不到預期效果,最好還動手實際操作!

因為在外面實習,身邊沒實物,也沒開發板
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表