//这是一个PWM技术控制电灯亮暗的C语言程序
#include<reg52.h>
sbit KEY=P3^2;
sbit OUTPUT=P1^0;
sbit P11=P1^1;
sbit P12=P1^2;
sbit P17=P1^7;
sbit P13=P1^3;
sbit P33=P3^3;
sbit P34=P3^4;
sbit P35=P3^5;
sbit P36=P3^6;
sbit P37=P3^7;
unsigned short int leddisplaycode[10]={0xC0,0xF9,0xA4,0xB0,0x99,
0x92,0x82,0xF8,0x80,0x90};/*这是LED显示代码*/
unsigned char counter=0;
unsigned char pointer=9;
unsigned char width=10;
//延时子程序
//延时时间为(timex2+2)us
void delay(int time)
{ int s;
for(s=0;s<time;s++);
}
void _keyp32_(void)//这是P32按键的处理程序
{pointer++;
if (pointer==10) pointer=0;
while(KEY==0);
}
void _keyp33_(void)
{P11=~P11;
while(P33==0);}//这是P33处理程序
void _keyp34_(void)
{P12=~P12;while(P34==0);}
void _keyp35_(void)
{P17=~P17;
while(P35==0);}
void _keyp36_(void){}
void _keyp37_(void){}
void _keyboard_(void)//这是键盘程序
{void delay(int time);
if (KEY==0){delay(1500);if(KEY==0) _keyp32_();};
if (P33==0){delay(1500);if(P33==0) _keyp33_();};
if (P34==0){delay(1500);if(P34==0) _keyp34_();};
if (P35==0){delay(1500);if(P35==0) _keyp35_();};
if (P36==0){delay(1500);if(P36==0) _keyp36_();};
if (P37==0){delay(1500);if(P37==0) _keyp37_();};
}
main()
{TMOD=0x02;
TH0=256-100;
TL0=256-100;
EA=1;
ET0=1;
TR0=1;
LOOP: _keyboard_();
P0=leddisplaycode[pointer];
P2=0X0F;
goto LOOP;}
void timer0_interrupt() interrupt 1 using 0
{counter++;
if(counter==width)
{OUTPUT=P17;
counter=0;}
if(counter==pointer) OUTPUT=~OUTPUT;
}