[蓝桥杯单片机]学习笔记——共阳数码管的静态与动态显示
一、理論部分
?????????共陽數(shù)碼管引腳可以分為兩個部分,一是段碼,一個是位碼。段碼指的是一個數(shù)碼管的7個段加dp小數(shù)點,一共8個,通過P0控制其亮滅使得數(shù)碼管顯示出不同效果。譬如亮afedcg表示的是6形狀。位碼指的多個數(shù)碼管顯示的時候,你要讓哪個數(shù)碼管顯示,設(shè)定對應(yīng)的公共端的值,簡單講位碼指的是亮哪個數(shù)碼管,其由P0控制。
?????????通過查詢原理圖,可知Y7C和Y6C分別控制段碼和位碼,而Y7C和Y6C控制方法和LED燈相似。
?????????由于數(shù)碼管段碼只給出了8個引腳,也就是說,只能同一時讓八個數(shù)碼管通過這8個引腳獲得相同的信號,顯示相同內(nèi)容。那么如何讓數(shù)碼管顯示不同內(nèi)容?這就引進了動態(tài)數(shù)碼管顯示:我們要使用3個數(shù)碼管顯示123,只需要在第一個管顯示完1立刻切換到下一個管讓其顯示2,這樣不停的在三個管中顯示123,又由于人的視覺暫停作用,就可以使人看到多個數(shù)碼管同時顯示不同內(nèi)容的效果。
編寫思路:P2高三位置為110->P0輸出數(shù)碼管位置->P2高三位置為111->P0輸出顯示內(nèi)容
靜態(tài)顯示:直接調(diào)用顯示
動態(tài)顯示:切換不同數(shù)碼管,顯示不同內(nèi)容,封裝成函數(shù)后放進主循環(huán)不斷掃描
二、程序案例
unsigned char code SMG_duanma[18]= {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80, 0x90,0x88,0x80,0xc6,0xc0,0x86,0x8e,0xbf,0x7f};//段碼表,顯示0~F、'-'、'.'。void Delay(unsigned int t) //延時函數(shù) {while (t--);while (t--); } /***************************************************************** *@Function: SelecHC573 // *@Description: 切換鎖存器 // *@Input: channel 切換的鎖存器序號// *@Output: 無// *@Return: 無 // *@Others: 無 // /*****************************************************************/ void SelecHC573(unsigned char channel) {switch(channel){case 4:P2=(P2&0x1f)|0x80;break;case 5:P2=(P2&0x1f)|0xa0;break;case 6:P2=(P2&0x1f)|0xc0;break;case 7:P2=(P2&0x1f)|0xe0;break;} }/***************************************************************** *@Function: DisplaySMG_Bit// *@Description: 數(shù)碼管顯示 // *@Input: dat 數(shù)碼管顯示的數(shù)據(jù)(段碼表)// * pos 數(shù)碼管的位置0-7// *@Output: 無// *@Return: 無 // *@Others: 無 // /*****************************************************************/ void DisplaySMG_Bit(unsigned char dat,unsigned pos) {SelecHC573(6);//數(shù)碼管的位置P0=0x01<<pos; SelecHC573(7);//數(shù)碼管的內(nèi)容P0=dat; }/***************************************************************** *@Function: DelaySMG // *@Description: 延時函數(shù) // *@Input: t 用于延時遞減// *@Output: 無// *@Return: 無// *@Others: 無// /*****************************************************************/ void DelaySMG(unsigned int t) {while(t--); }void Delay(unsigned int t) {while(t--){Display_Dynamic();//延時時放置數(shù)碼管暫停顯示} }/***************************************************************** *@Function: Display_Dynamic // *@Description: 切換數(shù)碼管,使其顯示“2018--月份” // *@Input: 無// *@Output: 無// *@Return: // *@Others: // /*****************************************************************/ void Display_Dynamic() {DisplaySMG_Bit(SMG_duanma[2],0);DelaySMG(500);DisplaySMG_Bit(SMG_duanma[0],1);DelaySMG(500);DisplaySMG_Bit(SMG_duanma[1],2);DelaySMG(500);DisplaySMG_Bit(SMG_duanma[8],3);DelaySMG(500);DisplaySMG_Bit(SMG_duanma[16],4);DelaySMG(500);DisplaySMG_Bit(SMG_duanma[16],5);DelaySMG(500);DisplaySMG_Bit(SMG_duanma[month/10],6);DelaySMG(500);DisplaySMG_Bit(SMG_duanma[month%10],7);DelaySMG(500); }在主函數(shù)將Display_Dynamic放置while循環(huán)不斷掃描即可通過斷碼表可以便捷輸入內(nèi)容,不用每次都計算。
感謝大家的觀看
歡迎大家提出問題并指正~
總結(jié)
以上是生活随笔為你收集整理的[蓝桥杯单片机]学习笔记——共阳数码管的静态与动态显示的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: PEAKCOO做数显压力表芯片的方案设计
- 下一篇: php事件的应用场景,php观察者模式应