⑴ 89c52單片機的wela引腳跟la引腳在哪,求高手幫忙!
wela la 引腳是自己定義的,一般是P3.6 和P3.7 wela 和la 信號一般用來控制鎖存器,進而控制數碼管。
⑵ 單片機數碼管顯示生日實訓會出現的問題
我們最常用的是七段式和八段式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埠的減少。
⑶ 單片機 LCD為什麼要關閉la,wela
la=0, weila=0應該是將段和位開放,使之有效,從程序看,估計這兩位分別控制各自的鎖存器或244或245之類的匯流排緩沖器。
⑷ 單片機程序中如何讓數碼管關閉,單片機進入休眠狀態
你這是直驅方式顯示,即使是掉電模式,單片機休眠了,但埠還保留在進入休眠前的狀態,如共陰極的,必須要將埠送低P0=0;,你的P0=0xff;數碼管是要耗電的,進入休眠時先將P0=0;才可以
P0=0;
PCON=0x02;
⑸ 運用51單片機實現4位8段LED數碼管的動態數字顯示,寫出C語言程序
#include<reg52.h>
#define
uchar
unsigned
char
#define
uint
unsigned
int
uchar
count;
uint
disnum;
sbit
la=P2^6;
sbit
wela=P2^7;
uchar
code
table[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71};
display(uchar,uchar,uchar);
delay(uchar);
void
main()
{
EA=1;
ET1=1;
TMOD=0x10;
TH1=(65536-50000)/256;
TL1=(65536-50000)%256;
TR1=1;
while(1)
{
if(count==20)
{
count=0;
//
if(disnum==1000)
//
disnum=0;
disnum++;
}
display(disnum/100,disnum%100/10,disnum%100%10);
}
}
void
tim1()
interrupt
3
using
3
{
TH1=(65536-50000)/256;
TL1=(65536-50000)%256;
count++;
}
display(uchar
,uchar
shi,uchar
ge)
{
P0=table[];
la=1;
la=0;
P0=0xfe;
wela=1;
wela=0;
delay(1);
P0=table[shi];
la=1;
la=0;
P0=0xfd;
wela=1;
wela=0;
delay(1);
P0=table[ge];
la=1;
la=0;
P0=0xfb;
wela=1;
wela=0;
delay(1);
}
delay(uchar
x)
{
uchar
a,b;
for(a=x;a>0;a--)
for(b=255;b>0;b--);
}
//你自己看一下,有不對的就改點.別忘了給分啊
⑹ 單片機 sbit la=P2^6 wela=1 la=1 這三句什麼意思
sbit la=P2^6
是申明U1鎖存器的鎖存端
wela=1
是U2鎖存器開啟
la=1
是U1鎖存器打開
la=0是U1鎖存器關閉
⑺ 51單片機顯示八位數碼管的C語言程序
1、最開始,我們先打開keil。