1. 使用子函數(shù)優(yōu)化程序代碼:
原理:首先定義子函數(shù)怕品,進行傳參,Nixie第一個參數(shù)是地址(第幾個數(shù)碼管的位置钓瞭,從左往右)(原理圖上的LED0/1/2/3/4/5/6/7在51單片機上體現(xiàn)是從右往左的)姆蘸,第二個是數(shù)字(數(shù)碼管上顯示的數(shù)字大小)延塑;
switch語句選擇8個位置,每個位置上對應(yīng)譯碼器的輸出二進制數(shù)答渔;切記用break截止关带,否則將連續(xù)執(zhí)行;
用數(shù)組定義:0-9的數(shù)字沼撕,也就是在數(shù)碼管上顯示出來的數(shù)字大性ビА;a b c d e f g dp對應(yīng)高電位亮端朵,最后轉(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)太快可能導(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)太快會使數(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);
? ? }
? ? }