|
發布時間: 2019-11-14 17:35
正文摘要:平時對單片機一知半解的,工作不對口,但很久以前學過一些, 今天想做一個小的顯示電路,通過一個按鍵對一個數據進行加操作,比如0~9999吧。 想用stc的單片機,型號無所謂了,大致能用就行,當按鍵按下時用定時器 ... |
hmgqljz111 發表于 2019-11-16 10:31 玩單片機就是玩邏輯和時間,原則上定時器中斷中不要執行過么多語句,以免影響主程序執行任務,但只要把時序安排好,完全可以只在定時器中斷中完成任務,基本沒有主函數什么事。串口發送程序也可以在T0中斷中運行,串口發送程序在主函數中運行時如果受到T0中斷干擾可以在發送時短暫關閉T0中斷,如果不能關,也可以在T0中斷中設個標志,串口發送程序查詢這個標志決定發送,可以有效避免互相干擾。 |
wulin 發表于 2019-11-14 21:38 真厲害 |
wulin 發表于 2019-11-14 21:38 師傅在定時器里可以執行這么多語句,為何我在定時器0里執行一個,用定時器1產生波特率的串口發送程序就不行呢。 |
| 謝謝大家,我這就仔細學習一下 |
| 很簡單的 github 有源碼 直接找 |
|
一般用定時計數器可以實現,其思路是用一個整型變量進行加,所加的值分配按千百十個位存入數組定義的顯示緩沖區,程序掃描顯示緩沖區的數據即可 如定義1秒鐘加1次的實現方法: 定時中斷的程序 void time0() interrupt 1 { n++; //2ms定時加到500即為1秒 if (n==500) { n=0; sec++; //秒鐘加1 } P2=0; //共陰數碼管消影 P2=disp[dispbuf[i]]; //dispbuf數組存千百十個位數據 disp數組存0-9的段碼 P3=wei[i]; //數組wei存放顯示的位碼依次為0x0e,0x0d,0x0b,0x07 i++; //i用于計數數碼管的顯示位 if (j==4) j=0; TH0=(65536-2000)/256; //重裝2ms初值 TL0=(65536-2000)%256; } 主程序應包括如下內容: dispbuf[0]=sec/1000; //千位數字 dispbuf[1]=(sec/100)%10; //百位數字 dispbuf[2]=(sec/10)%10; //十位數字 dispbuf[3]=sec%10; //個位數字 |
給你寫了一個按鍵短按加減,長按連加減 4位數碼管顯示0~9999程序,端口根據實際電路自行修改。
|