利用數(shù)碼管顯示三位數(shù)是利用了單片機數(shù)碼管的動態(tài)掃描,但此方法又有不同點,我們不再需要位選table,實現(xiàn)的具體思路是,先將要顯示的3位數(shù)進行百位,十位,個位進行分離,然后再利用動態(tài)掃描將其顯示即可.
源代碼如下,產(chǎn)生的效果是:可以顯示任一個小于255的整數(shù)
#include#defineuintunsignedint#defineucharunsignedcharsbitsda=P1^0;sbitclk=P1^1;sbitdig1=P1^2;sbitdig2=P1^3;sbitdig3=P1^4;sbitdig4=P1^5;ucharcodetable_num[]={0x7e,0x0c,0xb6,0x9e,0xcc,0xda,0xfa,0x0e,0xfe,0xde};voiddisplay(uchar);voiddelay(uint);voidwrite164(uchar);voidmain(){while(1){display(255);}}/**顯示函數(shù)(僅能顯示3位整數(shù))**/voiddisplay(uchartemp){/**分離百位,十位,個位**/ucharbai,shi,ge;bai=temp/100;shi=temp%100/10;ge=temp%10;dig1=1;/*顯示百位*/dig2=0;write164(table_num[bai]);delay(10);dig2=1;/*顯示十位*/dig3=0;write164(table_num[shi]);delay(10);dig3=1;/*顯示個位*/dig4=0;write164(table_num[ge]);delay(10);dig4=1;}/**向鎖存器寫入一個字節(jié)**/voidwrite164(ucharb){uchartemp=b;uinti;for(i=0;i<8;i++){clk=1;sda=temp&0x80;clk=0;temp=temp<<1;}}/**延遲函數(shù)**/voiddelay(uinttime){ucharx,y;for(x=time;x>0;x--)for(y=101;y>0;y--);}