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

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

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

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

用數(shù)組定義:0-9的數(shù)字,也就是在數(shù)碼管上顯示出來(lái)的數(shù)字大??;a b c d e f g dp對(duì)應(yīng)高電位亮,最后轉(zhuǎn)成十六進(jì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.動(dòng)態(tài)數(shù)碼管顯示:

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

其中如果延遲函數(shù)Delay的延遲時(shí)間過(guò)短,可能會(huì)出現(xiàn)消影的現(xiàn)象------循環(huán)太快可能導(dǎo)致的數(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)太快會(huì)使數(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);

? ? }

? ? }

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

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

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