LED对应端口已经定义,延时函数也有,为什么放在proteus仿真直接开始循环了,应该是按下SW18按键后开始循环呀
为什么这段程序运行的时候,一开始就直接循环,没按下按键就开始循环了
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
1条回答 默认 最新
- 无疆76 2024-10-19 16:41关注
以下回复参考:皆我百晓生、券券喵儿等免费微信小程序作答:
从你的代码来看,问题在于你试图在没有接收到按键信号时就已经启动了while循环,也就是说你需要在按下按键后启动循环逻辑。在你的代码中,你是在主函数(main)的初始阶段直接启动了while循环,而没有做任何按键检测,这就导致了无论你是否按下按键,程序都会立即开始循环。正确的做法应该是先进行按键检测,只有在按键被按下时才开始循环。下面是修正后的代码:
图一的修正版:
#include <STC/5F2K60S2.H> #include<INTRINS.H> #define uchar unsigned char #define uint unsigned int sbit SW18=P3^3; //定义按键SW18对应的端口位 uchar mode=0; //定义模式变量用于控制LED灯的亮灭状态 void delay_function(); //定义延时函数(代码中未提供具体实现) void int_isr(void) interrupt 2 //中断函数声明,这里假定在中断发生时改变mode的值 { mode=1; //在中断发生时设置模式为1 } void main(void) { IT1=1; //设置定时器中断触发方式等初始化代码(这里假定这些代码是正确的) EX1=1; //开启外部中断EX1(这里假定这是正确的) EA=1; //开启全局中断允许位(这里假定这是正确的) while(!SW18); //在按键未被按下时持续等待,只有在按键被按下后才会继续执行下面的代码 if(mode==1) //只有在按键被按下后才会进入这个判断语句并执行下面的循环逻辑 { while(1) //无限循环控制LED灯的亮灭状态 { LED2=0; LED4=0; LED9=0; LED10=0; delay_function(); //LED灯灭延时函数后执行下一步操作 LED2=1; LED4=1; LED9=1; LED10=1; delay_function(); //LED灯亮延时函数后再次操作灯亮灭状态等等控制逻辑。此部分未完整展示后续控制逻辑的代码。... (其他LED控制逻辑...) ... LED灯控制逻辑完成。这个部分你需要根据实际情况来编写代码控制LED灯的亮灭状态。注意这里的delay_function()函数需要你自己实现,用来实现延时功能控制LED灯的闪烁节奏等控制效果。以及请注意根据实际情况定义每个LED对应的端口和正确控制这些端口位以实现对LED的控制效果。请根据硬件的实际配置编写对应的控制代码以实现对LED的控制效果。)注意在使用延时函数的时候需要考虑函数的执行时间是否满足你的需求。如果不满足可能需要使用定时器等方式来实现精确的延时效果。最后注意调试的时候Proteus仿真和实际硬件上的效果可能不同在实际应用中需要考虑一下细节的调整。)需要注意的是这里的代码只是一个大致的框架你需要根据实际情况来编写具体的控制逻辑代码以实现你的需求。希望这个答案对你有所帮助如果有其他问题请随时提问。
解决 无用评论 打赏 举报
悬赏问题
- ¥15 ansys fluent计算闪退
- ¥15 有关wireshark抓包的问题
- ¥15 需要写计算过程,不要写代码,求解答,数据都在图上
- ¥15 向数据表用newid方式插入GUID问题
- ¥15 multisim电路设计
- ¥20 用keil,写代码解决两个问题,用库函数
- ¥50 ID中开关量采样信号通道、以及程序流程的设计
- ¥15 U-Mamba/nnunetv2固定随机数种子
- ¥15 vba使用jmail发送邮件正文里面怎么加图片
- ¥15 vb6.0如何向数据库中添加自动生成的字段数据。