找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3536|回复: 8
收起左侧

频率和占空比可调的方波发生器单片机源程序,哪位大神帮忙改一下

[复制链接]
ID:393319 发表于 2018-9-4 09:40 来自手机 | 显示全部楼层 |阅读模式
  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;}
复制代码


回复

使用道具 举报

ID:1 发表于 2018-9-4 20:56 | 显示全部楼层
把问题具体描述一下吧
回复

使用道具 举报

ID:375092 发表于 2018-9-4 21:26 | 显示全部楼层
首先用单片机发出频率和方波这个叫PWM,一个很重要以后运用很广泛的东西,很实用。我看你的程序应该是使用中断程序调节PWM,改变占空比,这样实际上可以改变电压大小,PWM产生的方波,你调节的数字改变高电平的大小,然后12864现在你当前改变的的数值。那么你应该设定一个值,来充当你这个方波的周期,然后改变高电平就可以了,具体的细节需要你自己领悟,论坛里面应该有很多相关例程,你可以学习学习。

评分

参与人数 1黑币 +70 收起 理由
admin + 70 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

ID:393736 发表于 2018-9-4 21:44 | 显示全部楼层
609763691 发表于 2018-9-4 21:26
首先用单片机发出频率和方波这个叫PWM,一个很重要以后运用很广泛的东西,很实用。我看你的程序应该是使用 ...

大佬可以看一下我的贴子吗 求助一下
回复

使用道具 举报

ID:393736 发表于 2018-9-4 21:45 | 显示全部楼层
同学你是在做课程设计吗  占空比范围0.1-0.9 频率0.5-9.5  如果是的话 我们交流一下

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

ID:393319 发表于 2018-9-5 07:44 来自手机 | 显示全部楼层
天上的一只猩 发表于 2018-9-4 21:45
同学你是在做课程设计吗  占空比范围0.1-0.9 频率0.5-9.5  如果是的话 我们交流一下

是做课程设计,没有范围,可调就行
回复

使用道具 举报

ID:393736 发表于 2018-9-5 10:22 | 显示全部楼层
315849444 发表于 2018-9-5 07:44
是做课程设计,没有范围,可调就行

那我们交流一下吧 你的要求用六位led显示占空比和频率吗
回复

使用道具 举报

ID:393319 发表于 2018-9-5 10:30 来自手机 | 显示全部楼层
609763691 发表于 2018-9-4 21:26
首先用单片机发出频率和方波这个叫PWM,一个很重要以后运用很广泛的东西,很实用。我看你的程序应该是使用 ...

大哥,问你一下。基于stm32处理器的c程序用8051能否运行?
回复

使用道具 举报

ID:393319 发表于 2018-9-5 20:22 来自手机 | 显示全部楼层
天上的一只猩 发表于 2018-9-5 10:22
那我们交流一下吧 你的要求用六位led显示占空比和频率吗

用1602显示
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表