要求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;
- }
- }
復制代碼
|