作者okok897 (okok897)
看板C_and_CPP
標題[問題]請教有時候有反映有時候沒反應
時間Sat Jun 13 14:27:42 2015
開發平台(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)
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 140.128.156.248
※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1434176865.A.4BB.html
推 longlongint: while接break 跟if相比有優點嗎 06/13 17:49
→ longlongint: pb=0的 delay拿掉 06/13 17:51
→ longlongint: 然後我個人會用clock判斷時間 不用delay 06/13 17:52
→ longlongint: 如果想取消連按 偵測0->1的變化 06/13 17:53
→ dysyase: 中間跳出做處理!這個功能我最愛用~ 06/16 14:34