keilc和proteus仿真流水灯问题

#include<reg51.h>#include<intrins.h>#defineucharunsignedchar//数据类型的宏定义#defineuintunsi... #include<reg51.h>#include<intrins.h>#define uchar unsigned char //数据类型的宏定义#define uint unsigned int //数据类型的宏定义uchar code table[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f}; uchar code table2[]={0xfc,0xf9,0xf3,0xe7,0xcf,0x9f,0x3f}; sbit tag=P2^0;void delay(){ uint i; for(i=0;i<20000;i++);}void mode1() //从上到下,循环闪烁{ int i,j; P0=0xfe; for(j=0;j<2;j++) { for(i=0;i<8;i++) { delay(); P0=table[i]; } delay(); }}void mode2() //流水灯依次逐亮{ int i; P0=0xfe; delay(); for(i=0;i<8;i++) { P0<<=1; delay(); } P0=0x7f; delay(); for(i=8;i>0;i--) { P0>>=1; //P0=P0|0x01; delay(); } }void mode3() //流水灯双向移动(两头至中间){ P0=0x7e; delay(); P0=0xbd; delay(); P0=0xdb; delay(); P0=0xe7; delay(); P0=0xe7; delay(); P0=0xdb; delay(); P0=0xbd; delay(); P0=0x7e; delay();}void mode4(){ int i,j; P0=0xfe; for(j=0;j<2;j++) { for(i=0;i<7;i++) { delay(); P0=table2[i]; } delay(); }}uint getkey(){ if(tag==0) return 1; else return 0; }void main(){ int i=-1,flag=0; //mode3(); P0=0x00; while(1) { delay(); flag=getkey(); if(flag==1) i++; switch(i) //四种流水方式 { case 0:{mode1();break;} case 1:{mode2();break;} case 2:{mode3();break;} case 3:{mode4();break;} } if(i>3) i=i-4; } }代码如上,可以执行,问题是:proteus中,按下按钮后有时流水的模式不会改变,要多按几次才能改变,这是为什么呢? 展开
 我来答
lycdl
高粉答主

2016-11-21 · 醉心答题,欢迎关注
知道大有可为答主
回答量:2万
采纳率:94%
帮助的人:6029万
展开全部
你这程序这么写,就会有这种现象,就有这种缺陷。
原因是,主程序中不论执行哪种模式:mode1();mode2();mode3();mode4();都需要延时的,这个时间应该是比较长的,只有执行一遍后才检查按一次,所以,按键就是等待这么长的时间,才能识别到一次。如果有这个延时期间按键了,但按的时间短,还没有执行一遍模式,就不会检查到按键了,所以,按键就无效。所以,要求按键时间要足够长才行。
补修方法,可以把flag=getkey();语句放在延时子程序中,这种每延时一次就检查一次按键,但要把flag声明成全局变量,只要声明成unsigned char 变量就行,不必声明成int.
更多追问追答
追问
嗯...我们才学到中断,所以别的方法不太会。缩短延时时间,按键的时间就可以不用那么长,就是灯闪的太快了,所以想问问是不是哪里还有问题。。。我去试试P3.2,虽然很可能不知道怎么弄。。。
追答
缩短延时时间,按键的时间就可以不用那么长,就是灯闪的太快了,这就对了,就是因为你这么写程序就必然有这种问题的。

是这种程序结构决定的。但不管怎么说,还是能编写出这个程序,说明你还是学会了,再努力学习,等学得多了,改一下编写程序的结构就好了。学习编写程序要慢慢来。
意法半导体(中国)投资有限公司
2023-06-12 广告
单片机,即单片微控制器,也称为单片微型计算机,是将中央处理器(CPU)、存储器(ROM,RAM)、输入/输出接口和其他功能部件集成在一块 在一个小块的集成电路上,从而实现对整个电路或系统的数字式控制。单片机不是完成某一个逻辑功能的芯片,而是... 点击进入详情页
本回答由意法半导体(中国)投资有限公司提供
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式