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