導航:首頁 > 操作系統 > 單片機數碼管動態顯示實驗

單片機數碼管動態顯示實驗

發布時間:2023-01-31 06:15:37

單片機led數碼管實驗

單片機led數碼管 秒錶模擬實例,很簡單的,可以參考一下,

#include<reg52.h> //秒錶程序

#define uint unsigned int

#define uchar unsigned char

uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};

uchar ,shi;

uint a1,a2;

sbit D1=P3^0;

sbit D2=P3^1;

sbit D3=P3^2;

sbit D4=P3^3;

sbit key=P3^5;

sbit key1=P3^7;

bit j ;

uint y ;

void main()

{

TMOD=0x01;

TH0=(65536-10000)/256;

TL0=(65536-10000)%256;

EA=1;

ET0=1;

TR0=1;

=0;

shi=0;

while(1)

{

if(key==0)

{

j=0;

}

if(key1==0)

{

j=1; a2=0;

}

}

}

void timer0()interrupt 1

{

TH0=(65536-10000)/256;

TL0=(65536-10000)%256;

a1++;

y++;

if(a1==100)

{

a1=0;

if(j==1) a2++;

if(a2>=10000) a2=0;

}

D1 = 1; D2 = 1; D3 = 1; D4 = 1;

if(y==1)

{

P1=table[a2%10000/1000];

D4=0;

}

if(y==2)

{

P1=table[a2%1000/100];

D3=0;

}

if(y==3)

{

P1=table[a2%100/10];

D2=0;

}

if(y==4)

{

P1=table[a2%10];

D1=0;

y=0;

}

}

Ⅱ 單片機數碼管動態顯示

下面是用段選和位選的數碼管動態顯示程序,可以參照下寫法

#include <AT89X51.H>
unsigned char dispbitcnt; //數碼管位碼掃描變數
unsigned char second;
//秒變數
unsigned char minite;
//分變數
unsigned char hour;
//時變數
unsigned char tcnt;
//秒信號產生變數
unsigned char mstcnt;
//掃描時間變數

const unsigned char dispcode[10]={0xc0,0xf9,0xa4,0xb0,0x99,<br> <br> <br> 0x92,0x82,0xf8,0x80,0x90};

//0123456789段碼
const unsigned char dispbitcode[6]={0xfe,0xfd,0xfb,0xf7,<br> <br> <br> 0xef,0xdf};

//123456位碼
unsigned char dispbuf[6]={0,0,0,0,0,0};

//緩沖數組

//**************TMR0中斷數碼管掃描程序*********************
void Timer0() interrupt 1
{

P2=dispcode[dispbuf[dispbitcnt]];//段碼
P1=dispbitcode[dispbitcnt];//位碼
dispbitcnt++;
if(dispbitcnt==6)
{dispbitcnt=0;<br> }

tcnt++;
//中斷產生秒信號
if(tcnt==244)
{tcnt=0;<br> <br>second++;<br> <br>if(second==60)<br> <br> {second=0;<br> <br> minite++;<br> <br> if(minite==60)<br> <br> {minite=0;<br> <br> <br>hour++;<br> <br> <br>if(hour==24)<br> <br> <br> {hour=0;<br> <br> <br> }

}

}

dispbuf[4]=second%10;

dispbuf[5]=second/10;

dispbuf[2]=minite%10;

dispbuf[3]=minite/10;

dispbuf[0]=hour%10;

dispbuf[1]=hour/10;

}
TMOD=0x01;
TL0=0x10;
TH0=0xf0;

}
///****************1ms延時程序******************
void delay_1ms(unsigned char i)
{
unsigned char j;
for(i=0;i<144;i++)
for(j=0;j<144;j++);
}

//*************主程序********************
void main(void)
{
TMOD=0x01;

TL0=0x10;
TH0=0xf0;
while(1)
{
dispbitcnt=0;

P1=0x00;
//開段碼
P2=0x00;
//開位碼
delay_1ms(200);
//延時
delay_1ms(200);
//延時
delay_1ms(200);
//延時
delay_1ms(200);
//延時
P2=0xff;
//關位碼

EA=1;
ET0=1;
TR0=1;
while(1);
}
}

Ⅲ 我在學AVR單片機在遇到數碼管動態顯示實驗時,裡面要有個Delay延時,為什麼要延時啊

大凡涉及動態顯示,有一個基本數據,那就是一個畫面在1秒的時間內最少顯示24次(24Hz),至於這個數據的出處我也不詳細,如此,一個畫面停留時間不能大於42毫秒,而要想畫面穩定則至少要達到50Hz以上,對於數碼管的顯示,由於是通過通/斷電的方式進行掃描控制的,所以這又有別於上訴的幀頻顯示原理,因為電源的頻繁通斷使得數碼管獲得的平均工作電流降低了,相當於PWM調壓作用,所以要仔細調整通/斷這兩個延時時間以獲得兼顧顯示的穩定和亮度的合理,另外最終顯示結果還和顯示代碼的結構及實板演示、模擬模擬等多種因素有關。

Ⅳ 數碼管動態顯示中要改善顯示效果實驗程序應作哪些修改

1. 在Proteus軟體中畫好51單片機最小核心電路,包括復位電路和晶振電路
2. 在電路中增加四個7段數碼管(共陽/共陰自選),將P1口作數據輸出口與7段數碼管數據引腳相連 ,P2.0~P2.3引腳輸出選控制信號
3. 在Keil軟體中編寫程序,採用動態顯示法,實現數碼管分別顯示數字1,2,3,4
二、實驗目的
1. 鞏固Proteus軟體和Keil軟體的使用方法

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

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

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

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

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

(5)單片機數碼管動態顯示實驗擴展閱讀:

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

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

Ⅵ 單片機數碼管顯示生日實訓會出現的問題

我們最常用的是七段式和八段式LED數碼管,八段比七段多了一個小數點,其他的基本相同。所謂的八段就是指數碼管里有八個小LED發光二極體,通過控制不同的LED的亮滅來顯示出不同的字形。數碼管又分為共陰極和共陽極兩種類型,其實共陰極就是將八個LED的陰極連在一起,讓其接地,這樣給任何一個LED的另一端高電平,它便能點亮。而共陽極就是將八個LED的陽極連在一起。其原理圖如下。

註:共陽極數碼管:低電平點亮

共陰極數碼管:高電平點亮

2.段碼位元組與位元組中各位對應關系:
代碼位: D7 D6 D5 D4 D3 D2 D1 D0

顯示段: dp g f e d c b a

3.重影:IO口從高電平到低電平,有一定的殘留的電流在裡面。
在數碼管動態顯示實驗中,每次送完段選數據後,在送入位選數據之前,需要一句
「P0 = 0xff」 ,這條語句的專業名稱叫做「消影」
解釋如下:
在剛送完段選數據後,P0口仍然保持著上次的段選數據,若不加「P0 = 0xff」這句話,再執行接下來的打開位鎖存器命令後,原來保持在P0口的段選數據將立即通過位選鎖存器直接加在數碼管上,接下來才是再次通過P0口給位選鎖存器送入位選數據,雖然這個過程非常短暫,但是在數碼管高速顯示狀態下,我們仍然可以看到數碼管出現顯示混亂的現象,加上消影之後,在開啟位鎖存器後,P0口數據全為高電平,所以哪個數碼管都不會亮,因此這個消影的動作是很重要的。

4.關於送數據與送段選位選先後問題:
/*
* 函數名:DulaSet
* 描述 :數碼管段選設置
* 輸入 :DP:數碼管段選是否為帶小數點顯示方式 Y:是 / N:否
* DU:段選——范圍為16個字形碼
* 輸出 :無
* 備注 :先送位選數據,再使能鎖存器,(最佳寫法)
* 因為只有P0狀態穩定了,鎖進去的數據才不會出錯
* 否則顯示0x00(即數碼管8位全關斷)會有亮影
* 接著關鎖存器,一瞬間鎖存器即可鎖存數據
*/

void DulaSet(uchar DP,uchar DU)

{

if(DP == Y)

P0 = NTDP[DU]; //送段選數據,帶小數點段選表示

else if(DP == N)

P0 = NT[DU]; //送段選數據

DULA = 1; //開U1鎖存器端

DULA = 0; //關U1鎖存器端

}

5.數碼管靜態顯示與動態顯示的區別:
(對於單片機上8位的數碼管(8段LED)

靜態:

段碼線:每一位段碼線分別與一個8位I/O鎖存器輸出相連
位碼線:8個8位I/O口
動態:

段碼線:一個數碼管佔用一個8位I/O口
位碼線:8個數碼管佔用一個8位I/O口
但在實際單片機硬體電路連接中,都把段碼線並聯,故,靜態顯示方式下,所有數碼管顯示相同。

3. 由於各個數碼管的段碼線並聯,(靜態顯示下)在同一時刻,8個數碼管將顯示相同的字元,因此若要各個數碼管能夠同時顯示出與本位相應的顯示字元,就必須採用動態掃描的顯示方式。即在某一時刻,只讓某一位的位選線處於選通狀態,同時,段碼線上輸出相應為要顯示的字元。LED不同為顯示的時間間隔(掃描間隔)應根據實際情況而定。發光二極體從導通到發光有一定的延時,導通時間太短,發光太弱,人眼無法看清;時間太長,要受限於臨界閃爍頻率,而且此時間越長,佔用單片機的時間越多。另外顯示位數增多,也將佔用大量的單片機時間,因此動態顯示的實質是一些犧牲單片機的時間來換取I/O埠的減少。

Ⅶ 單片機實驗中數碼管顯示出現拖影的原因及解決方法

你所謂的拖影,本人稱之為 殘影。
數碼管殘影的產生,只發生在動態掃描的設計電路中,主要問題是軟體設計者考慮不足引起的。
殘影產生的原理是:
在程序進行切換數碼管顯示時,舊數據(上一位數碼管的段選數據)依然存在,就開啟了新數碼管的位選,導致 舊數據 在 新數碼管 短暫出現,然後程序更換新數據,替換了 舊數據。反復快速的進行此類操作,導致短時間內,舊數據 在 新數碼管 上的顯示次數劇增,使光亮度達到人眼可以輕微辨別的程度,於是出現所謂 殘影。
解決方法:
從上面看出,合適的段選、位選開啟過程是消除殘影的重要因素。不同編程習慣,有不同的過程方法。只要保證,在新位選開啟前,數據已經更新即可。例:
關閉所有段選→數據①→段選①→時間→關閉所有段選→數據②→段選②→時間→關閉所有段選……………………

Ⅷ 如何利用單片機讓4位數碼管顯示

程序如下(用的是STC89C52晶元):

#include<reg52.h>//52系列單片機頭文件

#defineucharunsignedchar

#defineuintunsignedint

uintx,y;

ucharcodetable[]={

0x3f,0x06,0x5b,0x4f,

0x66,0x6d,0x7d,0x07,

0x7f,0x6f,0x77,0x7c,

0x39,0x5e,0x79,0x71};//共陰極數碼管編碼

voiddisplay(uchar,uchar,uchar,uchar);//聲明子函數

voiddelay(int);//聲明子函數

voidmain()

{

while(1)

{

display(1,2,3,4);//主程序始終調用數碼管顯示子程序

}

}

voiddisplay(uchara,ucharb,ucharc,uchard)

{

P2=0xef;

P0=table[a];//給第一個數碼管送"a"

delay(1);//延時1ms

P2=0xdf;

P0=table[b];//給第二個數碼管送"b"

delay(1);//延時1ms

P2=0xbf;

P0=table[c];//給第三個數碼管送"c"

delay(1);//延時1ms

P2=0x7f;

P0=table[d];//給第三個數碼管送"d"

delay(1);//延時1ms

}

voiddelay(uintz)//延時子函數

{

uintx,y;

for(x=z;x>0;x--)

for(y=110;y>0;y--);

}

(8)單片機數碼管動態顯示實驗擴展閱讀

led數碼管是由多個發光二極體封裝在一起組成「8」字型的器件,引線已在內部連接完成,只需引出它們的各個筆劃,公共電極。led數碼管常用段數一般為7段有的另加一個小數點,還有一種是類似於3位「+1」型。

位數有半位,1,2,3,4,5,6,8,10位等等,led數碼管根據LED的接法不同分為共陰和共陽兩類,了解LED的這些特性,對編程是很重要的,因為不同類型的數碼管,除了它們的硬體電路有差異外,編程方法也是不同的。

閱讀全文

與單片機數碼管動態顯示實驗相關的資料

熱點內容
海康攝像螢石雲伺服器 瀏覽:814
安卓手機怎麼改安卓版名 瀏覽:147
雅思聽力807詞彙pdf 瀏覽:897
黃豆私人加密 瀏覽:192
java分鍾轉換小時 瀏覽:245
易語言伺服器如何提高 瀏覽:591
網站主機伺服器地址查看 瀏覽:859
演算法學不會能當程序員嗎 瀏覽:119
程序員技術交流研究 瀏覽:814
javaresponse文件 瀏覽:734
linuxrar壓縮文件夾 瀏覽:218
魅藍手機連接不上伺服器怎麼回事 瀏覽:379
工行app怎麼改已綁定銀行卡 瀏覽:533
oppo晶元程序員 瀏覽:602
oppok3應用怎麼加密 瀏覽:327
電腦軟盤怎麼加密碼 瀏覽:815
伺服器光交換機有什麼用 瀏覽:708
app上怎麼拍蛙小俠 瀏覽:217
志高聊天app怎麼下載 瀏覽:635
郵政app怎麼不能掃付款碼 瀏覽:559