[問題] 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