導航:首頁 > 操作系統 > 51單片機88點陣顯示代碼

51單片機88點陣顯示代碼

發布時間:2022-05-24 18:40:13

Ⅰ 51單片機 8*8點陣26個英文字母怎麼樣顯示 要從上到下的編碼

#include<reg51.h>
#include<intrins.h>
#defineucharunsignedchar
#defineuintunsignedint
//--------------------------------------------
ucharcodeTable_of_Digits[40][8]=
{
{0x1C,0x22,0x22,0x22,0x22,0x22,0x22,0x1C},//0
{0x08,0x18,0x08,0x08,0x08,0x08,0x08,0x1C},//1
{0x1C,0x22,0x02,0x02,0x1C,0x20,0x20,0x3E},//2
{0x1C,0x22,0x02,0x1C,0x02,0x02,0x22,0x1C},//3
{0x08,0x18,0x28,0x48,0x7C,0x08,0x08,0x08},//4
{0x3E,0x20,0x20,0x3E,0x02,0x02,0x22,0x1C},//5
{0x1C,0x22,0x20,0x3C,0x22,0x22,0x22,0x1C},//6
{0x3E,0x02,0x04,0x08,0x10,0x10,0x10,0x10},//7
{0x1C,0x22,0x22,0x1C,0x22,0x22,0x22,0x1C},//8
{0x1C,0x22,0x22,0x22,0x1E,0x02,0x22,0x1C},//9
{0x00,0x1C,0x22,0x22,0x22,0x3E,0x22,0x22},//A
{0x00,0x3C,0x22,0x22,0x3E,0x22,0x22,0x3C},//B
{0x00,0x1C,0x22,0x20,0x20,0x20,0x22,0x1C},//C
{0x00,0x3C,0x22,0x22,0x22,0x22,0x22,0x3C},//D
{0x00,0x3E,0x20,0x20,0x3E,0x20,0x20,0x3E},//E
{0x00,0x3E,0x20,0x20,0x3E,0x20,0x20,0x20},//F
{0x00,0x1C,0x22,0x20,0x3E,0x22,0x22,0x1C},//G
{0x00,0x22,0x22,0x22,0x3E,0x22,0x22,0x22},//H
{0x00,0x1C,0x08,0x08,0x08,0x08,0x08,0x1C},//I
{0x00,0x3E,0x08,0x08,0x08,0x08,0x28,0x18},//J
{0x00,0x20,0x2C,0x30,0x20,0x30,0x2C,0x20},//K
{0x00,0x20,0x20,0x20,0x20,0x20,0x20,0x3E},//L
{0x00,0x42,0x66,0x5A,0x42,0x42,0x42,0x42},//M
{0x00,0x00,0x2C,0x32,0x22,0x22,0x22,0x22},//n
{0x00,0x1C,0x22,0x22,0x22,0x22,0x22,0x1C},//O
{0x00,0x3C,0x22,0x22,0x3C,0x20,0x20,0x20},//P
{0x00,0x1C,0x22,0x22,0x22,0x2A,0x26,0x1F},//Q
{0x00,0x38,0x24,0x24,0x38,0x30,0x28,0x24},//R
{0x00,0x1C,0x22,0x20,0x1C,0x02,0x22,0x1C},//S
{0x00,0x3E,0x08,0x08,0x08,0x08,0x08,0x08},//T
{0x00,0x42,0x42,0x42,0x42,0x42,0x42,0x3C},//U
{0x00,0x22,0x22,0x22,0x14,0x14,0x08,0x00},//V
{0x00,0x41,0x41,0x49,0x55,0x55,0x63,0x41},//W
{0x00,0x00,0x42,0x24,0x18,0x18,0x24,0x42},//X
{0x00,0x22,0x22,0x14,0x08,0x10,0x20,0x00},//Y
{0x00,0x3E,0x02,0x04,0x08,0x10,0x20,0x3E},//Z
};
//---------------------------------------
ucharcodexdat[8]={0x80,0x40,0x20,0x10,0x08,0x04,0x02,0x01};
ucharcodeydat[8]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};
//---------------------------------------
uchari=0;
ucharj=0;
uchart=0;
ucharNum_Index,disnum;
ucharkey;
ucharxi;
ucharyi;
//---------------------------------------
ucharcodedisstr[]="C201600102020";//顯示內容可以自己定義
//---------------------------------------
sbitwe1=P1^1;
sbitwe2=P1^3;
//---------------------------------------
//主程序
//---------------------------------------
voidmain()
{
//P1=0x80;
Num_Index=0;//從0開始顯示
TMOD=0x01;//T0方式0
TH0=(65536-2000)/256;//2ms定時
TL0=(65536-2000)%256;
IE=0x82;
key=0;
xi=0;
yi=0;
EX0=1;
IT0=1;
TR0=1;//啟動T0
while(1);
}
//---------------------------------------
//外部中斷0中斷函數
//按鍵處理
//---------------------------------------
voidext_int0()interrupt0
{
key++;
key&=0x03;
}
//---------------------------------------
//定時器0中斷函數
//顯示控制
//---------------------------------------
voidLED_Screen_Display()interrupt1
{
TH0=(65536-2000)/256;//2ms定時
TL0=(65536-2000)%256;
switch(key)
{
//顯示點陣圖形
case0:
P0=0xff;
if(disstr[Num_Index]>='A')disnum=disstr[Num_Index]-'A'+10;
elsedisnum=disstr[Num_Index]-'0';
we1=1;
P0=~Table_of_Digits[disnum][i];
we1=0;
P0=0xff;//輸出位碼和段碼
we2=1;
P0=ydat[i];
we2=0;
if(++i==8)i=0;//每屏一個數字由8個位元組構成
if(++t==250)//每個數字刷新顯示一段時間
{
t=0;
if(++Num_Index==13)Num_Index=0;//顯示下一個數字
}
break;
//流水燈「點」模式
case1:
we1=1;
P0=~xdat[xi];
we1=0;
we2=1;
P0=ydat[yi];
we2=0;
if(++t==250)//每個數字刷新顯示一段時間
{
t=0;
yi++;
if(yi>7){yi=0;xi++;}
if(xi>7)xi=0;
}
break;
//流水燈「行列」模式
case2:
we1=1;
P0=0x00;
we1=0;
P0=0xff;//輸出位碼和段碼
we2=1;
P0=xdat[i];
we2=0;
if(++t==250)//每個數字刷新顯示一段時間
{
if(++i==8)i=0;//每屏一個數字由8個位元組構成
t=0;
}
break;
default:
key=0;
i=0;
j=0;
t=0;
xi=0;
yi=0;
Num_Index=0;
we1=1;
P0=0xff;
we1=0;
we2=1;
P1=0x80;
we2=0;
break;
}
}

Ⅱ 單片機 8*8點陣C51程序

一.基於51的點陣屏顯示:(1)點亮第一個8*8點陣:
1.首先在Proteus下選擇我們需要的元件,AT89C51、74LS138、MATRIX-8*8-GREEN(在這里使用綠色的點陣)。在Proteus
6.9中8*8的點陣總共有四種顏色,分別為MATRIX-8*8-GREEN,MATRIX-8*8-BLUE,MATRIX-8*8-ORANGE
,MATRIX-8*8-RED。
在這里請牢記:紅色的為上列選下行選;其它顏色的為上行選下列選!而所有的點陣都是高電平選中列,低電平選中行!也就是說如果某一個點所處的行信號為低,列信號為高,則該點被點亮!此結論是我們編程的基礎。
2.在選擇完以上三個元件後,我們開始布線,具體如下圖:
這里P2是列選,P3連接38解碼器後作為行選。
選擇38解碼器的原因:38解碼器每次可輸出相應一個I/O口的低電平,正好與點陣屏的低電平選中行相對,並且節省了I/O口,大大方便了我們的編程和以後的擴展。
3.下面讓我們把它點亮,先看一個簡單的程序:
(將奇數行偶數列的點點亮,效果如下圖)
下面是源代碼:
/************8*8LED點陣屏顯示*****************/
#include<reg51.h>
void
delay(int
z)
//延時函數
{
int
x,y;
for(x=0;x<z;x++)
for(y=0;y<110;y++);
}
void
main()
{
while(1)
{
P3=0;
//行選,選擇第一行
P2=0x55;
//列選,即該行顯示的數據
delay(5);
//延時
/*****下同*****/
P3=2;
//第三行
P2=0x55;
delay(5);
P3=4;
//第五行
P2=0x55;
delay(5);
P3=6;
//第七行
P2=0x55;
delay(5);
}
}
上面的程序實現了將此8*8點陣的奇數行偶數列的點點亮的功能。重點讓我們看while循環內,首先是行選P3=0,此時38解碼器的輸入端為000,則輸出端為01111111,即B0端為低電平,此時選中了點陣屏的第一行,接著列選我們給P2口賦0x55,即01010101,此時又選中了偶數列,緊接著延時。然後分別對第三、五、七行進行相同的列選。這樣就點亮了此點陣屏奇數行偶數列交叉的點。
完成這個程序,我們會發現其實點陣屏的原理是如此簡單,和數碼管的動態顯示非常相似,只不過換了一種方式而已。
對不起啦,我傳了三次圖片都沒傳上,郁悶哪!希望你能理解哈!
不過我有傳一份WORD文檔在我的空間裡面

Ⅲ 求怎麼用51單片機8*8點陣顯示出生日快樂四個字有源代碼就更好了,求大佬指點!

用51單片機8*8點陣顯示出「生日快樂」四個字,這辦不到的。至少要用16X16的點陣才能顯示出漢字。8*8的點陣只能顯示0~9的數字。如果是模擬顯示,就用4個8*8的點陣組成一個顯示屏,也很簡單的。要是實物開發板,那就無法顯示了。

模擬的效果如下:

Ⅳ 求51單片機8x8點陣的,各種流動效果代碼,多謝

#include <REG51.H>

unsigned char code taba[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
unsigned char code tabb[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};

void delay1(void)
{
unsigned char i,j,k;

for(k=10;k>0;k--)
for(i=20;i>0;i--)
for(j=248;j>0;j--);

}

void main(void)
{
unsigned char i,j;

while(1)
{
for(j=0;j<3;j++)////from left to right 3 time
{
for(i=0;i<8;i++)
{
P2=taba[i];
P0=0xff;
delay1();
}
}

for(j=0;j<3;j++)////from right to left 3 time
{
for(i=0;i<8;i++)
{
P2=taba[7-i];
P0=0xff;
delay1();
}
}

for(j=0;j<3;j++)////from top to bottom 3 time
{
for(i=0;i<8;i++)
{
P2=0x00;
P0=tabb[7-i];

delay1();
}
}

for(j=0;j<3;j++)////from bottom to top 3 time
{
for(i=0;i<8;i++)
{
P2=0x00;
P0=tabb[i];

delay1();
}
}
}
}

第二種:
/*****************************************************************************************
* *
* LED點陣實驗(流動顯示1 2 3 4 5 6 7 8 9) *
* 說明 通過P0 和 P2 作為點陣介面 *
*要求學員掌握 LED點陣的工作原理和 各點陣腳的定義及接法,具體接線請參考接線說明 *
*我們採用的LED點陣式是低功耗,在做實驗時可以用單片機腳直接驅動 *
******************************************************************************************/

#include<reg51.h>

unsigned char code tab[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};

unsigned char code digittab[18][8]={

{0x00,0x00,0x3e,0x41,0x41,0x41,0x3e,0x00}, //0

{0x00,0x00,0x00,0x00,0x21,0x7f,0x01,0x00}, //1

{0x00,0x00,0x27,0x45,0x45,0x45,0x39,0x00}, //2

{0x00,0x00,0x22,0x49,0x49,0x49,0x36,0x00}, //3

{0x00,0x00,0x0c,0x14,0x24,0x7f,0x04,0x00}, //4

{0x00,0x00,0x72,0x51,0x51,0x51,0x4e,0x00}, //5

{0x00,0x00,0x3e,0x49,0x49,0x49,0x26,0x00}, //6

{0x00,0x00,0x40,0x40,0x40,0x4f,0x70,0x00}, //7

{0x00,0x00,0x36,0x49,0x49,0x49,0x36,0x00}, //8

{0x00,0x00,0x32,0x49,0x49,0x49,0x3e,0x00}, //9

{0x00,0x00,0x7F,0x48,0x48,0x30,0x00,0x00}, //P

{0x00,0x00,0x7F,0x48,0x4C,0x73,0x00,0x00}, //R

{0x00,0x00,0x7F,0x49,0x49,0x49,0x00,0x00}, //E

{0x00,0x00,0x3E,0x41,0x41,0x62,0x00,0x00}, //C

{0x00,0x00,0x7F,0x08,0x08,0x7F,0x00,0x00}, //H

{0x00,0x00,0x00,0xFF,0xFF,0x00,0x00,0x00}, //I

{0x00,0x7F,0x10,0x08,0x04,0x7F,0x00,0x00}, //N

{0x7C,0x48,0x48,0xFF,0x48,0x48,0x7C,0x00} //中

};

unsigned int timecount;

unsigned char cnta;

unsigned char cntb;

void main(void)

{

TMOD=0x01;

TH0=(65536-3000)/256;

TL0=(65536-3000)%256;

TR0=1; //開啟定時0
ET0=1;

EA=1; //開啟中斷

cntb=0;

while(1)

{ ;

}

}

/*************************************************
*
* 定時中斷
********************************************************/
void t0(void) interrupt 1 using 0
{

TH0=(65536-3000)/256; //定時器高位裝載數據
TL0=(65536-3000)%256; //定時器低位裝載數據

if(cntb<18) //紅色
{
P1=0xFF;
P2=tab[cnta];
P0=digittab[cntb][cnta];
}
else //綠色
{
P2=0xFF;
P1=tab[cnta];
P0=digittab[cntb-18][cnta];
}

if(++cnta>=8) cnta=0;
if(++timecount>=333)
{
timecount=0;
if(++cntb>=36)cntb=0;
}

}

別忘了採納和給分,互利共贏啊!

Ⅳ 用51單片機以及8*8點陣顯示英文字母或者數字(最好是全部數字和字母都說說哈),靜態顯示就可以 謝謝啊

8*8點陣是動態掃描的 靜態顯示也是動態掃描的結果。
比如說下面這個程序:
#include <AT89X52.H>
#include "74HC595.H"
unsigned char code a[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
unsigned char code b[]={0x00,0x7F,0x40,0x40,0x40,0x00,0x00,0x00};/*"L",0*/
void main(void)
{
unsigned char i;
while (1) //如果沒有while循環,將出現閃爍現象
{
for(i=0;i<8;i++)
{
Ser_IN(a[i]);//8X8點陣列掃描
Ser_IN(b[i]);//8X8點陣行掃描
Par_OUT();//74HC595輸出顯示
}
i=0;
}
}
程序裡面還要包含"74HC595.H"
把它放在工程文件夾裡面就可以了。"74HC595.H"具體程序如下:
#ifndef __74HC595_H__
#define __74HC595_H__

sbit SD = P1^4; //串列數據輸入
sbit ST_CK = P1^5; //存儲寄存器時鍾輸入
sbit SH_CK = P1^6; //移位寄存器時鍾輸入
void Ser_IN(unsigned char Data); //串列數據輸入
void Par_OUT(void); //串列數據輸出
//void Ser_Par(unsigned char Data); //串列輸入,並行輸出
//串列數據輸入
void Ser_IN(unsigned char Data)
{
unsigned char i;
for(i = 0; i < 8; i++)
{
SH_CK = 0; //CLOCK_MAX=100MHz
SD = Data & 0x80;
Data <<= 1;
SH_CK = 1;
}
}
//並行數據輸出
void Par_OUT(void)
{
ST_CK = 0;
ST_CK = 1;
}
//串列輸入,並行輸出
void Ser_Par(unsigned char Data)
{
Ser_IN(Data);
Par_OUT();
}
當然,由於不同的單片機引腳不同,可能編譯沒錯,但是實際是顯示不了的。
就是那麼多,望採納。

Ⅵ 用51單片機驅動8*8點陣 的代碼

8X8點陣LED工作原理說明 :8X8點陣共需要64個發光二極體組成,且每個發光二極體是放置在行線和列線的交叉點上,當對應的某一列置1電平,某一行置0電平,則相應的二極體就亮。
不知道你要實現什麼樣的顯示,不過基本方法是一樣的。我這有一個現成的8*8的程序,你可以根據這個去修改:
在8X8點陣LED上顯示柱形,讓其先從左到右平滑移動三次,其次從右到左平滑移動三次,再次從上到下平滑移動三次,最後從下到上平滑移動三次,如此循環下去。(要實現一根柱形的亮法:一根豎柱,對應的列置1,而行則採用掃描的方法來實現。 一根橫柱,對應的行置0,而列則採用掃描的方法來實現。)

匯編源程序:
ORG 00H
START: NOP
MOV R3,#3
LOP2: MOV R4,#8
MOV R2,#0
LOP1: MOV P1,#0FFH
MOV DPTR,#TABA
MOV A,R2
MOVC A,@A+DPTR
MOV P3,AINC R2
LCALL DELAY
DJNZ R4,LOP1
DJNZ R3,LOP2
MOV R3,#3
LOP4: MOV R4,#8
MOV R2,#7
LOP3: MOV P1,#0FFH
MOV DPTR,#TABA
MOV A,R2
MOVC A,@A+DPTR
MOV P3,A
DEC R2
LCALL DELAY
DJNZ R4,LOP3
DJNZ R3,LOP4
MOV R3,#3
LOP6: MOV R4,#8
MOV R2,#0
LOP5: MOV P3,#00H
MOV DPTR,#TABB
MOV A,R2
MOVC A,@A+DPTR
MOV P1,A
INC R2
LCALL DELAY
DJNZ R4,LOP5
DJNZ R3,LOP6
MOV R3,#3
LOP8: MOV R4,#8
MOV R2,#7
LOP7: MOV P3,#00H
MOV DPTR,#TABB
MOV A,R2
MOVC A,@A+DPTR
MOV P1,A
DEC R2
LCALL DELAY
DJNZ R4,LOP7
DJNZ R3,LOP8
LJMP START
DELAY: MOV R5,#10
D2: MOV R6,#20
D1: MOV R7,#248
DJNZ R7,$
DJNZ R6,D1
DJNZ R5,D2
RET
TABA: DB 0FEH,0FDH,0FBH,0F7H,0EFH,0DFH,0BFH,07FH
TABB: DB 01H,02H,04H,08H,10H,20H,40H,80H
END

C51語言源程序
#include <AT89X52.H>
unsigned CHAR code taba[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
unsigned CHAR code tabb[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};
void DELAY(void) { unsigned CHAR i,j; for(i=10;i>0;i--) for(j=248;j>0;j--); }
void DELAY1(void) { unsigned CHAR i,j,k; for(k=10;k>0;k--) for(i=20;i>0;i--) for(j=248;j>0;j--); }
void main(void)
{ unsigned CHAR i,j;
while(1)
{ for(j=0;j<3;j++) //FROM left to right 3 time
{ for(i=0;i<8;i++){ P3=taba[i]; P1=0xff; DELAY1();} }
for(j=0;j<3;j++) //FROM right to left 3 time
{ for(i=0;i<8;i++) { P3=taba[7-i]; P1=0xff; DELAY1();}}
for(j=0;j<3;j++) //FROM top to bottom 3 time
{ for(i=0;i<8;i++) { P3=0x00; P1=tabb[7-i]; DELAY1();}}
for(j=0;j<3;j++) //FROM bottom to top 3 time
{ for(i=0;i<8;i++) { P3=0x00; P1=tabb[i]; DELAY1();}}
}
}

Ⅶ 51單片機8*8點陣由下向上顯示0~9

P1口為行,P2口為列;
numb[10][8];//0~9的點陣數據
由下向上顯示,即從 P1.7開始驅動行,然後是P1.6,,,P1.0;

for(i=0;i<10;i++){
a=0x80;
for(j=7;j>0;j--){
P1=a;
P2=numb[i][j];

delaymS(5);
a=a>>1;

}
delaymS(50);
}

Ⅷ 51單片機 匯編語言 88點陣顯示英文字母 逐個顯示

LED點陣的核心原理跟4位LED數碼管一樣,都是需要行列掃描的。仔細查一下點陣的管腳,不是順序排列,把字體做成數組,直接把數組一個一個位元組的發送到埠上(你沒有說明P0和P2那個是行,那個是列,其中一個直接發,一個是按位發)。不斷的發送會導致點陣刷新,速度夠快的話,效果就出來了

Ⅸ 求51單片機一段代碼: 在8*8點陣中,P0接正,P1接負。要求一段C語言代碼實現反亮(亮的變暗、暗的變亮)。

(1)點陣式使用掃描方式的話,如果P0接正的話,循環讓P0的一個引腳置1,對應P1的8個位,為零該點亮,為1該點滅。
若想反亮,只需在對應時對P1取反~~~~
(2)用樓主的方法,(不使用掃描)無法實現正常顯示。
(3)若一定要用這樣賦值的方法的話,實現反亮也只能使用掃描。

Ⅹ C51單片機如何用二維數組讓88點陣顯示漢字

也跟 那個數碼管一個原理的
把寫好的欄位碼 放數組裡面
先去吧 顯示原理 搞明白 這個的話 看不懂 別來問!
然後 兩個FOR循環 大循環0~7自增 內嵌一個 段碼【0~7自增】 :這是8*8 單個的點陣了
你所說的 是要16*16才有能力顯示漢字的吧 是這樣的 你如果也像上面這樣的話一個字就用了整個 48個埠了 你 考慮用 兩個4-16 解碼器來節省一下埠 方法嗎 你看懂上面一個下面這個方法看不懂的話 我就不說什麼了 也不要找我! 看不懂上面 一個 的話 可以找我!
我就 不懂了 一樓 明明不會 又沒有說 有多少分 樓主 一看 沒多少人回答 給個辛苦的這種
二是 你說 他是灌水 又不像這辛辛苦苦 的 偏偏要坐要坐這個沙發!

閱讀全文

與51單片機88點陣顯示代碼相關的資料

熱點內容
三台伺服器配置IP地址 瀏覽:171
如何用命令方塊連續對話 瀏覽:274
win7linux共享文件夾 瀏覽:301
命令符打開本地服務 瀏覽:597
android應用程序源碼 瀏覽:699
安卓開發工程師簡歷怎麼寫 瀏覽:57
熱水器水量伺服器是什麼意思 瀏覽:115
stk衛星編譯 瀏覽:477
對後台程序員的要求 瀏覽:759
ios大文件夾圖標 瀏覽:624
生的計劃pdf 瀏覽:711
oppoa93加密便簽在哪查找 瀏覽:21
兩個數字的加減乘除運算編程 瀏覽:227
給手機加密碼忘記了怎麼辦 瀏覽:601
單片機運算符 瀏覽:297
移動端微信商城源碼 瀏覽:443
編程貓下一個背景在哪裡 瀏覽:359
javaclasstype 瀏覽:239
樂高編程和樂高課的延伸 瀏覽:357
蘋果手機怎麼切換app美國賬號 瀏覽:865