導航:首頁 > 裝置知識 > 數碼管動態顯示裝置實驗

數碼管動態顯示裝置實驗

發布時間:2022-12-09 22:22:29

⑴ 七段數碼管動態顯示實驗問題怎麼辦

七段數碼管的動態掃描顯示實驗一、實驗名稱:七段數碼管的動態掃描顯示實驗二、實驗目的:(1)進一步熟悉QuartusII軟體進行FPGA設計的流程(2)掌握利用宏功能模塊進行常用的計數器,解碼器的設計(3)學習和了解動態掃描數碼管的工作原理的程序設計方法三、實驗原理:實驗板上常用4位聯體的共陽極7段數碼管,其介面電路是把所有數碼管的8個筆劃段a-h同名端連在一起,而每一個數碼管由一個獨立的公共極COM端控制。當向數碼管發送字形碼時,所有數碼管都接收到相同的字形碼時,但究竟是那個數碼管亮,取決於COM端,這一端是由I/O控制的,所以就可以自行決定何時顯示哪一位。動態掃描即採用分時方法,輪流控制各個LED輪流點亮。在輪流點亮掃描過程中,每一位顯示器的點亮時間是極為短暫的,但由於人的視覺暫留現象及發光二極體的余輝效應,盡管實際上每個顯示器並非同時點亮,但只要掃描的速度足夠快,給人的印象就是一組穩定的顯示數據,不會有閃爍感。四、實驗要求:實現顯示0000-9999的十進制計數器。五、實驗步驟1.建立工程建立名為leddisplay的工程,並建立頂層圖。2.設計技術時鍾設計一分頻器,對50MHz分頻輸出到計數器,讓計數器以較慢速度遞增。打開File..New,新建一個.v文件。輸入以下程序:mole int_div(clk, div_out);input clk;output reg div_out;reg [31:0] clk_div;parameter CLK_FREQ = 'D50_000_000; //系統時鍾50MHzparameter DCLK_FREQ = 'D10; //輸出頻率10/2Hzalways @(posedge clk)beginif(clk_div < (CLK_FREQ/DCLK_FREQ))clk_div <= clk_div+1;
elsebeginclk_div <= 0;div_out <= ~div_out;endendendmole輸入完成後,將該文件設為頂層實體,該命令在Project->Set as top-level Entity。分析該設計文件:執行工具欄處的「Start Analysis &Synthesis命令按鈕,開始分析綜合,此步驟在這里用於檢查設計錯誤。分析成功後要生成一個分頻器的元件符號,執行File->Create Symbol files for current file,開始建立該文件的元件符號。3.數碼管掃描顯示程序設計mole segmain(clk,reset_n,datain,seg_data,seg_com);input clk;input reset_n;input[31:0] datain;output[7:0] seg_data;output[7:0] seg_com;reg[7:0] seg_com;reg[7:0] seg_data;reg[3:0] bcd_led;reg[36:0] count;integer temp;always@(posedge clk)beginif(!reset_n) count<=0;elsebegincount<=count+1;temp=datain;endendalways@(count[14:12] or datain)begincase(count[14:12])3'b000:begintemp=temp%10;bcd_led=temp[3:0];seg_com=8'b11111110;
end3'b001:begintemp=temp%100/10;bcd_led=temp[3:0];seg_com=8'b11111101;end3'b010:begintemp=temp%1000/100;bcd_led=temp[3:0];seg_com=8'b11111011;end3'b011:begintemp=temp%10000/1000;bcd_led=temp[3:0];seg_com=8'b11110111;end3'b100:begintemp=temp%100000/10000;bcd_led=temp[3:0];seg_com=8'b11101111;end3'b101:begintemp=temp%1000000/100000;bcd_led=temp[3:0];seg_com=8'b11011111;end3'b110:begintemp=temp%10000000/1000000;bcd_led=temp[3:0];seg_com=8'b10111111;end3'b111:begintemp=temp%100000000/10000000;
bcd_led=temp[3:0];seg_com=8'b01111111;endendcaseendalways@(seg_com or bcd_led)begincase(bcd_led)4'h0:seg_data=8'hc0;4'h1:seg_data=8'hf9;4'h2:seg_data=8'ha4;4'h3:seg_data=8'hb0;4'h4:seg_data=8'h99;4'h5:seg_data=8'h92;4'h6:seg_data=8'h82;4'h7:seg_data=8'hf8;4'h8:seg_data=8'h80;4'h9:seg_data=8'h90;4'ha:seg_data=8'h88;4'hb:seg_data=8'h83;4'hc:seg_data=8'hc6;4'hd:seg_data=8'ha1;4'he:seg_data=8'h86;4'hf:seg_data=8'h8e;default:seg_data=8'hc0;endcaseendendmole輸入完成後,將其設為頂層實體,檢驗後生成元件符號。4.調用宏功能模塊設計計數器雙擊頂層圖空白處,彈出symbol對話框,展開Libraries,找到lpm_counter.按步驟一步步生成4位BCD碼的計數器。5.設計完整的頂層返回頂層原理圖,並注意重新將頂層原理圖設為頂層實體。雙擊頂層圖空白的地方,彈出symbol對話框,展開Libraries欄的Project庫,可看到上述步驟建立的一些元件符號。
按OK,在圖紙上空白地方點擊即可輸入相應的元件,添加其它元件,完成下圖連接:6.設置晶元和管腳。參照以下tcl script 文件配置晶元管腳,並運行該tcl腳本。#Setup.tclset_global_assignment -name RESERVE_ALL_UNUSED_PINS "AS INPUT TRI-STATED"set_global_assignment -name ENABLE_INIT_DONE_OUTPUT OFFset_location_assignment PIN_149 -to clkset_location_assignment PIN_90 -to reset#ledset_location_assignment PIN_148 -to 78ledcom[0]set_location_assignment PIN_147 -to 78ledcom[1] set_location_assignment PIN_160 -to 78ledcom[2]set_location_assignment PIN_159 -to 78ledcom[3]set_location_assignment PIN_162 -to 78ledcom[4]set_location_assignment PIN_161 -to 78ledcom[5] set_location_assignment PIN_166 -to 78ledcom[6]set_location_assignment PIN_164 -to 78ledcom[7]set_location_assignment PIN_145 -to 78leddata[0]set_location_assignment PIN_143 -to 78leddata[1]set_location_assignment PIN_137 -to 78leddata[2]
set_location_assignment PIN_139 -to 78leddata[3]set_location_assignment PIN_144 -to 78leddata[4]set_location_assignment PIN_146 -to 78leddata[5]set_location_assignment PIN_135 -to 78leddata[6]set_location_assignment PIN_142 -to 78leddata[7]7.編譯執行菜單命令Project->Set as top-level Entity,將頂層圖設為當前頂層實體,然後編譯。8.下載1)下載設置:使用下載線下載配置文件到FPGA。2)下載完畢後可看到實驗現象:數碼管實現顯示0000-9999的十進制計數器。六、實驗小結(1)這是我們這學期近代電子學實驗的第一次實驗報告,在前幾次的實驗中,已經熟悉了QuartusII設計軟體的基本功能、原理圖輸入和HDL輸入方法、功能模擬、綜合、配置與編程的設計過程,尤其是針對QuartusII的使用初步花了幾節課的時間,畢竟這個軟體對於我們來說是很陌生的。(2)在前面的實驗中,學習QuartusII的基礎實驗中,課本上和課件上的介紹是很詳細的,每一個操作步驟都是有截圖的,所以跟著步驟一步一步的,只要小心謹慎,是不會出現錯誤的。(3)這次的實驗是對前幾次的實驗的整合,在LED的按鍵控制的基礎上進行的實驗,在我做實驗的工程中,查找錯誤是最麻煩的瑣碎的,往往錯誤源於很小的失誤,比如忘記建立頂層圖、調用宏功能模塊設計計數器時選錯選項等等。這些錯誤看似微不足道,但是檢查起來異常麻煩,所以我們在做實驗的時候一定要小心謹慎,切記三心二意。(4)通過這一次的實驗練習,希望為以後打下堅實的基礎。

5.9
網路文庫VIP限時優惠現在開通,立享6億+VIP內容
立即獲取
七段數碼管的動態掃描顯示實驗
七段數碼管的動態掃描顯示實驗
一、實驗名稱:七段數碼管的動態掃描顯示實驗
二、實驗目的:
(1)進一步熟悉QuartusII軟體進行FPGA設計的流程
(2)掌握利用宏功能模塊進行常用的計數器,解碼器的設計
(3)學習和了解動態掃描數碼管的工作原理的程序設計方法
三、實驗原理:
第 1 頁
實驗板上常用4位聯體的共陽極7段數碼管,其介面電路是把所有數碼管的8個筆劃段a-h同名端連在一起,而每一個數碼管由一個獨立的公共極COM端控制。
當向數碼管發送字形碼時,所有數碼管都接收到相同的字形碼時,但究竟是那個數碼管亮,取決於COM端,這一端是由I/O控制的,所以就可以自行決定何時顯示哪一位。動態掃描即採用分時方法,輪流控制各個LED輪流點亮。
在輪流點亮掃描過程中,每一位顯示器的點亮時間是極為短暫的,但由於人的視覺暫留現象及發光二極體的余輝效應,盡管實際上每個顯示器並非同時點亮,但只要掃描的速度足夠快,給人的印象就是一組穩定的顯示數據,不會有閃爍感。

⑵ 數碼管動態顯示工作原理

1、多個數碼管的段碼連接在一起,位碼分別控制。

2、由於段碼連接在一起,如果數碼管全亮,則顯示的數據相同,所以為了顯示不同的數字,任何時刻,只能有一個數碼管顯示,其餘不顯示。

3、用軟體使這幾個數碼管輪流顯示我們需要的數字。

4、只要更新頻率足夠快(>100Hz),肉眼看起來,這些數碼管就同時顯示我們需要的數字了。

(2)數碼管動態顯示裝置實驗擴展閱讀:

數碼管的最常見形式有10個陰極,形狀為數字0到9,某些數碼管還有一個或兩個小數點。然而也有其他類型的數碼管顯示字母、標記和符號。如一種「數碼管」,其陰極為一個模板製成的面具,上面有數字形狀的孔。一些俄羅斯的數碼管,如IN-14,使用倒立的數字2代表5,大概是為了節約生產成本,而沒有明顯的技術或美學方面的原因。俄羅斯的數碼管大部分都使用了倒立的2作為5。

將170伏的直流電壓加在陰極和陽極之間,每一個陰極可以發出氖的的紅橙色光。由於混合氣體的不同,不同類型的數碼管之間的顏色有所區別。壽命較長的數碼管在製造中加入了汞,減少了濺射,結果發出的光的顏色為藍色或紫色調。在某些情況下,這些顏色被玻璃上的紅色或橙色過濾塗層過濾。

⑶ 什麼是數碼管動態顯示

該實驗用到實驗板的資源電路圖如下:

其中P0口是段碼,低電平有效。P2口是位碼,高電平有效。P2.0口控制第1個數碼管,一直到P2.7口控制第8個。該板的段碼表如下:

各個數碼管的段碼都是p0口的輸出,即各個數碼管輸入的段碼都是一樣的, 為了使其分別顯示不同的數字, 可採用動態顯示的方式,即先只讓最低位顯示0(含點),經過一段延時,再只讓次低位顯示1,如此類推。由視覺暫留,只要我們的延時時間足夠短,就能夠使得數碼的顯示看起來非常的穩定清楚。過程如下圖。

採用上述方法思路編寫如下:

org 0000h

start: mov a,#08h ;0 ;段碼
mov p0,a
mov p2,#01h ;位碼
lcall delay_1ms

mov a,#0abh ;1
mov p0,a
mov p2,#02h
lcall delay_1ms

mov a,#12h ;2
mov p0,a
mov p2,#04h
lcall delay_1ms

mov a,#22h ;3
mov p0,a
mov p2,#08h
lcall delay_1ms

mov a,#0a1h ;4
mov p0,a
mov p2,#10h
lcall delay_1ms

mov a,#24h ;5
mov p0,a
mov p2,#20h
lcall delay_1ms

mov a,#04h ;6
mov p0,a
mov p2,#40h
lcall delay_1ms

; mov a,#0aah ;7
; mov p0,a
mov p0,#0aah ;感覺用這句和上面兩句實現一樣,可能這種習慣以後會有用吧
mov p2,#80h
lcall delay_1ms

ljmp start

delay_1ms: mov r6,#2
temp: mov r5,#0ffh
djnz r5,$
djnz r6,temp
ret
end

下載到板上得到測結果為從低到高八位分別顯示0到7(含點)。

★ 上述方法逐次給P0或者P2賦值,一方面程序的復雜程度增加,另外一方面會使得程序的靈活性降低。如果要改變顯示的數字,程序改動起來很麻煩。 所以要用51單片機中常用的一種方法:查表法。例如P0口輸出段碼時,我們可以把要顯示的段碼放在一個表格中,然後每次從這個表格裡面取數,送到P0口即可。P2口輸出位碼時,可以把要用的位碼放在另一個表格里,每次從此表中取數,送入P2口。這樣,如果要改變顯示的數字,只需要改變表格裡面的數。

org 0000h

start: mov r7,#0ffh ;r7,r6查表時送入變址寄存器a (因自加1後為0,所以預置ffh)
mov r6,#0ffh
loop: lcall play1 ;調用顯示段碼子程序
lcall play2 ;調用顯示位碼子程序
lcall delay_1ms
cjne a,#80h,loop ;判斷是否到了最左邊的數,即第8個位碼
ajmp start

play1: ;查表求段碼子程序
; mov a,r7
; inc a
; mov r7,a

inc r7 ;這2句和上面三條語句實現功能相同
mov a,r7 ;a在這里做變址寄存器

mov dptr,#table1 ;表首址送dptr,dptr做基址寄存器
movc a,@a+dptr ;基址寄存器加變址寄存器定址
mov p0,a
ret

play2: ;查表求位碼子程序(原理同play1)
mov a,r6
inc a
mov r6,a
mov dptr,#table2
movc a,@a+dptr
mov p2,a
ret

table1: db 08h,0abh,12h,22h,0a1h,24h,04h,0aah ;段碼表
table2: db 01h,02h,04h,08h,10h,20h,40h,80h ;位碼表

delay_1ms: mov r5,#02h ;延時1ms子程序
temp: mov r4,#0ffh
djnz r4,$
djnz r5,temp
ret
end

下載到板上驗證得到預想結果。

--------------------------------------------------------------------------------
C51實現如下(參考了AS的常式):

#include <reg51.h>
#include <intrins.h> // 包含了左移函數_crol_()

void delayms(unsigned char ms); // 延時子程序

unsigned char data dis_digit; // 位選通值, 傳送到P2口用於選通當前數碼管的數值,
// 如等於0x01時,選通P2.0口數碼管

unsigned char code dis_code[11]={0x08,0xab,0x12,0x22,0xa1, // 0,1,2,3, 4
0x24,0x04,0xaa,0x00,0x20, 0xff}; // 5,6,7,8,9, off

unsigned char data dis_buf[8]; // dis_buf 顯於緩沖區基地址

unsigned char data dis_index; // 顯示索引, 用於標識當前顯示的數碼管和緩沖區的偏移量

void main()
{
P0 = 0xff; // 關閉所有數碼管
P2 = 0x00;

dis_buf[0] = dis_code[0];
dis_buf[1] = dis_code[1];
dis_buf[2] = dis_code[2];
dis_buf[3] = dis_code[3];
dis_buf[4] = dis_code[4];
dis_buf[5] = dis_code[5];
dis_buf[6] = dis_code[6];
dis_buf[7] = dis_code[7];

dis_digit = 0x01; // 首先選通P2.0
dis_index = 0; // 當前偏移量為0

while(1)
{
P0 = dis_buf[dis_index]; // 段碼送P0口
P2 = dis_digit; // 選能位(即位碼)
delayms(1); // 延時
dis_digit = _crol_(dis_digit, 1); // 位選通左移, 下次選通下一位
dis_index++; // 下一個段碼

dis_index &= 0x07; // 見注釋
}

}
void delayms(unsigned char ms) // 延時子程序(晶振12M)
{
unsigned char i;
while(ms--)
{
for(i = 0; i < 120; i++);
}
}

★ 注釋: 此句作用是8個數碼管全部掃描完一遍之後,再回到第一個開始下一次掃描。寫回一般形式:dis_index = dis_index & 0x07 。這種方法挺新,第一次見到,十六進制的07就是二進制的00000111,這樣通過與操作可能控制循環了。比如dis_index 經第一次循環後值為00000001,和0x07與操作後值不變仍為0x01,第二次循環時,其值為0為0x02,與0x07後仍為0x02,一直到其值增為0x07時還是不變的,但再次循環後其值為0x80,再與0x07後就變成0x00了,這樣又從初始循環了。此句可用 if (dis_index == 8) dis_index = 0 代替,效果一樣。

★ 通過C51用上述方法實現時,其段碼放在了數組dis_code[11]中,再通過緩沖區數組dis_buf[]將程序中要調用的值裝入,這樣就可以用下標(偏移量)訪問了。這樣看上去有些繁鎖,但其思路比較清楚,結構上也很明了,具有通用性,便於擴展。

★ 另外只要把程序中的延時加長,如delayms(1000),下載到板上就可以看到實際上數碼管是由低位到高位逐位顯示的。

--------------------------------------------------------------------------------
若單單就實現這個功能而言,可以直接調入段碼數組dis_code[11]中下標從0到7的值,而不必再設置緩沖數組dis_buf[],實現如下:

#include <reg51.h>
#include <intrins.h> //_crol_()用

void delayms(unsigned char ms); //延時子程序

unsigned char data dis_digit; //位選通值, 傳送到P2口用於選通當前數碼管的數值,
//如等於0x01時,選通P2.0口數碼管

unsigned char code dis_code[11]={0x08,0xab,0x12,0x22,0xa1, // 0,1,2,3,4
0x24,0x04,0xaa,0x00,0x20, 0xff}; // 5,6,7,8,9,off

unsigned char data dis_index; //顯示索引, 用於標識當前顯示的數碼管和緩沖區的偏移量

void main()
{
P0 = 0xff; // 關閉所有數碼管
P2 = 0x00;

dis_index = 0; // 當前偏移量為0
dis_digit = 0x01; // 選通P2.0

while(1)
{
P0 = dis_code[dis_index]; // 段碼送P0口
P2 = dis_digit; // 位碼送P2口
delayms(1);

dis_digit = _crol_(dis_digit, 1); // 位選通左移, 下次選通下一位

dis_index++;
dis_index &= 0x07;
}
}
void delayms(unsigned char ms) // 延時子程序(晶振12M)
{
unsigned char i;
while(ms--)
{
for(i = 0; i < 120; i++);
}
}

★ 通本來是想通過以下方式實現一次循環的:

for (dis_index = 0; dis_index < 8; dis_index++)
{
P0 = dis_code[dis_index]; // 段碼送P0口
P2 = dis_index+1; // 位碼送P2口
delayms(1);
}

可得到的總是錯誤的結果:第0位到第2位這三位顯示的是三個8,第3位顯示的是7,高四位沒有顯示。加長延時逐位觀察也沒有發現錯誤的規律,對Keil的調試也不熟悉,先把問題留到這,待找出原因後再補上。

[2006.5.2] 找出原因啦,補上:

今天又看了一下,找到上面的錯誤出在哪了。當時是想用dis_index的值做為位碼的,即第一位顯示0時,段碼為dis_code[0], 即dis_index值為0, 此時位碼值為1。第二位顯示1時,段碼為dis_code[1],即dis_index值為1,此時位碼值為2。所以就簡單用了個加1運算,將P0口的偏移值與P2口的位碼聯系起來。但仔細想一下位碼的原理,上述方法顯然是錯的,只要再驗證一步就明白了,即當第3位顯示2時,段碼為dis_code[2], dis_index值為2,加1後為3,按上述方法時就將這個3作為了位碼,而正確的位碼應該是4 (00000100B)。所以出錯。實際上這個對應關系是有的,但不是簡簡單單的加1,位碼應該是2的dis_index次冪。即:
0--1
1--2
2--4
3--8
4--16 ……
冪次運算函數flaot pow(float x, float y)包含在math.h中, 返回值為xy (float型):

for (dis_index = 0; dis_index < 8; dis_index++)
{
P0 = dis_code[dis_index]; // 段碼送P0口
P2 = (char) pow(2, dis_index); // 位碼送P2口
delayms(255);
}

再次下載到板上發現仍有問題, 即延時很小的時候顯示混亂,但加大延時時間(如程序中的值)可以觀查到數碼管是按位正確顯示的。另外用這種方法產生的代碼量也很大(從寫入速度看,很明顯)。這里僅提出了一個思路,只在此實驗中適用,意義不大,到此為止。

[補充結束]

--------------------------------------------------------------------------------

AS中紿出的常式是利用定時中斷做的延時,參考修改到我的板上,程序如下:

#include <reg51.h>
#include <intrins.h> // 包含了左移函數_crol_()

unsigned char data dis_digit; // 位選通值, 傳送到P2口用於選通當前數碼管的數值,
// 如等於0x01時,選通P2.0口數碼管

unsigned char code dis_code[11]={0x08,0xab,0x12,0x22,0xa1, // 0,1,2,3,4
0x24,0x04,0xaa,0x00,0x20, 0xff}; // 5,6,7,8,9,off

unsigned char data dis_buf[8]; // dis_buf 顯於緩沖區基地址

unsigned char data dis_index; // 顯示索引, 用於標識當前顯示的數碼管和緩沖區的偏移量

void main()
{
P0 = 0xff; //關閉所有數碼管
P2 = 0x00;

TMOD = 0x01; // 00000001B 定時計數器0工作在方式1,16位定時器/計數器
TH0 = 0xFC;
TL0 = 0x17; // 預置初值 FC17H=64535D, 216-64535=1001us=1ms

IE = 0x82; // 10000010B T0溢出中斷允許

dis_buf[0] = dis_code[0x0];
dis_buf[1] = dis_code[0x1];
dis_buf[2] = dis_code[0x2];
dis_buf[3] = dis_code[0x3];
dis_buf[4] = dis_code[0x4];
dis_buf[5] = dis_code[0x5];
dis_buf[6] = dis_code[0x6];
dis_buf[7] = dis_code[0x7];

dis_digit = 0x01; // 選通第0位數碼管
dis_index = 0; // 偏移初值為0

TR0 = 1; // 啟動T0
while(1); // 循環等待中斷

}

void timer0() interrupt 1 // 定時器0中斷服務程序, 用於數碼管的動態掃描

{
TH0 = 0xFC; // 發生中斷定時/計數器重裝初值
TL0 = 0x17; // 感覺此處(及上)應該是0x18,而不是17,分析如下

P2 = 0x00; // 先關閉所有數碼管
P0 = dis_buf[dis_index]; // 段碼送P0口
P2 = dis_digit; // 位碼送P2口

dis_digit = _crol_(dis_digit,1); // 位選通值左移, 下次中斷時選通下一位數碼管
dis_index++;

dis_index &= 0x07; // 8個數碼管全部掃描完一遍之後,再回到第一個開始下一次掃描
}

★ 定時器/計數器的輸入脈沖周期與機器周期一樣, 為時鍾振盪頻率的1/12。晶振用12M時,輸入脈沖周期間隔為1us。機器周期為 1us。設T0的初值為X,計算初值的方法:本例中定時器用方式1,是16位的定時器,即最大值為216=65536,超過此值將發生溢出,引起中斷,進入中斷處理程序。這里要讓其延時1ms,即1000us, 則有式216-X=1000,可得X=64536,換算為16進制為FC18,即初值TH0=0xFC,TL0=0x18。即定時器由64536開始計數,經1000次計數後值為65536,將發生定時中斷,再進入中斷處理子程序後,重新裝和初值,如此循環下去。
而在上例中其裝入的初值並非FC18(64536),而是FC17(64535)。我想大概認為其計數范圍在0~65565的原因吧,我也想過這個問題,是用216-計數初值=中斷間隔 呢,還是用(216-1)-計數初值=中斷間隔呢? 隨手查了幾本書, 說法不一,不過用前者的較多, 我自己也認為前者比較合理, 因為在計算機中16位的二進制不能表示65536, 在各位均為1時表示的值為65535, 即65535H=1111111111111111B, 也可以說65536是溢出得到的。而何時響應中斷就成了關鍵,拿上例來說,如設初值為64535(FC17),則計數到65535時,已經計數為1000個,即1ms,但此時並未發生溢出,因此也沒有觸發中斷。而是在下一個計數後才發生。確切值應為1001us。若初值為64536(FC18),則恰好為所需值,所以上例中的初值應該用FC18而不是FC17。這僅僅是我自己的一點看法,至於是不是這樣,還有待進一步考證。

--------------------------------------------------------------------------------
最終下載到實驗板上結果:

######################################補充########################################

用Proteus模擬結果如下(某一狀態的截圖):

★ 該電路段碼是按與板上接法對應的,即按前面的段碼表次序連接。另外這個八位的模擬數碼管最左端是第一位,最右端是第八位,與板上的順序相反,所以接為了統一,該圖以板為准連接。上圖不加上拉電阻也可模擬出結果,只是P0口高電平顯示為灰,即高阻。

⑷ 51機數碼管動態顯示

只改主程序就行了。
void main()//主程序
{
bit die;//移動方向標志位,0=向左,1=向右
uchar n,x;
while(1)
{
display(x);
n++;
if(n>40)
{
n=0;
if(die==0)//向左
{
x++;
if(x>7)
die=1;//改變方向
}
else//向右
{
x--;
if(x==0)
die=0;//改變方向
}
}
}
}
請採納。

閱讀全文

與數碼管動態顯示裝置實驗相關的資料

熱點內容
餐廳紙巾生產設備需要多少錢一套 瀏覽:987
電冰箱製冷系數測量實驗裝置 瀏覽:472
電動車前工具箱怎麼換 瀏覽:431
11年捷達車空調不製冷怎麼回事 瀏覽:878
用cad畫五金製品難嗎 瀏覽:799
廣東直銷美容儀器怎麼樣 瀏覽:95
人防密閉閥門套什麼定額 瀏覽:537
老款思域後輪軸承怎麼拆 瀏覽:40
天然氣閥門井鑰匙創新 瀏覽:702
什麼地方賣吸氧器材 瀏覽:98
實驗室化學反應裝置圖 瀏覽:793
鑄造銀條模具什麼材質 瀏覽:413
軸承加工什麼工藝 瀏覽:494
cad軟體中怎麼畫閥門 瀏覽:3
騎車軸承為什麼位置 瀏覽:320
起亞k5儀表盤怎麼設置成碼數 瀏覽:510
全鋁家居哪些機械 瀏覽:478
托輥萬向軸承總是壞掉什麼原因 瀏覽:827
快消品用什麼消防器材 瀏覽:129
購買維修工具箱請示 瀏覽:179