基于51单片机的方波发生器

发布网友 发布时间:2022-04-22 04:20

我来回答

2个回答

热心网友 时间:2023-06-25 04:02

#include<reg51.h> // 用定时器0 控制 PWM
#define ledConPort P2
#define dataPort P0

sbit P1_0 = P1^0; // P1.0 PWM 输出
sbit key10 = P3^2; // 调节 PWM0 占空比 按键
sbit key11 = P3^3;
sbit key12=P3^4;//调节频率的按键
sbit key13=P3^5;
unsigned int fadj;
unsigned char PWM0 = 2; // 占空比初始值
unsigned char counter = 0; // 计数的
unsigned char code ch[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
bit tt1; // 标志位
bit tt2;
void ledshow(void);
void main() // 主函数
{
TMOD=0x10;
fadj=100;
TH1=(65536-fadj)/256; // 定时时间
TL1=(65536-fadj)%256; // 12 MHz
EA=1; // 中断启动
ET1=1;
TR1=1;
while(1)
{
ledshow();
if(key10==0 && tt1==0) {tt1 = 1; PWM0+=10;i=PWM0;ledshow();} // K10、K11 // 调节 PWM0 占空比
if(key11==0 && tt1==0) {tt1 = 1; PWM0-=10;i=PWM0;ledshow();}
if(key10==1 && key11==1) tt1=0;
if(key12==0 && tt2==0) {tt2 = 1; fadj+=100;}// K12、 频率 +
if(key13==0 && tt2==0) {tt2 = 1; fadj-=100;}// K13频率 -
if(key12==1 && key13==1) tt2=0;
ledshow();
}
}
void Timer0(void) interrupt 3 // 定时器0 PWM 控制
{
TH1=(65536-fadj)/256; // 定 时时间
TL1=(65536-fadj)%256;
counter++;
if(counter >= 100) counter = 0; // PWM 20级
if(counter >= PWM0) P1_0 = 0; else P1_0 = 1;
}追问改过之后占空比和频率都不能调节了,而且占空比显示的不规则。

追答#include // 用定时器0 控制 PWM
#define ledConPort P2
#define dataPort P0
sbit P1_0 = P1^0; // P1.0 PWM 输出
sbit key10 = P3^2; // 调节 PWM0 占空比 按键
sbit key11 = P3^3;
sbit key12=P3^4;//调节频率的按键
sbit key13=P3^5;
unsigned int fadj,pwma;
unsigned char PWM0 = 2; // 占空比初始值
unsigned int counter = 0; // 计数的
unsigned char code ch[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
bit tt1; // 标志位
bit tt2;
void ledshow(void);
......................
void Timer0(void) interrupt 3 // 定时器0 PWM 控制
{
TH1=(65536-100)/256; // 定 时时间
TL1=(65536-100)%256;
counter++;
pwma=PWM0*fadj/100;
if(counter >= fadj) counter = 0; // PWM 20级
if(counter >= pwma) P1_0 = 0; else P1_0 = 1;
}}

热心网友 时间:2023-06-25 04:02

你在 main函数修改TL1后 当它再次进入中断TL1又被赋值为TL1=(65536-50)%256; ,所以基本不会发生变化;解决方法:同时要修改中断函数里面的TL1值。。。

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com