| 
 
| 完全程序来实现。接口定义入下: P1^0——LED,输出为高电平时点亮二极管;
 P2^0——KEY1,按键后LED最亮;
 P2^1——KEY2,按键后LED较亮;
 P2^2——KEY3,按键后LED较暗;
 P2^3——KEY4,按键后LED灭掉;
 
 
 试验程序如下:
 #include <REGX51.H>
 #define uchar unsigned char
 void init_sys(void); /*系统初始化函数*/
 void Delay5Ms(void);
 unsigned char ZKB1;
 void main (void)
 {
 init_sys();
 ZKB1=0; /*占空比初始值设定*/
 
 while(1)
 {
 if (!P2_0)
 {
 Delay5Ms();
 if (!P2_0)
 {
 ZKB1=100;
 }
 }
 
 if (!P2_1)
 {
 Delay5Ms();
 if (!P2_1)
 {
 ZKB1=75;
 }
 }
 if (!P2_2)
 {
 Delay5Ms();
 if (!P2_2)
 {
 ZKB1=25;
 }
 }
 
 if (!P2_3)
 {
 Delay5Ms();
 if (!P2_3)
 {
 ZKB1=0;
 }
 }
 /*对占空比值限定范围*/
 if (ZKB1>75) ZKB1=100;
 if (ZKB1<25) ZKB1=0;
 }
 }
 
 void init_sys(void)
 {
 
 TMOD=0X01;
 TH0=0XFF;
 TL0=0XF6;
 TR0=1;
 ET0=1;
 EA=1;
 }
 
 
 void Delay5Ms(void)
 {
 unsigned int TempCyc = 1000;
 while(TempCyc--);
 }
 
 void timer0(void) interrupt 1 using 2
 {
 static uchar click=0;
 TH0=0XFF;
 TL0=0XF6;
 ++click;
 if (click>=100) click=0;
 if (click<=ZKB1)
 P1_3=0;
 else
 P1_3=1;
 }
 
 实验效果:
 LED的亮、灭可以控制,但是较亮、较暗,一直闪烁不定,请大家看看,什么地方出了问题,并给出修改方法,谢谢。
 | 
 |