單片機數(shù)碼管顯示函數(shù)

1. 使用子函數(shù)優(yōu)化程序代碼:

原理:首先定義子函數(shù),進行傳參,Nixie第一個參數(shù)是地址(第幾個數(shù)碼管的位置,從左往右)(原理圖上的LED0/1/2/3/4/5/6/7在51單片機上體現(xiàn)是從右往左的),第二個是數(shù)字(數(shù)碼管上顯示的數(shù)字大小);

switch語句選擇8個位置,每個位置上對應譯碼器的輸出二進制數(shù);切記用break截止,否則將連續(xù)執(zhí)行;

用數(shù)組定義:0-9的數(shù)字,也就是在數(shù)碼管上顯示出來的數(shù)字大??;a b c d e f g dp對應高電位亮,最后轉(zhuǎn)成十六進制位輸出;P0直接調(diào)用;

? ? #include <REGX52.H>

? ? #include <INTRINS.H>


? ? unsigned char NixieTable[]={0x3F,0X06,0X5B,0X4F,0X66,0X6D,0X7D,0X07,0X7F,0X6F};

? ? void Nixie(unsigned char Location,Number)

? ? {

? ? switch(Location)

? ? {

? ? case 1:P2_4=1;P2_3=1;P2_2=1;break;

? ? case 2:P2_4=1;P2_3=1;P2_2=0;break;

? ? case 3:P2_4=1;P2_3=0;P2_2=1;break;

? ? case 4:P2_4=1;P2_3=0;P2_2=0;break;

? ? case 5:P2_4=0;P2_3=1;P2_2=1;break;

? ? case 6:P2_4=0;P2_3=1;P2_2=0;break;

? ? case 7:P2_4=0;P2_3=0;P2_2=1;break;

? ? case 8:P2_4=0;P2_3=0;P2_2=0;break;

? ? }

? ? P0=NixieTable[Number];

? ? }

? ? void main()

? ? {

? ? Nixie(4,1);

? ? while(1)

? ? {


? ? }

? ? }

2.動態(tài)數(shù)碼管顯示:

動態(tài)數(shù)碼管的顯示為:使用循環(huán)while()讓第一個位置顯示1,第二個位置顯示2;以此類推;

其中如果延遲函數(shù)Delay的延遲時間過短,可能會出現(xiàn)消影的現(xiàn)象------循環(huán)太快可能導致的數(shù)碼管數(shù)字亂位的現(xiàn)象;

? ? #include <REGX52.H>

? ? #include <INTRINS.H>

? ? void Delay(unsigned int xms)

? ? {

? ? unsigned char i,j;

? ? while(xms)

? ? {

? ? i=2;

? ? j=239;

? ? do

? ? {

? ? while(--j);

? ? }

? ? while(--i);

? ? xms--;

? ? }

? ? }

? ? unsigned char NixieTable[]={0x3F,0X06,0X5B,0X4F,0X66,0X6D,0X7D,0X07,0X7F,0X6F};

? ? void Nixie(unsigned char Location,Number)

? ? {

? ? switch(Location)

? ? {

? ? case 1:P2_4=1;P2_3=1;P2_2=1;break;

? ? case 2:P2_4=1;P2_3=1;P2_2=0;break;

? ? case 3:P2_4=1;P2_3=0;P2_2=1;break;

? ? case 4:P2_4=1;P2_3=0;P2_2=0;break;

? ? case 5:P2_4=0;P2_3=1;P2_2=1;break;

? ? case 6:P2_4=0;P2_3=1;P2_2=0;break;

? ? case 7:P2_4=0;P2_3=0;P2_2=1;break;

? ? case 8:P2_4=0;P2_3=0;P2_2=0;break;

? ? }

? ? P0=NixieTable[Number];

? ? // Delay(1);//消影,循環(huán)太快會使數(shù)碼管亂位的現(xiàn)象

? ? // P0=0x00;

? ? }

? ? void main()

? ? {

? ? while(1)

? ? {

? ? Delay(200);

? ? Nixie(1 ,1);

? ? Delay(200);

? ? Nixie(2 ,2);

? ? Delay(200);

? ? Nixie(3 ,3);

? ? Delay(200);

? ? Nixie(4 ,4);

? ? Delay(200);

? ? Nixie(5 ,5);

? ? Delay(200);

? ? Nixie(6 ,6);

? ? Delay(200);

? ? Nixie(7 ,7);

? ? Delay(200);

? ? Nixie(8 ,8);

? ? Delay(200);

? ? }

? ? }

?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容