使用單片機做一個簡單的計數器

2020-12-01 單片機技術交流站

上篇文章作者給大家介紹了單片機如何控制單個數碼管教程,感興趣的朋友可以點擊我的頭像進行觀看,接下來作者給大家介紹如何利用單片機控制多位數碼管顯示不同的數字,並且分享使用單片機實現一個簡單的計數器項目源碼。

文章涉及到的電路圖和程序源碼大家可以關注作者,回覆:「下載-單片機自學教程2」即可獲取,注意數字2前面不要加空格。仿真軟體的安裝以及破解教程,關注作者後會自動推送給你,歡迎大家前往下載。

有些人會問單片機控制一位數碼管和控制多位數碼管有什麼不同呢?首先我們看一下電路上的不同,電路見下圖,圖中為4位共陰級數碼管,4位數碼管的A-B-C-D-E-F-G-Dp共用了單片機P2口。看到這裡,我請大家思考一下,我們要如何實現數碼管顯示不同的數字呢?或許會有朋友問了,為什麼要共用單片機P2呢?這是因為單片機的資源有限,不可能使用這麼多的IO口來做數碼管顯示。如果不共用P2.0,單片機的IO口開銷太大。實際應用中,不可能用如此多的IO來控制數碼管。

作者在第一次看到這個圖的時候,感覺一臉「懵逼」,心想這這麼可能實現嗎?明顯同一時刻只能顯示一個數碼管,實際也確實是這樣子的,同一時刻只能讓一個數碼管顯示數字。那麼我們到底如何實現多位數碼管顯示呢?這裡要引入「刷新頻率」這個概念了,比如現在的手機屏幕刷新頻率可以做到120Hz,也就是說一秒鐘手機屏幕刷新120次。一般來說當事物刷新頻率超過50Hz的時候,我們人眼就感知不到事物的變化了。也就是說,在很短的時間內,只要我們讓圖中四位數碼管顯示不同的數字,便可以騙過人的眼睛,讓人感覺數碼管再顯示不同的數字,這樣我們就可以用這個電路來實現計數器了。

核心代碼如下:

備註:按鍵每按下一次,計數變量SysDataVar.u16SegNumber增加1,增加後的數字實時顯示在數碼管上面。刷新頻率計算:每5ms掃描一次,一共有4個數碼管,所以F=1000ms/5ms/4=50Hz。

if(pTIM_Delay(2,4))//定時2 每5ms執行一次

{

switch(SEGnumber)

{

case 0x00:

{

CloseALLSEG();

LED =SEG_ComAnodeTable[SysDataVar.u16SegNumber/1000];

OpenOneSEG(0);

}break;

case 0x01:

{

CloseALLSEG();

LED =SEG_ComAnodeTable[SysDataVar.u16SegNumber%1000/100];

OpenOneSEG(1);

}break;

case 0x02:

{

CloseALLSEG();

LED = SEG_ComAnodeTable[SysDataVar.u16SegNumber%100/10];

OpenOneSEG(2);

}break;

case 0x03:

{

CloseALLSEG();

LED = SEG_ComAnodeTable[SysDataVar.u16SegNumber%10];

OpenOneSEG(3);

}break;

}

SEGnumber++;

if(SEGnumber > 3)

{

SEGnumber = 0x00;

}

}

看一下效果圖:

大家如果不明白數碼管顯示的原理,可以查看作者上一篇文章:《單片機控制數碼管顯示不同數字》,同時歡迎關注作者,及時獲取更新信息,如有不明白的地方,可以把問題私信給我或者發到評論區,謝謝。

相關焦點

  • 圖形化編程玩51單片機(十四)模擬工廠裡產品掃描計數器實驗一
    本期實驗:模擬工廠裡的產品掃描計數器:實驗一,16位簡單計數器,本次實驗最大值為9999。本期目的:理解計數器的工作原理,同時也為實驗二做準備。【使用說明】:選用51單片機實驗板上的S2和S3鍵。注釋:由於我們的51單片機是16位的計數器,所以它的程序設計裡的變量最大也只能使用int的類型變量,也就是最大值為65535。
  • pic單片機教程之13位程序計數器存儲器的組成
    程序存儲器構成中檔系列單片機有一個13位的程序計數器,可以尋址8K×14位的程序存儲空間。程序存儲器總線寬度(指令字)為14位。由於所有的指令均為單字指令,所以一個具有8K×14位程序存儲器的器件可以存儲8K條指令。很易於確定是否有充足的程序存儲空間來實現應用程式。
  • 圖形化編程玩51單片機(十五)模擬工廠裡的產品掃描計數器實驗二
    本期實驗:模擬工廠裡的產品掃描計數器:實驗二,在16位簡單計數器的基礎上,拓展為32計數,即9999 9999個計數單元。本期目的:不是簡單地通過增加變量來拓展計數器的容量,而是要通過編程來判斷變量1和變量2的狀態來整合成一個完整的32位計數器。 【使用說明】:選用51單片機實驗板上的S2和S3鍵。
  • 51單片機之計時器與計數器
    例如:外接晶振為12MHz時,51單片機相關周期的具體值為:振蕩周期=1/12us;狀態周期=1/6us;機器周期=1us;指令周期=1~4us;初始化程序應完成如下工作:對TMOD賦值,以確定T0和T1的工作方式。
  • 單片機原理|定時器/計數器的工作原理及應用作業
    A、00HB、FFHC、1D、計數值我的答案:C 得分: 2.3分 38051單片機晶振頻率fosc=12MHz,則一個機器周期為( )。
  • 單片機定時器/計數器結構和工作原理是什麼
    實質是計數器,脈衝每一次下降沿,計數寄存器數值將加1。計數的脈衝如果來源於單片機內部的晶振,由於其周期極為準確,這時稱為定時器。計數的脈衝如果來源於單片機外部的引腳,由於其周期一般不準確,這時稱為計數器。
  • 做一個最簡單的藍牙小車
    第二步——控制系統動手製作一個單片機最小系統,安上晶片,非常的簡單51單片機最小系統的電路圖大家應該都知道——第三部——電機驅動底盤和最小系統搞好了,小車還是跑不起來——缺少電機驅動。單片機的I/O是驅動不了電機的,我選用的是L298N電機專用驅動晶片。
  • 6位LED顯示單片機控制電子鐘/計數器
    51單片機做的電子鐘在很多地方都有介紹, 對於單片機學習者來說這個程序基本上是一道門檻,掌握了電子鐘程序, 基本上可以說51單片機就掌握了80%。常見的電子鐘程序由顯示部分、計算部分、時鐘調整部分構成,本產品硬體上完全支持倒計時器,客戶只要自己修改程序就能實現倒計時功能。
  • 單片機定時器工作原理_單片機定時器工作方式_單片機定時器作用
    定時器使相當多需要人控制時間的工作變得簡單了許多。人們甚至將定時器用在了軍事方面,製成了定時炸彈,定時雷管。現在的不少家用電器都安裝了定時器來控制開關或工作時間。   定時器在單片機中是一個重點,今天我們來介紹一下關於單片機定時器的工作原理、工作方式以及單片機定時器的作用。
  • 一種以AVR單片機為核心的工頻電壓/頻率儀設計
    目前市面上工頻電壓表和頻率表種類繁多,本設計與其相比具有電路簡單、體積小、功耗低、性價比高等特點。利用低價位具備AVR高檔單片機性能的ATmega8單片機,設計工頻電壓和頻率兩用測量儀。圖1中:T1是電源變壓器和電壓互感器兩用器件(電壓互感器有變比精度要求),提供測量儀運行電源,併兼做為被測輸入源使用
  • 51單片機擴展中斷的四種方法
    MCS—51系列單片機內部只有兩個外部中斷源輸入端,當外部中斷源多於兩個時,就必須進行擴展,下面介紹兩種簡單的擴展方法:一、採用硬體請求和軟體查詢的方法:這種方法是:把各個中斷源通過硬體
  • 如何使用通用單片機製作MIDI鍵盤
    絕大多數51系列單片機都有串行通訊控制器(UART),配合合適的晶振,正確地設置UART的工作參數,就能夠自動產生所需的串行數據。使用定時/計數器1(T/C1)作為波特率發生器。將串行口設置為方式1工作狀態(10位異步收發,波特率由定時器控制),使用6MHz晶振,T/C1設為自動裝入8位計數器狀態(TMOD置為2xH),SMOD=1,TH=FFH,此時正好發生31.25K的串行通訊數據,適用於MIDI協議。
  • 51單片機的特殊功能寄存器(SFR)
    在51單片機內部有一個CPU用來運算、控制,有四個並行I/O口,分別是P0、P1、P2、P3,有ROM,用來存放程序,有RAM,用來存放中間結果,此外還有定時/計數器,串行I/O口,中斷系統,以及一個內部的時鐘電路。
  • 自學嵌入式第二天,定時器與計數器的原理
    51單片機定時/計數器的工作由兩個特殊功能寄存器控制。TMOD用於設置其工作方式; TCON用於控制其啟動和中斷申請。只要用軟體使TCON中的TR0或TR1為1,就可以啟動定時/計數器工作; GATA=1時,要用軟體使TR0或TR1為1,同時外部中斷引腳INT0/1也為高電平時,才能啟動定時/計數器工作。即此時定時器的啟動條件,加上了INT0/1引腳為高電平這條件。C/T :定時/計數模式選擇位。C/T =0為定時模式;C/T =1為計數模式。
  • arduino和單片機的區別
    主要包含兩個主要的部分:硬體部分是可以用來做電路連接的Arduino電路板;另外一個則是Arduino IDE,你的計算機中的程序開發環境。你只要在IDE中編寫程序代碼,將程序上傳到Arduino電路板後,程序便會告訴Arduino電路板要做些什麼了。
  • 單片機中各種周期的關係與定時器原理
    一般情況下,一個機器周期由若干個S周期(狀態周期)組成。8051系列單片機的一個機器周期同6個S周期(狀態周期)組成。前面已說過一個時鐘周期定義為一個節拍(用P表示),二個節拍定義為一個狀態周期(用S表示),8051單片機的機器周期由6個狀態周期組成,也就是說一個機器周期=6個狀態周期=12個時鐘周期。
  • 跟電師傅學單片機(17):單片機控制轉移指令圖文講解2
    上節介紹了單片機無條件轉移指令(4條),本節繼續講解單片機控制轉移類指令。下面介紹有條件轉移指令(8條):指令先判斷後轉移有條件轉移指令,也稱為條件轉移指令:是指令要滿足一定條件才轉移。滿足條件時,程序轉移到程序計數器PC當前值和指令給出的相對地址 rel偏移量相加後得到新的PC地址處執行;當條件不滿足時,程序就順序執行下一條指令。
  • 如何使用CSS計數器自動為元素進行編排
    如何使用CSS計數器CSS的計數系統由以下部分組成counter-reset,counter-increment,counter()和counters()和content。這些屬性會幫助你在CSS計數系統中需要做的所有事情。讓我們更仔細地研究這些屬性,以便我們了解如何使用它們。
  • C語言能夠實現單片機功能,為什麼還要使用彙編呢?
    彙編因為的理解難度和開發難度比C語言大,所以學習難度大,都是對寄存器操作,學習彙編就要學習這個單片機的硬體結構和基本組成、存儲器訪問方式、單片機I/O操作時序、定時計數器、中斷處理、指令系統、尋址方式等知識點;而且每個系列晶片的內部寄存地址和寄存器都有差異,維護起來也十分困難。
  • 單片機復位電路原理是什麼 單片機復位電路有哪些?
    二、單片機復位電路原理- -手動按鈕復位手動按鈕復位的工作原理是在復位輸入端RST處人為加入高電平。為達到這一目的,一般情況下,我們在RST端與電源VCC之間加一個按鈕,如下圖所示。當我們按下按鈕時,RST端與VCC端之間接通,使RST端升為高電平,完成復位功能。