robinsonlin 发表于 2018-12-26 10:13
那你就得把程序贴出来,大家才能知道问题在哪里呀
如下。麻烦看一下 是不是哪里有问题
#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char
uchar time;
double count=50; //定义占空比,并初始占空比为50%
sbit PWM=P3^0; //P2^0口输出PWM
sbit zkb_add=P3^6; //占空比增加的按键 的I/O口
sbit zkb_dec=P3^7; //占空比减小 的按键 的I/O口
sbit dula=P2^2;
sbit wela=P2^3;
uchar code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; //共阴极数码管0~9编码
/************函数声明**************/
void delayms(uint z); //延时
void keyscan(); //扫描按键
void timer0_init(); //定时器0初始化
/****************延时处理**********************/
void delayms(uint z) //延时xms程序
{
uint x,y;
for(y=z;x>0;x--)
for(y=110;y>0;y--);
}
/*******数码管显示占空比********************/
void display_pwm(int num)//占空比显示
{
uchar shi;
shi=num/10;
dula=0;
P1=table[shi];
delayms(10);
dula=1;
wela=0;
P1=table[0];
delayms(10);
wela=1;
}
void keyscan() //按键扫描
{
if(zkb_add==0)
{
delayms(1); count=count+10; //每按一次占空比增加按键占空比加10%
if(count>=100) //限定占空比上限
{
count=0;
}
}
if(zkb_dec==0)
{ delayms(1);
count=count-10; //每按一次占空比减小按键占空比减10%
if(count<0) //限定占空比下限
{
count=100;
}
}
}
/***********定时器0初始化***********/
void timer0_init()
{
TMOD=0x01; //定时器0工作于方式1
TH0=(65536-10)/256;
TL0=(65536-10)%256;
TR0=1;
ET0=1;
EA=1;
}
/**************定时0中断处理******************/
void timer0_int() interrupt 1
{
TR0=0; //设置定时器初值期间,关闭定时器
TH0=(65536-10)/256;
TL0=(65536-10)%256;
TR0=1;
time++;
if(time<count) //count为占空比
{
PWM=1; //输出高电平
}
else
PWM=0;
if(time>=100)
{
time=0;
}
display_pwm(count);
}
/*********主函数********************/
void main()
{
timer0_init();
delayms(1);
while(1)
{
keyscan();
}
}
|