導航:首頁 > 編程語言 > 六位數碼管程序

六位數碼管程序

發布時間:2023-03-26 22:46:58

『壹』 一段數碼管動態顯示一行六位數字的程序,求解析所有代碼含義。越詳細越好

;這個程序的基本流程是:
;1.把content中的數字對應的斷碼找出,並依次存放到LEDBuf中
;2.依次送LEDBuf中的斷碼到LED上,LED顯示對應字元

OUTBIT equ 08002h ;將位碼送至此地址,位碼表示顯示哪一位LED管
OUTSEG equ 08004h ;將斷碼送至此地址,斷碼表示在指定的LED管上顯示什麼字元

data segment
Content db 1,2,3,0dh,0eh,0fh ;要顯示的數字
LEDBuf db 6 p(?) ;要顯示的數字對應的斷碼

;LEDMAP給出的是斷碼表,表示16進制數到斷碼的映射。總共16個,分別表示0-f。
;比如第一個3fh就是0的斷碼,斷碼送到LED中,LED會自動顯示0。
LEDMAP:
db 3fh,06h,5bh,4fh,66h,6dh,7dh,,07h
db 7fh,6fh,77h,7ch,39h,5eh, 79h,71h
data ends
code segment
assume cs:code, ds:data

;Delay的目的就是為了讓LED燈上的內容停留,以便看清
Delay proc
push cx
mov cx,100h
loop $ ;這里的循環目的是暫停一段時間,讓LED上的數字停留,以便人看清
pop cx
ret
Delay endp

;DisplayLED做的事:把LEDbuf中內容全部顯示到LED燈上。LEDbuf中6個斷碼,對應6個LED燈。
DisplayLED proc near
mov bx, offset LEDBuf
mov cx, 6 ;總共顯示6個斷碼
mov ah, 00100000b ;位碼,00100000b中1的位置指示了要顯示的數位,當前是1在左起第六個,也就是顯示6號LED燈
;後面有shr指令會將這個00100000b右移,這樣變成00010000,顯示5號LED,以此類推。

DLoop: mov dx, OUTBIT
mov al, 0
out dx,al ;將0送端位碼埠,表示當前不選中任何LED,即關閉LED

mov al, [bx] ;將LEDbuf中的一個斷碼,送入al
mov dx, OUTSEG
out dx,al ;送斷碼,表示要在LED中顯示這個字元

mov dx, OUTBIT
mov al, ah
out dx, al ;送位碼,表示要顯示哪一個LED燈

call Delay ;上面送完斷碼,位碼後,在相應的LED上就顯示相應的字元,Delay可以讓這個字元停留一段時間,視覺滯留。
shr ah, 1 ;位碼右移,顯示下一個LED
inc bx ;bx加1,那麼[bx]就指向LEDbuf中的下一個斷碼
loop Dloop ;這個Dloop循環把LEDbuf中的六個斷碼依次全部送到對應LED上顯示
ret
DisplayLED endp

;Start:程序的入口,從這里開始運行程序
Start proc near
mov ax, data
mov ds, ax
mov cx,6 ;顯示六個字元
mov ah,0 ;ah是content中的偏移量,從0->5,分別找出content中各個位元組內容
mov si,offset ledbuf

redo: mov bx,offset content
mov al,ah ;後面的xlat指令要使用al
xlat ;xlat的作用al<-[bx+al],也就是將bx這個地址(content)起的第al個位元組內容送到al中
mov bx,offset ledmap
xlat ;將此時al中的數字對應的斷碼找出,並放到al中。(數字a對應的斷碼就是ledmap起第a個位元組的數據)
mov [si],al ;將找到的斷碼放到LEDbuf中
inc si ;LEDbuf地址加1,存放下一個斷碼
inc ah ;找content中下一個數字的斷碼
loop redo ;整個redo循環做的事:把content中數字對應的斷碼放到LEDbuf中,循環最後結果是LEDbuf變成:06h,5bh,4fh,5eh,79h,71h
show: call displayled
jmp show ;在LED上一直顯示這6個字元
start endp
code ends
end start

『貳』 51單片機共陰數碼管利用靜態顯示,讓六個數碼管顯示1~6,程序怎麼寫

代碼如下:

#include <reg52.h>

#define uchar unsigned char

#define uint unsigned int

#define data P0 //P0口宏定義

/* ***************************************************** */

// 數碼管位選數組定義

/* ***************************************************** */

uchar code leddata[] =

{ 0x3F, //"0"

0x06, //"1"

0x5B, //"2"

0x4F, //"3"

0x66, //"4"

0x6D, //"5"

0x7D, //"6"

0x07, //"7"

0x7F, //"8"

0x6F, //"9"

0x77, //"A"

0x7C, //"B"

0x39, //"C"

0x5E, //"D"

0x79, //"E"

0x71, //"F"

0x76, //"H"

0x38, //"L"

0x37, //"n"

0x3E, //"u"

0x73, //"P"

0x5C, //"o"

0x40, //"-"

0x00, //熄滅

0x00 //自定義};

};

/* ***************************************************** */

// 位定義

/* ***************************************************** */

sbit = P1^7; //段選定義

sbit we = P1^6; //位選定義

/* ***************************************************** */

// 函數名稱:DelayMS()

// 函數功能:毫秒延時

// 入口參數:延時毫秒數(ValMS)

// 出口參數:無

/* ***************************************************** */

void delay(uint z)

{

uint x,y;

for(x = 0; x < z; x++)

for(y = 0; y < 113; y++);

}

/* ***************************************************** */

// 函數名稱:main()

// 函數功能:數碼管靜態顯示

// 入口參數:無

// 出口參數:無

/* ***************************************************** */

void main(void)

{

uchar i;

we = 1;//位選開

data = 0x00;//送入位選數據

we = 0;//位選關

while(1)

{

 for(i = 0;i < 16 ; i++)

 {

 = 1; //段選開

data = leddata[i]; //送入段選數據

 = 0; //段選關

 delay(500); //延時

 }

}

}

(2)六位數碼管程序擴展閱讀

對於74HC573,形象一點,我們只需要將其理解為一扇大門,只不過這扇大門是單向的,其中11引腳(LE)控制著門的開、關狀態,高電平為大門打開,低電平為大門關閉。

D0-D7為輸入,Q0-Q7為輸出,在LE = 1,即輸入高電平時,輸入端=輸出端,輸入是什麼,輸出也就原封不動的輸出;在LE = 0 ,即輸入高電平時,大門關閉,實現鎖存,不再輸出。了解之後,我們按照電路圖,來進行編程,代碼實現。

在實現數碼管的靜態顯示中,用到了兩個鎖存器,兩個I/O口,P1.6和P1.7,分別是位選和段選。

首先定義了個數碼管位選數組,也就是十六進制代碼,這便是後來數碼管顯示數字的核心,接著,用 sbit 定義了位選和段選埠,分別是 P1.6 和 P1.7 ,定義了一個延時函數,其實這一串代碼很有意思,開關開關思想,貫穿始終。

首先把位選打開,送入位選數據後,關閉鎖存器,實現鎖存,進入循環,隨之打開段選鎖存器,送入段選數據後,再次關閉段選。

接下來,這個延時操作對於實際看到數碼管的顯示效果特別重要,因為程序在段選後之後,會馬上消隱,顯示的時間之後幾個微秒,這顯然不太合理,需要在關閉段選後加上延時,這樣一來,才會讓每位數碼管亮度保持均勻。

『叄』 單片機6位數碼管計數器程序問題

#include<reg52.H>//STC頭文件
#defineucharunsignedchar
#defineuintunsignedint
#definetimewe3

sbitwe=P2^7;
sbit=P2^6;

unsignedlongtemp;
uintjsms=0;

ucharcodean[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};
ucharcodewei[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};

voiddelay(uinta)//1ms延時程序(12MHz10倍於51單片機速度時)
{
uinti;
while(--a!=0)
{
for(i=0;i<600;i++);
}
}

uchardisbuf[6];
voiddisplay()
{ ucharcodewei[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf};
staticuchara;
if(a>=6)a=0;
we=1;
P0=0xff;
we=0;
=1;
P0=an[disbuf[a]];
=0;
we=1;
P0=wei[a];
we=0;
a++;
}
/**********************************************/
/*主函數*/
/**********************************************/
voidmain(void)
{
temp=0;
while(1)
{
if(++jsms>=1000){
if(++temp==999999)
temp=0;
}

disbuf[0]=temp/100000;
disbuf[1]=temp%100000/10000;
disbuf[2]=temp%10000/1000;
disbuf[3]=temp%1000/100;
disbuf[4]=temp%100/10;
disbuf[5]=temp%10;
display();
delay(1);
}
}

『肆』 6位數碼管動態顯示,單片機直接片選,先顯示201903,再顯示abcdef,再顯示123456,用C語言編程

8位數碼管動態顯示,單片機直接片選,先顯示201903,再顯示abcdef,再顯示123456,用C語言編程 ,重復循環,模擬試試。

#include<reg51.h>

#define uchar unsigned char

// 此表為 LED 的字模 0 1 2 3 4 5 6 7 8 9 a b c d e f

unsigned char code LED7Code[] = {0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x77,0x7C,0x39,0x5E,0x79,0x71};

void delay(uchar z)

{

uchar i,j;

for(i=0;i<120;i++)

for(j=0;j<z;j++);

}

void main()

{

uchar k;

while(1)

{

for(k=0;k<50;k++)

{

P0=0xff;

P2=LED7Code[0];

P0=0xfe;

delay(5);

P0=0xff;

P2=LED7Code[0];

P0=0xfd;

delay(5);

P0=0xff;

P2=LED7Code[2];

P0=0xfb;

delay(5);

P0=0xff;

P2=LED7Code[0];

P0=0xf7;

delay(5);

P0=0xff;

P2=LED7Code[1];

P0=0xef;

delay(5);

P0=0xff;

P2=LED7Code[9];

P0=0xdf;

delay(5);

P0=0xff;

P2=LED7Code[0];

P0=0xbf;

delay(5);

P0=0xff;

P2=LED7Code[3];

P0=0x7f;

delay(5);

}

for(k=0;k<50;k++)

{

P0=0xff;

P2=LED7Code[0];

P0=0xfe;

delay(5);

P0=0xff;

P2=LED7Code[0];

P0=0xfd;

delay(5);

P0=0xff;

P2=LED7Code[10];

P0=0xfb;

delay(5);

P0=0xff;

P2=LED7Code[11];

P0=0xf7;

delay(5);

P0=0xff;

P2=LED7Code[12];

P0=0xef;

delay(5);

P0=0xff;

P2=LED7Code[13];

P0=0xdf;

delay(5);

P0=0xff;

P2=LED7Code[14];

P0=0xbf;

delay(5);

P0=0xff;

P2=LED7Code[15];

P0=0x7f;

delay(5);

}

for(k=0;k<50;k++)

{

P0=0xff;

P2=LED7Code[0];

P0=0xfe;

delay(5);

P0=0xff;

P2=LED7Code[0];

P0=0xfd;

delay(5);

P0=0xff;

P2=LED7Code[1];

P0=0xfb;

delay(5);

P0=0xff;

P2=LED7Code[2];

P0=0xf7;

delay(5);

P0=0xff;

P2=LED7Code[3];

P0=0xef;

delay(5);

P0=0xff;

P2=LED7Code[4];

P0=0xdf;

delay(5);

P0=0xff;

P2=LED7Code[5];

P0=0xbf;

delay(5);

P0=0xff;

P2=LED7Code[6];

P0=0x7f;

delay(5);

}

}

}

『伍』 單片機89c51一個6位LED數碼管顯示功能 程序,希望能准確點的程序,只顯示6位數字就好。

#include <reg51.h>
#include <intrins.h>

void delay(unsigned int i); //函數聲名

char DelayCNT;//定義變數

//此表為 LED 的字模, 共陰數碼管 0-9 -
unsigned char code Disp_Tab[] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40}; //段碼控制

//此表為8個數碼管位選控制, 共陰數碼管 1-8個 -
unsigned char code dispbit[8]={0xfe,0xfd,0xfb,0xf7,0xef,0xdF,0xbF,0x7F}; //位選控制 查表的方法控制

/************主函數**********************/
main()
{
unsigned int i,LedNumVal=1 ; //變數定義
unsigned int LedOut[10]; //變數定義

DelayCNT=0;

while(1)
{
if(++DelayCNT>=20) //控制數字變化速度
{
DelayCNT=0; //20個掃描周期清零一次
++LedNumVal; //每隔20個掃描周期加一次
}

LedOut[0]=Disp_Tab[LedNumVal%10000/1000];
LedOut[1]=Disp_Tab[LedNumVal%1000/100]|0x80;
LedOut[2]=Disp_Tab[LedNumVal%100/10];
LedOut[3]=Disp_Tab[LedNumVal%10];

LedOut[4]=Disp_Tab[LedNumVal%10000/1000]; //千位
LedOut[5]=Disp_Tab[LedNumVal%1000/100]|0x80; //百位帶小數點
LedOut[6]=Disp_Tab[LedNumVal%100/10]; //十位
LedOut[7]=Disp_Tab[LedNumVal%10]; //個位

for( i=0; i<9; i++)
{
P0 = LedOut[i];
P1 = dispbit[i]; //使用查表法進行位選

/* switch(i) //使用switch 語句控制位選
{
case 0:P1 = 0x7F; break;
case 1:P1 = 0xbF; break;
case 2:P1 = 0xdF; break;
case 3:P1 = 0xeF; break;
case 4:P1 = 0xf7; break;
case 5:P1 = 0xfb; break;
case 6:P1 = 0xfd; break;
case 7:P1 = 0xfe; break;

} */

delay(150); //掃描間隔時間 太長會數碼管會有閃爍感
}

}
}

void delay(unsigned int i)
{
char j;
for(i; i > 0; i--)
for(j = 200; j > 0; j--);
}

閱讀全文

與六位數碼管程序相關的資料

熱點內容
maya粒子表達式教程 瀏覽:84
抖音小視頻如何掛app 瀏覽:283
cad怎麼設置替補文件 瀏覽:790
win10啟動文件是空的 瀏覽:397
jk網站有哪些 瀏覽:134
學編程和3d哪個更好 瀏覽:932
win10移動硬碟文件無法打開 瀏覽:385
文件名是亂碼還刪不掉 瀏覽:643
蘋果鍵盤怎麼打開任務管理器 瀏覽:437
手機桌面文件名字大全 瀏覽:334
tplink默認無線密碼是多少 瀏覽:33
ipaddgm文件 瀏覽:99
lua語言編程用哪個平台 瀏覽:272
政采雲如何導出pdf投標文件 瀏覽:529
php獲取postjson數據 瀏覽:551
javatimetask 瀏覽:16
編程的話要什麼證件 瀏覽:94
錢脈通微信多開 瀏覽:878
中學生學編程哪個培訓機構好 瀏覽:852
榮耀路由TV設置文件共享錯誤 瀏覽:525

友情鏈接