標(biāo)題: 頻率和占空比可調(diào)的方波發(fā)生器單片機(jī)源程序,哪位大神幫忙改一下 [打印本頁]

作者: 315849444    時(shí)間: 2018-9-4 09:40
標(biāo)題: 頻率和占空比可調(diào)的方波發(fā)生器單片機(jī)源程序,哪位大神幫忙改一下
  1. #include<reg51.h>
  2. #define uchar unsigned char
  3. #define uint unsigned int
  4. float fosc=12000000;   
  5. sbit KEY1=P1^0;        
  6. sbit KEY2=P1^1;        
  7. sbit KEY3=P1^2;        
  8. sbit KEY4=P1^3;  
  9. sbit RS = P3^5;
  10. sbit RW = P3^6;
  11. sbit EN = P3^4;
  12. sbit OUTPUT=P2^0;      
  13. uchar zkb;
  14. uint freq;
  15. uchar TIMER0_L,TIMER0_H,TIMER1_L,TIMER1_H;
  16. void delay(uchar n)     
  17. {
  18. uchar i;
  19. while(n--)
  20. {for(i=255;i>0;i--)
  21. {}
  22. }}
  23. void chushihua()
  24. {
  25. P1=0x0f;
  26. freq=50;
  27. zkb=50;
  28. TIMER0_L=0xe0;
  29. TIMER0_H=0xb1;
  30. TIMER1_L=0xf0;
  31. TIMER1_H=0xd8;
  32. TL0=0xe0;   
  33. TH0=0xb1;
  34. TL1=0xf0;   
  35. TH1=0xd8;
  36. TMOD=0x11;  
  37. EX0=1;      
  38. ET0=1;      
  39. ET1=1;
  40. EA=1;      
  41. TR0=1;     
  42. TR1=1;
  43. }
  44. void Read_Busy()
  45. {
  46.         uchar busy;
  47.         P0 = 0xff;
  48.         RS = 0;
  49.         RW = 1;
  50.         do
  51.         {
  52.                 EN = 1;
  53.                 busy = P0;
  54.                 EN = 0;
  55.         }while(busy & 0x80);
  56. }

  57. void Write_Cmd(uchar cmd)         
  58. {
  59.         Read_Busy();
  60.         RS = 0;
  61.         RW = 0;
  62.         P0 = cmd;
  63.         EN = 1;
  64.         EN = 0;
  65. }

  66. void Write_Dat(uint dat)                 
  67. {
  68.         Read_Busy();
  69.         RS = 1;
  70.         RW = 0;
  71.         P0 = dat;
  72.         EN = 1;
  73.         EN = 0;
  74. }
  75. void LCD_init()
  76. {
  77.         Write_Cmd(0x38);
  78.         Write_Cmd(0x0c);   
  79.         Write_Cmd(0x01);

  80.         Write_Cmd(0x06);
  81. }
  82. void main()

  83. {
  84. chushihua();  
  85. while(1)
  86. {  }
  87. }
  88. void Timer0_freq() interrupt 1   
  89. {
  90. TR1=1;                        
  91. TH0=TIMER0_H;
  92. OUTPUT=1;                     
  93. }
  94. void Timer1_zkb() interrupt 3   
  95. {
  96. TR1=0;                       
  97. TL1=TIMER1_L;
  98. TH1=TIMER1_H;
  99. OUTPUT=0;                  
  100. }
  101. void keyscan() interrupt 0 using 1  
  102. {float TF0,TZ1;
  103. EX0=0;         
  104. delay(10);     
  105. if(P1!=0x0f)   
  106. {
  107. if(KEY1==0) freq+=100;  
  108. if(KEY2==0) freq+=10;   
  109. if(freq>500) freq=50;  
  110. if(KEY3==0) zkb+=10;   
  111. if(KEY4==0) zkb++;      
  112. if(zkb>100) zkb=1;     
  113. TF0=(65536-fosc/(12.0*freq));
  114. TZ1=(65536-(fosc*zkb)/(12.0*100*freq));  
  115. TIMER0_L=(uint)TF0%256;
  116. TIMER1_H=(uint)TZ1/256;
  117. TIMER1_L=(uint)TZ1%256;
  118. }
  119. P1=0x0f;
  120. EX0=1;   
  121. TR0=1;   
  122. TR1=1;}
復(fù)制代碼



作者: admin    時(shí)間: 2018-9-4 20:56
把問題具體描述一下吧
作者: 609763691    時(shí)間: 2018-9-4 21:26
首先用單片機(jī)發(fā)出頻率和方波這個(gè)叫PWM,一個(gè)很重要以后運(yùn)用很廣泛的東西,很實(shí)用。我看你的程序應(yīng)該是使用中斷程序調(diào)節(jié)PWM,改變占空比,這樣實(shí)際上可以改變電壓大小,PWM產(chǎn)生的方波,你調(diào)節(jié)的數(shù)字改變高電平的大小,然后12864現(xiàn)在你當(dāng)前改變的的數(shù)值。那么你應(yīng)該設(shè)定一個(gè)值,來充當(dāng)你這個(gè)方波的周期,然后改變高電平就可以了,具體的細(xì)節(jié)需要你自己領(lǐng)悟,論壇里面應(yīng)該有很多相關(guān)例程,你可以學(xué)習(xí)學(xué)習(xí)。
作者: 天上的一只猩    時(shí)間: 2018-9-4 21:44
609763691 發(fā)表于 2018-9-4 21:26
首先用單片機(jī)發(fā)出頻率和方波這個(gè)叫PWM,一個(gè)很重要以后運(yùn)用很廣泛的東西,很實(shí)用。我看你的程序應(yīng)該是使用 ...

大佬可以看一下我的貼子嗎 求助一下
作者: 天上的一只猩    時(shí)間: 2018-9-4 21:45
同學(xué)你是在做課程設(shè)計(jì)嗎  占空比范圍0.1-0.9 頻率0.5-9.5  如果是的話 我們交流一下
作者: 315849444    時(shí)間: 2018-9-5 07:44
天上的一只猩 發(fā)表于 2018-9-4 21:45
同學(xué)你是在做課程設(shè)計(jì)嗎  占空比范圍0.1-0.9 頻率0.5-9.5  如果是的話 我們交流一下

是做課程設(shè)計(jì),沒有范圍,可調(diào)就行
作者: 天上的一只猩    時(shí)間: 2018-9-5 10:22
315849444 發(fā)表于 2018-9-5 07:44
是做課程設(shè)計(jì),沒有范圍,可調(diào)就行

那我們交流一下吧 你的要求用六位led顯示占空比和頻率嗎
作者: 315849444    時(shí)間: 2018-9-5 10:30
609763691 發(fā)表于 2018-9-4 21:26
首先用單片機(jī)發(fā)出頻率和方波這個(gè)叫PWM,一個(gè)很重要以后運(yùn)用很廣泛的東西,很實(shí)用。我看你的程序應(yīng)該是使用 ...

大哥,問你一下。基于stm32處理器的c程序用8051能否運(yùn)行?
作者: 315849444    時(shí)間: 2018-9-5 20:22
天上的一只猩 發(fā)表于 2018-9-5 10:22
那我們交流一下吧 你的要求用六位led顯示占空比和頻率嗎

用1602顯示





歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1