楼主在子程序中使用了死循环,程序运行到此时再也出不来,再按按键也就无效了。所有程序都得在主循环 while(1)中跑起来,中断除外。
另外还有两处错误:
1.延时函数的参数数据类型要与实际应用相对应。
2.stc15w104是1T单片机,速度比普通51快许多,延时函数里的变量也要相应增量。
修改如下:
- #include<reg52.h>
- #define uchar unsigned char
- #define uint unsigned int
- sbit led=P3^1;
- sbit S3=P3^0;
- uchar num;
- uint num1;
- //1T单片机ms延时程序
- void delay(uint i)
- {
- uint j,k;
- for(j=i;j>0;j--)
- for(k=1150;k>0;k--);
- }
- /*
- //12T单片机ms延时程序
- void delay(uint i)
- {
- uint j,k;
- for(j=i;j>0;j--)
- for(k=125;k>0;k--);
- }
- */
- void main()
- {
- while(1)
- {
- if(S3==0)
- {
- delay(10); //消抖
- if(S3==0)
- {
- while(!S3); //等待按键松开
- num++;
- if(num>=4)
- num=0;
- }
- }
- if(num==0)
- {
- led=1;
- num1=0;
- }
- else
- num1++;
- if(num1>num*1000)
- {
- num1=0;
- led=~led;
- }
- delay(1);
- }
- }
复制代码 |