- #include<reg51.h>
- #define uint unsigned int
- #define uchar unsigned char
- uchar time;
- uint count=0; //定义占空比,并初始占空比为0%
- sbit PWM=P2^0; //P2^0口输出PWM
- sbit key_add=P3^4; //电机加速的按键 的I/O口
- sbit key_dec=P3^5; //电机减速的按键 的I/O口
- sbit led0 = P2^1;
- sbit led1 = P2^2;
- unsigned char code table[] = {0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};
- uint i=0,j;
- /************函数声明**************/
- void delayxms(uint z); //延时
- void Motor_add(); //电机加速,即增加占空比
- void Motor_dec(); //电机减速,即减少占空比
- void timer0_init(); //定时器0初始化
- void display(uint count);
- /*********主函数********************/
- void main()
- {
- timer0_init();
- delayxms(2);
- while(1)
- {
- Motor_add();
- Motor_dec();
- display(count);
- }
- }
- /****************延时处理**********************/
- void delayxms(uint z) //延时xms程序
- {
- uint x,y;
- for(y=z;x>0;x--)
- for(y=110;y>0;y--);
- }
- void Motor_add() //电机加速
- {
- if(key_add==0)
- {
- delayxms(2); //此处时间不能太长,否者会的中断产生冲突
- if(key_add==0)
- {
- count+=1; //每按一次加速按键占空比加1
- if(count>=99) //限定占空比上限
- {
- count=99;
- }
- }
- while(!key_add);
- }
- }
- void Motor_dec()//电机减速
- {
- if(key_dec==0)
- {
- delayxms(2);//此处时间不能太长,否者会的中断产生冲突
- if(key_dec==0)
- {
- count-=1; //每按一次减速按键占空比减1
- if(count<=0) //限定占空比下限
- {
- count=0;
- }
- }
- while(!key_dec);
- }
- }
- /***********定时器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;
- }
- }
- void display(uint count) //显示函数
- {
- i = count/10;
- j = count-i*10;
- led1=0;
- P0=table[i];
- led0=1;
- delayxms(5);
- led0=0;
- P0=table[j];
- led1=1;
- delayxms(5);
- }
复制代码 |