❶ 單片機8位數碼管顯示
給你個程序,可是你的數碼管的位選是什麼?用的鎖存器來選定還是三極體?根據你的意思是只要八個數碼管都亮,不需要選擇哪個亮哪個滅.
既然是共陽接法,你的陰極應該接的是P2口了,給P2口的八個腳低電平,那麼你看這個這個程序吧.
#incluede<reg52.h>//我板子上用的是AT89C52,這是頭文件,其實你這個貌似不需要加頭文件,頭文件里的內容是定義了一些東西,可以包含進來直接用,
voidmain()
{
P2=0xf9;
}
我的是八個三極體來選擇亮哪個數碼管,也是共陽接法.p1口位選(選擇是哪個數碼管亮),P0口段選(操作P0口來實現是顯示0~F),請看我的板子所配的程序.
#inlcude<reg52.h>
voidmain()
{
P1=0;//選種所有的數碼管,也就是八個數碼管都亮.
P0=0xf9;//讓被選種的數碼管都亮"1".
}
看我的截圖,我把三個圖截在一起,第一個圖說的是共陽數碼管的接法,.第二個圖說的是數碼管的段是如何接的,第三個圖是我板子上其中四個三極體控制四數碼管的選亮與否,也就是位選.
數碼管的段說的是數碼管其實是有8段LED接在一起,因此就有所謂的共陽和共陰.
❷ 51單片機控制8個數碼管並顯示1-8
數碼管段選連接到單片機P0口,位選連接到P2口
ORG0000h
MAIN:
CALLDISPLAY
AJMPMAIN
DISPLAY:
MOVR0,#0
MOVR1,#0x01
MOVDPTR,#TAB
LOOP:
INCR0
MOVA,R0
MOVCA,@A+DPTR
MOVP0,#0;消隱
MOVP0,A;送段碼
CALLDELAY
MOVA,R1;送位碼
RLA;移位
MOVP2,A
MOVR1,A
CALLDELAY
CJNER0,#8,LOOP;判斷8次是否循環完成
RET
DELAY:
MOVR6,#25
DD:MOVR7,#50
DJNZR7,$
DJNZR6,DD
RET
TAB:DB0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H
❸ 51單片機八位數碼管原理圖
下面三個圖為開發板的原理圖,此開發板用了兩個74HC573寄存器,可減少單片機io口的使用.鎖存器U8用來控制位選,即控制哪個數碼管.U9控制段選,
❹ 單片機驅動8位數碼管
設位碼接P1;
uchar buf[8] = {0};
void display( ){ //1ms運行一次
static uchar w = 0;
P1 = 0;
P0 = an[buf[w]];
P1 = (1 << w);
w = (w + 1) % 8; //循環+1
}
❺ 單片機 按鍵控制8位數碼管顯示問題
關於數碼管的顯示,是顯示完一個位的是數字後,在顯示下一個位時要先把上一個位顯示徹底關閉掉,通常可以是把全部數碼管位全部顯示為空的狀態,談後在開下一個位的顯示(有延時),這樣在開下一個位的鎖存時上一個位的數據就不會跑到該位顯示,不然會在下一位顯示時會與上一個位的數字出現重影現象。。。
還有對於數碼管的顯示,最好是一次性顯示完全部數碼管,還沒有得位就顯示0ff(要記得初始化你的數組)。我個人不建議你這種顯示按位數變化方式。。。
for(i=0;i<j;i=i+1)
//每次都顯示完8個數碼管比較好。。。
{
/*
在此增加把所有數碼管顯示為0FF狀態,全部位都打開顯示
*/
display=weima_table[i];
//數碼管需要顯示的位
weima_latch=1;
//鎖存器(位碼)打開
weima_latch=0;
//鎖存器(位碼)關閉
display=cunchudisplay[i];
//數碼管需要顯示的段
anma_latch=1;
//鎖存器(段碼)打開
anma_latch=0;
//鎖存器(段碼)關閉
Delay(100);
}
判斷歸零一個變數,最好緊跟在修改該值的後面,不用放在主循環里每次循環都要判斷,雖然你那沒多大問題但可讀性不夠好。。。
j=j+1;
if(j==8)
{j=0;}
❻ 單片機8位數碼管依次顯示0到7,要求用c語言實現
假設8個數碼管公共端均接地,同時顯示0-7
#include <reg52.h>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
uchar code DSY_CODE[]=
{
0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0x82,0xf8,0x80,0x90,0xff
};
void DelayMS(uint x)
{
uchar t;
while(x--)
for(t=120;t>0;t--);
}
void main()
{
uchar i=0;
P0=0x00;
while(1)
{
P0=~DSY_CODE[i];
i=(i+1)%10;/*顯示0-9*/
DelayMS(200);
}
}
下面程序從左到右顯示
#include <reg52.h>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
uchar code DSY_CODE[]=
{
0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90
};
void DelayMS(uint x)
{
uchar i;
while(x--)
{
for(i=200;i>0;i--);
}
}
void main()
{
uchar i,k=0x80;
while(1)
{
for(i=8;i>0;i--)
{
P2=0xff;
k=_crol_(k,1);
P0=DSY_CODE[8-i];
P2=k;
DelayMS(3);
}
}
}
❼ 關於單片機驅動八隻數碼管
共陽管,"0"對應0(A)0(B)0(C)0(D)0(E)0(F)1(G)1(DIGHT),注意你的接線順序
注意npn管驅動
0x80左移為0x100,或者高位截斷的話就是0x00,絕不是0x01,是左移,不是循環左移
❽ 51單片機顯示八位數碼管的C語言程序
1、最開始,我們先打開keil。
❾ 51單片機八位數碼管,
以上設計是沒有採用時鍾晶元的,時間來源才用的是單片機定時自動重載的方式計算實現。如果加上時鍾晶元的話,可以實現斷電繼續走時,現在常用的方案就是這樣。
關於單片機程序方面,難者不會,會者不難,在此寥寥幾句話也說不清楚。
有問題可以繼續追加