[问题] 8051 有时候有反应有时候没反应

楼主: okok897 (okok897)   2015-06-13 14:27:42
开发平台(Platform): (Ex: VC++, GCC, Linux, ...)
8051 (C)
额外使用到的函数库(Library Used): (Ex: OpenGL, ...)
问题(Question):
按下按钮 有时候有反应 有时候没有
喂入的资料(Input):
按下按钮
预期的正确结果(Expected Output):
四位数七段+1
0000~99999
错误结果(Wrong Output):
有时有+1有时没有
程式码(Code):(请善用置底文网页, 记得排版)
https://gist.github.com/okok897/85538583c8a3977323bb
#include <reg51.h> //8051接脚定义。
#define seg7 P1
#define segs P2
#define PB P0 //按钮
void scanner(int);
void delay(int);
int i;
int flag;
unsigned char j;
char seg[10]={0xc0,0xf9,0xa4,0xb0,0x99, //七段的字形
0x92,0x82,0xf8,0x80,0x90};
main()
{
PB=1;
flag=0;
i=0;
while(1)
{
scanner(i);
if (PB==0){
delay(10);
while(PB){
delay(20);
i++;
scanner(i);
break;
}
}
}
}
void scanner(int num){
segs=0x07; //千位数扫描信号。
seg7=seg[(num/100)/10]; //显示千位数字。
delay(2);
segs=0x0b; //百位数扫描信号。
seg7=seg[(num/100)%10]; //显示百位数字。
delay(2);
segs=0x0d; //十位数扫描信号。
seg7=seg[(num%100)/10]; //显示十位数字。
delay(2);
segs=0x0e; //个位数扫描信号。
seg7=seg[(num%100)%10]; //显示个位数字。
delay(2);
}
void delay(int t){
int i,j;
for(i=0;i<t;i++)
for(j=0;j<120;j++);
}
补充说明(Supplement):
请教如何改良程式
不知道问题是不是出在防弹跳或是 七段显示的delay时 按钮放开但是在delay所以没反应?
我觉得我的程式有点像是在硬干....
这是我第一次在ptt发文 (Y)
作者: longlongint (华哥尔)   2015-06-13 17:49:00
while接break 跟if相比有优点吗pb=0的 delay拿掉然后我个人会用clock判断时间 不用delay如果想取消连按 侦测0->1的变化
作者: dysyase (DD)   2015-06-16 14:34:00
中间跳出做处理!这个功能我最爱用~

Links booklink

Contact Us: admin [ a t ] ucptt.com