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