#include <reg52.h>
#define uint unsigned int
#define uchar unsigned char
//参数定义
sbit pwm=P1^0;
sbit key_plus=P3^6;
sbit key_reduce=P3^7;
sbit duan=P2^6;
sbit wei=P2^7;
uchar code tab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
uint i;
char j,k=50;
//子函数声明
void timer_init();
void delayms(uint x);
void show(int a);
void adjust_pwm();
//主函数
void main()
{
timer_init();
while(1)
{
adjust_pwm();
}
}
//定时器0初始化
void timer_init()
{
TMOD=0x01;
TH0=(65536-1000)/256;
TL0=(65536-1000)%256;
ET0=1;
TR0=1;
EA=1;
}
//定时器0服务函数
void timer0() interrupt 1
{
TH0=(65536-1000)/256;
TL0=(65536-1000)%256;
// if(i==10) //100HZ
// {
// i=0;
// j++;
// if(j==100) j=0;
// }
j++; //1000HZ
if(j==100) j=0;
if(j<k)
{
pwm=1;
}
else
pwm=0;
}
//延时函数 x 毫秒
void delayms(uint x)
{
uint i,j;
for(i=x;i>0;i--)
for(j=110;j>0;j--);
}
//数码管显示
void show(int a)
{
int shi,ge;
shi=a/10;
ge=a%10;
//显示十位
duan=1;
P0=tab[shi];
duan=0;
P0=0xff;
wei=1;
P0=0xfe;
wei=0;
delayms(3);
//显示个位
duan=1;
P0=tab[ge];
duan=0;
P0=0xff;
wei=1;
P0=0xfd;
wei=0;
delayms(3);
}
//按键控制速度
void adjust_pwm()
{
if(key_plus==0)
{
delayms(5);
if(key_plus==0)
{
k++;
if(k>99)
{
k=0;
}
while(!key_plus);
}
}
if(key_reduce==0)
{
delayms(5);
if(key_reduce==0)
{
k--;
if(k<0)
{
k=99;
}
while(!key_reduce);
}
}
show(k);
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
一周热门 更多>