用延时差不多就可以了吧 |
#include<reg51.h> sbit P1_1=P1^1; sbit P1_2=P1^2; sbit P1_3=P1^3; sbit P1_4=P1^4; void delay(unsigned char i) //延时函数 { unsigned char j; while(i--) for(j=0;j<220;j++); } void main() { if (P1_1==0) { P1_2==0; delay(50); //11s后 b亮 P1_3==0; delay(68); //15s后 c亮 P1_4==0; } else { P1_4==1; delay(17); //17s后 b灭 P1_3==1; delay(55); //12s后 a灭 P1_2==1; } } |
楼主程序可以判断按键按下,,然后执行灯的延时,时间到,b灯亮,然后再延时,c灯亮,最后在依次熄灭 |
计时器中断一般最多毫秒级,你还需要一个变量记录中断次数,在中断函数中累计这个数。达到相应次数反转IO输出,并处理记录中断次数变量即可。 |
P1_4==1; delay(17); //17s后 b灭 P1_3==1; delay(55); //12s后 a灭 P1_2==1; 楼主这个应该是用赋值(=),不要用(==) |
个人感觉使用定时器会让代码更简洁 |
uint timer0_count=0; //计数次数,由于定时器的本质是计数器 void timer0_init(void) //定时器0初始化 { TMOD=0x01; //设置定时器0的定时方式 TH0=(65536-50000)/256; //设置初值,相当于每50毫秒进入一次中断函数 TL0=(65536-50000)/256; EA=1; //开启总中断 ET0=1; //开启定时器0中断 TR0=1; //启动定时器0中断 } void timer0_interrupt(void)interrupt 1 //定时器0的中断函数 { count++; //每加一次代表过了一个50毫秒 if(count==220) //代表过了11秒 { //然后打开LED2; } //之后的15秒钟的自己就OK了吧 } |
wutong746 发表于 2020-11-9 20:42 网上搜例程很多的。外部中断 |
你先把中断调好就行了 ,和你delay的函数差不多 |
楼主你会用定时器吗? |
#include<reg51.h> sbit P1_1=P1^1; sbit P1_2=P1^2; sbit P1_3=P1^3; sbit P1_4=P1^4; void delay(unsigned char i) //延时函数 { unsigned char j; while(i--) for(j=0;j<220;j++); } void main() { if (P1_1==0) { P1_2==0; delay(50); //11s后 b亮 P1_3==0; delay(68); //15s后 c亮 P1_4==0; } else { P1_4==1; delay(17); //17s后 b灭 P1_3==1; delay(55); //12s后 a灭 P1_2==1; } } |
我自己写了一份程序但是希望用到中断函数,所以求教啦 |