基本功能
1)按下FUN键后,进入占空比设置,按下ENT键,确认占空比并显示;
2)按0-9号按键设置具体占空比比值,先按下的数字为十位数,后按下的为个位,如果继续按下数字键,个位的数字移到十位,最后按下的是个位数;
3)占空比值显示在数码管上,在FUN按键按下,设置占空比时,数码管闪烁显示;
4)P2.0口输出波形。
仿真图:
程序: //-------------------头文件------------------
//-------------------头文件------------------
#include<reg51.h>
//-----------------I/O口定义-----------------//-----------------I/O口定义-----------------sbit duan=P2^6;
sbit]sbit]sbit PWM=P2^0;
//------------------函数声明----------------
//------------------函数声明----------------
void anjian();
void]void]void xianshi();
void]void]void T_int();
void]void]//------------------变量定义----------------
char]char]bit flag=0,flag_c=0,flag_xs=0;
unsigned]unsigned]unsigned char tab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff};
unsigned]unsigned]//------------------主函数------------------
void]void]{
while(1)
msxz();
xianshi();
}
//-------------定时器T0初始化
//-------------定时器T0初始化
void T_int()
{{ PWM=1;
TMOD=0x12;
TR0=1;
TH0=256-200;
ET1=1;
TL1=35535%256;
}
}
//-----------T0中断占空比-----------
void]void]{
{
PWM=~PWM;
temp=10-zkb/10;
temp=zkb/10;
}
//---------T1中断闪烁显示---------
//---------T1中断闪烁显示---------
void T1_ser() interrupt 3
{
{
TH1=35536/256;
]] if(++ss>=10)
ss=0;
}
}
}
//-------------模式选择函数---------
void]void]{
{
c_temp=0; //修改占空比暂值
TR1=1; //闪烁显示
else if(key_v==11&&flag) //ENT按下确认占空比,必须得先进入设置占空比之后
flag=0;
TR1=0;
if(flag&&flag_c) //进入设置占空比且按键在0~9之间
c_temp=(c_temp*10+key_v)%100;
flag_c=0;
}
//-------------按键函数-------------
//-------------按键函数-------------
void anjian()
{
{
P3=0x0f;
{
if(P3!=0x0f)
jianhao();
flag_c=1;
}
}
}
//----------------键号识别函数----------------
void]void]{
0xb7,0xbb,0xbd,0xbe,0x77,0x7b,0x7d,0x7e};
for(i=0;i<4;i++)
P3=~hs;
for(j=i;j<=16;j++)
if(jianma==jianhao[j])
key_v=j;
break;
}
}
}
}
//------------------显示函数------------------
void]void]{
if(flag&&flag_xs)
a[0]=10;
}
{
a[1]=zkb/10;
temp=0x02;
{
wei=1;
duan=1;
delay_nms(5);
}
}
}
//-------------延时函数------------
void]void]{
while(x--)
for(y=0;y<125;y++);
}
|