[蓝桥杯单片机]学习笔记——共阳数码管的静态与动态显示
一、理論部分
?????????共陽數(shù)碼管引腳可以分為兩個(gè)部分,一是段碼,一個(gè)是位碼。段碼指的是一個(gè)數(shù)碼管的7個(gè)段加dp小數(shù)點(diǎn),一共8個(gè),通過P0控制其亮滅使得數(shù)碼管顯示出不同效果。譬如亮afedcg表示的是6形狀。位碼指的多個(gè)數(shù)碼管顯示的時(shí)候,你要讓哪個(gè)數(shù)碼管顯示,設(shè)定對(duì)應(yīng)的公共端的值,簡(jiǎn)單講位碼指的是亮哪個(gè)數(shù)碼管,其由P0控制。
?????????通過查詢?cè)韴D,可知Y7C和Y6C分別控制段碼和位碼,而Y7C和Y6C控制方法和LED燈相似。
?????????由于數(shù)碼管段碼只給出了8個(gè)引腳,也就是說,只能同一時(shí)讓八個(gè)數(shù)碼管通過這8個(gè)引腳獲得相同的信號(hào),顯示相同內(nèi)容。那么如何讓數(shù)碼管顯示不同內(nèi)容?這就引進(jìn)了動(dòng)態(tài)數(shù)碼管顯示:我們要使用3個(gè)數(shù)碼管顯示123,只需要在第一個(gè)管顯示完1立刻切換到下一個(gè)管讓其顯示2,這樣不停的在三個(gè)管中顯示123,又由于人的視覺暫停作用,就可以使人看到多個(gè)數(shù)碼管同時(shí)顯示不同內(nèi)容的效果。
編寫思路:P2高三位置為110->P0輸出數(shù)碼管位置->P2高三位置為111->P0輸出顯示內(nèi)容
靜態(tài)顯示:直接調(diào)用顯示
動(dòng)態(tài)顯示:切換不同數(shù)碼管,顯示不同內(nèi)容,封裝成函數(shù)后放進(jìn)主循環(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í)函數(shù) {while (t--);while (t--); } /***************************************************************** *@Function: SelecHC573 // *@Description: 切換鎖存器 // *@Input: channel 切換的鎖存器序號(hào)// *@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í)函數(shù) // *@Input: t 用于延時(shí)遞減// *@Output: 無// *@Return: 無// *@Others: 無// /*****************************************************************/ void DelaySMG(unsigned int t) {while(t--); }void Delay(unsigned int t) {while(t--){Display_Dynamic();//延時(shí)時(shí)放置數(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)容,不用每次都計(jì)算。
感謝大家的觀看
歡迎大家提出問題并指正~
總結(jié)
以上是生活随笔為你收集整理的[蓝桥杯单片机]学习笔记——共阳数码管的静态与动态显示的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: PEAKCOO做数显压力表芯片的方案设计
- 下一篇: php事件的应用场景,php观察者模式应