|
robinsonlin 發(fā)表于 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}; //共陰極數(shù)碼管0~9編碼
/************函數(shù)聲明**************/
void delayms(uint z); //延時(shí)
void keyscan(); //掃描按鍵
void timer0_init(); //定時(shí)器0初始化
/****************延時(shí)處理**********************/
void delayms(uint z) //延時(shí)xms程序
{
uint x,y;
for(y=z;x>0;x--)
for(y=110;y>0;y--);
}
/*******數(shù)碼管顯示占空比********************/
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;
}
}
}
/***********定時(shí)器0初始化***********/
void timer0_init()
{
TMOD=0x01; //定時(shí)器0工作于方式1
TH0=(65536-10)/256;
TL0=(65536-10)%256;
TR0=1;
ET0=1;
EA=1;
}
/**************定時(shí)0中斷處理******************/
void timer0_int() interrupt 1
{
TR0=0; //設(shè)置定時(shí)器初值期間,關(guān)閉定時(shí)器
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);
}
/*********主函數(shù)********************/
void main()
{
timer0_init();
delayms(1);
while(1)
{
keyscan();
}
}
|
|