该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
C51_C语言编程控制流水灯
硬件电路 p0 接 led 8 个,P33 接按键使用中断2
开机灯按1~8逐位闪烁,并循环
按键后改为 两灯亮 的流水灯
下面写了个程序
#include
#include
#define uchar unsigned char
#define uint unsigned int
uchar ucTemp,ucTimes,ucShift=0;
void DelayMS(uint x)
{
uchar t;
while(x--)
for(t=120;t>0;t--);
}
void main()
{
ucTemp=0x0FE;
IT1=1;
EX1=1;
EA=1;
while(!ucShift)
{
for (ucTimes=0;ucTimes<7;ucTimes++)
{
P0=ucTemp;
DelayMS(250);
P0=0x0FF;
DelayMS(250);
}
ucTemp=_cror_(ucTemp,1);
}
//BESHIFT:
while (ucShift)
{
P0=ucTemp;
DelayMS(500);
ucTemp=_cror_(ucTemp,1);
}
// goto BESHIFT;
}
void P33_INT1() interrupt 2
{
ucTemp=0x0FD;
ucShift=1;
//可否在此程序内加入如下语句(事实上试过会报错)使得循环结束
//goto BESHIFT;
//return break;
//return goto BESHIFT;
}
问题是有什么办法可以在调用中断函数之后使得第一个while循环提前结束,
当然可以在里面加多个IF,但这样就不好玩了。
本文探讨了一种使用C51语言编程控制8位LED流水灯的实现,通过P0口连接LED,P33口接入按键并利用中断2进行控制。当按下按键后,原本的逐位闪烁模式转变为两灯交替闪烁的流水效果。作者在中断函数中尝试优化代码,以在中断触发后提前结束外部循环,提出了在中断服务函数内直接修改循环标志的方法,但遇到了错误。讨论了如何在不增加过多条件判断的情况下,优雅地实现循环的提前终止。
841

被折叠的 条评论
为什么被折叠?



