找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2400|回復: 4
收起左側

求助:51單片機PWM調制實現模擬呼吸燈

[復制鏈接]
ID:578842 發(fā)表于 2020-8-7 20:33 | 顯示全部樓層 |閱讀模式
陳潤源home 發(fā)表于 2019-3-22 16:28 51單片機PWM調制實現模擬呼吸燈(Proteus仿真+程序
http://www.torrancerestoration.com/bbs/dpj-153979-1.html
  • #include<reg52.h>                        //調用含有51專用寄存器的頭文件
  • #define uchar unsigned char                 //用uchar代替unsigned char
  • #define uint unsigned int                 //用uint代替unsigned int
  • void delayms(int xms)                     //脈寬調制函數
  • {
  • while(xms--);
  • }
  • void main()                                            //主函數
  • {
  •            uint T=400,N=0;                   //定義周期
  •    while(1)
  •   {
  •            for(N=1;N<T;N++)                    //從暗逐漸變亮
  •         {
  •           P1=0x00;
  •           delayms(N);
  •           P1=0xff;
  •           delayms(T-N);
  •         }
  •         P1=0xff;
  •   for(N=T-1;N>0;N--)                     //從亮逐漸變暗
  •         {
  •           P1=0x00;
  •           delayms(N);
  •           P1=0xff;
  •           delayms(T-N);
  •         }
  •         delayms(N+10);                         //增加看到的熄滅效果
  •    }
  •   }





其中
  • void delayms(int xms)                     //脈寬調制函數
  • {
  • while(xms--);
  • }
感覺用的很巧妙,但細細品味又實在不明白怎么解釋,請大神們誰知道給我們這些小白講講唄。謝謝各位。


回復

使用道具 舉報

ID:382826 發(fā)表于 2020-8-8 07:47 | 顯示全部樓層
這就是個延時函數嘛,在for循環(huán)中不斷改變這個延時函數的時間從而改變燈的亮度。
回復

使用道具 舉報

ID:86926 發(fā)表于 2020-8-8 08:12 | 顯示全部樓層
就是總共400ms,由暗變亮,400ms就是周期時間,也就是暗和亮的總時間。亮Nms,滅T-Nms。由于N的慢慢自增,所以N的值是越來越大的,也就是亮的時間越來越長,滅的時間等于T(400ms)-N的時長,由于N在增大,所以,滅的時長就變短了,這樣就能實現亮度的調整了。反過來就是由亮變暗了。
回復

使用道具 舉報

ID:748788 發(fā)表于 2020-8-8 08:14 | 顯示全部樓層
delayms(int xms)函數中的xms代表延遲時間,xms--表示減1,每一循環(huán)減1一次,減到0不為真了,延遲函數就結束了
回復

使用道具 舉報

ID:578842 發(fā)表于 2020-8-8 23:57 | 顯示全部樓層
謝謝大家的解釋。明白了
回復

使用道具 舉報

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

本版積分規(guī)則

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

Powered by 單片機教程網

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