要求K1,K2都能控制灯,控制逻辑关系是:K1一直按下,灯亮6S后,如果K2按下灯微亮(亮度10%),K2没有按下灯全亮,K1松开不按下灯灭;如此反复循环。
编译没有问题,现在不能按照我的要求工作。现象是:按下K1灯亮6S后,如果K2按下灯微亮(亮度10%),K2没有按下灯全亮,K1松开不按下灯应该灭,现在灯不灭了,也不循环。程序一直工作在循环(whlie)里面没有跳出来,若是把while注解了不用,K1按下延时6S灯灭。问题出在哪里?
本人写的单片机程序如下:
- #include<reg51.h>
- typedef unsigned char U8;
- sbit led=P1^0;
- sbit sun=P1^1;
- sbit pir=P1^2;
- void delay10ms(unsigned int c)
- {
- unsigned char a,b;
- for(;c>0;c--)
- for(a=38;a>0;a--)
- for(b=130;b>0;b--);
- }
- //可调pwm函数
- void pwm(unsigned char a) //改变a的值调整占空比
- {
- U8 i;
- led=0X00;
- {
- for(i=0;i<255;i++)
- {
- if(i<a) //改变a的值调整占空比
- led=0xFF;
- else
- led=0x00;
- }
- }
- }
- void main()
- {
- if(sun==0)
- {
- led=1;
- delay10ms(600);
- while(1)
- {
- if(pir==1)
- led=1;
- else
- pwm(25); //改变1到255的大小值调整占空比
- }
- }
- else
- {
- led=0;
- }
- }
复制代码
|