sbit key 1 = p3^1;//定義速度控制按鈕
sbit PWM = p1^5;//定義調速端口
無符號字符循環;//定義周期。如果數字x參考時序時間為10,則周期為10x0.1 ms。
無符號字符PWM _ ON//定義高電平時間。
/******************************************************************/
/*延遲功能*/
/******************************************************************/
無效延遲(無符號整數)
{
while(-CNT);
}
/******************************************************************/
/*主函數*/
/******************************************************************/
主()
{
無符號字符PWM _ Num//定義檔位。
TMOD | = 0x 01;//定時器設置為12M晶體中的1ms。
TH0 =(65536-1000)/256;
TL0 =(65536-1000)% 256;//計時1毫秒
IE = 0x82//打開中斷
TR0 = 1;
周期= 10;//時間可以調整。這是10步。調整周期為10 ms,8位PWM為256步。
while(1)
{
如果(!KEY1)
{
延時(20000);
如果(!KEY1)
{
PWM _ num++;
if(PWM _ Num = = 4)PWM _ Num = 0;
開關(PWM_Num){
情況0:P0 = 0x 06;PWM _ ON = 0;打破;//高電平持續時間
案例1:P0 = 0x5B;PWM _ ON = 4;打破;
情況二:P0 = 0x4FPWM _ ON = 6;打破;
情況三:P0 = 0x66PWM _ ON = 8;打破;
默認:break
}
}
}
}
}
/******************************************************************/
/*定時器中斷功能*/
/******************************************************************/
void tim(void)中斷1使用1
{
靜態無符號字符計數;//
TH0 =(65536-1000)/256;
TL0 =(65536-1000)% 256;//計時1毫秒
if (count==PWM_ON)
{
PWM = 1;//燈滅了
}
count++;
if(計數==周期)
{
count = 0;
if(PWM_ON!=0) //如果左右時間為0,保持原來的狀態。
PWM = 0;//燈亮了
}
}