[英]What should I do for stop the loop at the background when I am not pressing the button?
我是新來的,對錯誤感到抱歉:P。
所以無論如何。 我正在嘗試用 Arduino UNO、一個 catot 7 段顯示器和一個按鈕做一個簡單的計數器電路。 我只想在按下按鈕時啟動系統循環並邁出一步。 例如,7 段從之前的按下顯示“0”,當我按下按鈕時它需要是“1”。 但是我不知道為什么它一直在后台計數而我無法阻止它。 然后我對我的代碼做了一些調整(順便說一句,我在 micro-c 中為 AVR 編碼並使用 AVRDUDES 將我的代碼加載到 Arduino。)然后它停留在“F”(系統應該像 1,2,3,4 ,5,6,7,8,9,A,b,c,d,E,F)。 我不明白為什么以及如何解決它。 另外 7 段 LED 連接到我的 D 端口。 我想做的是B0引腳輸入。 然后我想控制 B0 引腳的值。 當 B0 引腳為 HİGH 時,我想繼續編程。
unsigned char dizi[] = {0x40,0xF9,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10,0x08,0x03,0x27,0x21,0x06,0x0E};
unsigned int i ;
void main()
{
DDRD = 0xFF ;
DDB0_bit = 0 ;
while(PINB.B0);
{
for(i = 0;i<=15;i++)
{
PORTD = dizi[i] ;
Delay_ms(700);
}
}
}
我只是編寫代碼,只是 ıdk ı 希望它能工作。 但它沒有。 我不知道為什么,我的頭腦很模糊,我看不到錯誤。 我希望你能幫助:D。
你用什么來編程你的 Arduino? 按下按鈕后循環永遠不會停止,因為除了i
達到 15 之外沒有停止條件。我在 Arduino 上生銹了,但你可以添加
if(.(PINB;B0)){ break; }
在 for 循環中,當你沒有按下按鈕時,在延遲退出循環之后。
你的程序需要像這樣工作:
for(;;) { /* program here */ }
微控制器程序永遠不會離開 main()。
您需要閱讀按鈕,然后對其進行去抖動。 這應該在任何嵌入式系統初學者教程中提及。 每當你有一個按鈕時,去抖動是強制性的,否則程序會隨機運行,有時會錯過鍵盤按下,有時會同時按下幾個按鈕等。
(最合適的方法是從定時器回調中重復讀取按鈕,但是您需要先編寫定時器/RTC 硬件外設驅動程序的代碼。)
一旦按下/未按下去抖動信號,然后實現一個簡單的 state 機器,如下面的偽代碼:ish C:
typedef enum
{
NOT_PRESSED,
PRESSED_UPDATE_DISPLAY,
PRESSED_STILL_DISPLAYED,
} simple_state_machine_t;
simple_state_machine_t state = NOT_PRESSED;
...
int index_7seg = 0;
for(;;)
{
/* debounce button */
bool is_pressed = debounced_value;
switch(state)
{
case NOT_PRESSED:
state = is_pressed ? PRESSED_UPDATE_DISPLAY : NOT_PRESSED;
break;
case PRESSED_UPDATE_DISPLAY:
index_7seg++;
if(index_7seg == max_7seg)
{
index = 0;
}
state = is_pressed ? PRESSED_DISPLAYED : NOT_PRESSED;
break;
case PRESSED_DISPLAYED:
state = is_pressed ? PRESSED_DISPLAYED : NOT_PRESSED;
break;
}
PORTD = the7seg_table[index_7seg];
} /* for(;;) */
PRESSED_UPDATE_DISPLAY
state 只會在您將 go 從未按下變為按下時輸入,本質上是通過軟件為您提供上升沿觸發。 那是您應該增加表索引的唯一時間。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.