找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

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

頻率可調(diào)的方波發(fā)生器(protues仿真+單片機(jī)源碼)

[復(fù)制鏈接]
ID:362757 發(fā)表于 2018-7-1 22:54 | 顯示全部樓層 |閱讀模式
方波發(fā)生器仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)
0.png 0.png

單片機(jī)源程序如下:


  1. #include<reg51.h>

  2. #define uchar unsigned char

  3. #define uint unsigned int

  4. float fosc=12000000; //系統(tǒng)時(shí)鐘頻率

  5. sbit KEY1=P1^0; //控制頻率百位;

  6. sbit KEY2=P1^1; //控制頻率十位;

  7. sbit KEY3=P1^2; //控制占空比十位;

  8. sbit KEY4=P1^3; //控制占空比個(gè)位;

  9. sbit OUTPUT=P2^0; //方波輸出端口;

  10. uchar zkb;

  11. uint freq;

  12. uchar TIMER0_L,TIMER0_H,TIMER1_L,TIMER1_H; //定

  13. /****************************

  14. 延時(shí)子程序

  15. ****************************/

  16. void delay(uchar n) //延時(shí)

  17. {

  18. uchar i;

  19. while(n--)

  20. {for(i=255;i>0;i--)

  21. {}

  22. }}

  23. /*******************

  24. 系統(tǒng)初始化

  25. *******************/

  26. void chushihua(void)

  27. {

  28. P1=0x0f;

  29. freq=50;

  30. zkb=50;

  31. TIMER0_L=0xe0;

  32. TIMER0_H=0xb1;

  33. TIMER1_L=0xf0;

  34. TIMER1_H=0xd8;

  35. TL0=0xe0; //初始頻率 50Hz 定時(shí) 20ms

  36. TH0=0xb1;

  37. TL1=0xf0; //初始占空比 50%定時(shí) 10ms

  38. TH1=0xd8;

  39. TMOD=0x11; //定時(shí)器 1 和定時(shí)器 0 工作在方式 1

  40. IT0=1; //選擇 INT0 為下降沿觸發(fā)方式

  41. EX0=1; //外部中斷 0 允許

  42. ET0=1; //定時(shí)器 1 和定時(shí)器 0 中斷允許

  43. ET1=1;

  44. EA=1; //系統(tǒng)中斷允許

  45. TR0=1; //定時(shí)器 1 和定時(shí)器 0 開始定時(shí)

  46. TR1=1;

  47. }

  48. /*********************

  49. 主函數(shù)
  50. *********************/

  51. void main(void)

  52. {

  53. chushihua(); //系統(tǒng)初始化

  54. while(1)

  55. { }

  56. }

  57. /************************

  58. 定時(shí)器中斷子程序

  59. ************************/

  60. void Timer0_freq() interrupt 1 //頻率定時(shí)器 0 中斷

  61. {

  62. TR1=1; //啟動(dòng)定時(shí)器 1,占空比定時(shí)

  63. TL0=TIMER0_L;

  64. TH0=TIMER0_H;

  65. OUTPUT=1; //輸出高電平

  66. }

  67. void Timer1_zkb() interrupt 3 //占空比定時(shí)器 1 中斷

  68. {

  69. TR1=0; //定時(shí)器 1 停止

  70. TL1=TIMER1_L;

  71. TH1=TIMER1_H;

  72. OUTPUT=0; //輸出低電平

  73. }

  74. /***********************

  75. 鍵盤掃描子程序
  76. ***********************/

  77. void keyscan() interrupt 0 using 1 //外部中斷 0

  78. {float TF0,TZ1;

  79. EX0=0; //關(guān)中斷

  80. delay(10); //延時(shí)消抖

  81. if(P1!=0x0f) //判斷是否有鍵按下

  82. {

  83. if(KEY1==0) freq+=100; //按鍵為 1 號(hào),頻率加 100

  84. if(KEY2==0) freq-=100; //按鍵為 2 號(hào),頻率減 100

  85. if(freq>5000) freq=50; //頻率大于 5000Hz,重新賦值為 5



  86. if(KEY3==0) zkb+=10; //按鍵為 3 號(hào),占空比加 10

  87. if(KEY4==0) zkb-=10; //按鍵為 4 號(hào),占空比減 10

  88. if(zkb>100) zkb=1; //占空比大于 100,重新賦值為

  89. TF0=(65536-fosc/(12.0*freq));//頻率定時(shí)初值

  90. TZ1=(65536-(fosc*zkb)/(12.0*100*freq)); //占空比定時(shí)

  91. TIMER0_H=(uint)TF0/256;

  92. TIMER0_L=(uint)TF0%256;

  93. TIMER1_H=(uint)TZ1/256;

  94. TIMER1_L=(uint)TZ1%256;

  95. }

  96. P1=0x0f; //給鍵盤掃描口賦初值

  97. EX0=1; //開中斷

  98. TR0=1; //定時(shí)器 1 和定時(shí)器 0 開始定時(shí)

  99. TR1=1;}
復(fù)制代碼

所有資料51hei提供下載:
頻率可調(diào)方波發(fā)生器(protues仿真).zip (52.7 KB, 下載次數(shù): 130)


回復(fù)

使用道具 舉報(bào)

ID:1023527 發(fā)表于 2022-5-18 15:54 | 顯示全部樓層
我這有三個(gè)問(wèn)題能佛麻否煩你回答一下1.怎么樣轉(zhuǎn)化為ADPWM波?
回復(fù)

使用道具 舉報(bào)

ID:1023527 發(fā)表于 2022-5-18 15:56 | 顯示全部樓層
2.4個(gè)按鍵如何共用一個(gè)中斷。3.請(qǐng)用程序解釋一下用的是延時(shí)還是定時(shí)。
回復(fù)

使用道具 舉報(bào)

ID:540173 發(fā)表于 2022-5-20 17:34 | 顯示全部樓層
能否實(shí)現(xiàn)編碼控制
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

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