導航:首頁 > 操作系統 > 51單片機點陣教程

51單片機點陣教程

發布時間:2023-01-19 23:28:44

『壹』 c51單片機怎麼用不連續的IO點亮點陣,求大神指點

51的IO很特別,屬於SFR,不能直接或者間接定址,所以不能像寄存器那樣隨意調換順序。要麼在定義的時候修改,要麼使用以個介面函數,在介面函數中實現IO的兌換,這個函數可以接受參數什麼的,可以做的比較人性化。

『貳』 51單片機如何儲存LED點陣屏顯示的圖案並且可以實現調用出來,求程序

首先你要確定點陣的大小,黑白(單色)點陣一個 點佔一位二進制數據,128*128點佔16*128個位元組,即2K。用專門的軟體將圖形轉化成十六進制數據,存儲於表格中,顯示時再一個一個讀出,進行顯示。
點陣顯示屏有的是一個點一個點寫入,有的是一行一行(或半行)寫入,程序當然是不一樣的。

『叄』 求助c51單片機的點陣實現程序!

#include<reg51.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
uchar code Table_of_Digits[]= //定義字元的點陣數據
{
0x00,0x3e,0x41,0x41,0x41,0x3e,0x00,0x00, //0
0x00,0x00,0x00,0x21,0x7f,0x01,0x00,0x00, //1
0x00,0x27,0x45,0x45,0x45,0x39,0x00,0x00, //2
0x00,0x22,0x49,0x49,0x49,0x36,0x00,0x00, //3
0x00,0x0c,0x14,0x24,0x7f,0x04,0x00,0x00, //4
0x00,0x72,0x51,0x51,0x51,0x4e,0x00,0x00, //5
0x00,0x3e,0x49,0x49,0x49,0x26,0x00,0x00, //6
0x00,0x40,0x40,0x40,0x4f,0x70,0x00,0x00, //7
0x00,0x36,0x49,0x49,0x49,0x36,0x00,0x00, //8
0x00,0x32,0x49,0x49,0x49,0x3e,0x00,0x00, //9
0xff,0x81,0x81,0x81,0x81,0x81,0x81,0xff
};
uchar code xdat[8]={0x80,0x40,0x20,0x10,0x08,0x04,0x02,0x01};
uchar code ydat[8]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};
uchar i=0,j=0,t=0,Num_Index,key,xi,yi;
//主程序
void main()
{
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);
}
//T0 中斷函數
void ext_int0() interrupt 0
{
key++;
key&=0x03;
}
void LED_Screen_Display() interrupt 1
{
TH0=(65536-2000)/256; //2ms 定時
TL0=(65536-2000)%256;
switch(key)
{
case 0:
P0=0xff; //輸出位碼和段碼
P0=~Table_of_Digits[Num_Index*8+i];
P1=_crol_(P1,1);
if(++i==8) i=0; //每屏一個數字由8 個位元組構成
if(++t==250) //每個數字刷新顯示一段時間
{
t=0;
if(++Num_Index==10) Num_Index=0; //顯示下一個數字
}
break;
case 1:
P0=~xdat[xi];
P1=0xff;
P1=ydat[yi];
if(++t==250) //每個數字刷新顯示一段時間
{
t=0;
yi++;
if(yi>7){yi=0;xi++;}
if(xi>7)xi=0;
}
break;
case 2:
P0=0xff; //輸出位碼和段碼
P0=~Table_of_Digits[80+j];
if(j==0)P1=0x80;
P1=_crol_(P1,1);
if(++j==8) j=0; //每屏一個數字由8 個位元組構成
break;
default:
key=0;
i=0;
j=0;
t=0;
xi=0;
yi=0;
Num_Index=0;
P0=0xff;
P1=0x80;
break;
}
}

『肆』 51 單片機 74HC595 級聯 點陣是怎樣實現的

74HC595有4個埠很重要:串列輸入端、時鍾輸入端、使能端和串列輸出端。如果要級聯,那麼就是上一級的輸出端接下一級的輸入端,時鍾和使能端分別共用。這樣就可以多個級聯在一起了。那麼點陣顯示就是8個位的數據端+n個公共端。如果是兩個74HC595級聯就是8×8點陣,如果是3個級聯就可以是8×16點陣,也就是說一個74HC595做數據端,其他74HC595做公共端控制。然後就是點陣顯示,可以串列輸出數據接著再串列輸出公共端控制(具體看點陣的接法),關鍵是先數據和公共端都輸出後再做使能控制,這樣就可以防止串列動作時出現顯影。

『伍』 單片機 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單片機點陣..只用三個埠,接兩個74LS164,兩個164輸出端接8*8點陣

不知道你說的三個埠是指的PA,PB,PC這樣的埠。還是三條IO。
如果是三個P口的話那就有3*8=24條IO 隨便你怎麼使用

補充樓上所說:
164是串入並出,你可以將第二片的輸入腳接到第一片的最後一個輸出,讓兩片級聯。
這樣你就可以只用兩條線了,一條串列數據線,一條數據移位線
但是想要點亮點陣的一個點需要兩個8位數據,8*8一塊64個點,所以一屏圖像需要8*8*2*8=1024個時鍾序列。如果再考慮24幀的話1024*24=24576,主頻就應該選用1/(24576*12)*10^6=3.4MHZ至少

『柒』 51單片機點陣問題,總是亂碼

好象是滾動顯示中間的8個代碼看看陰碼陽碼是否搞錯,行列是否搞錯
delay(1000);不知你是多大的延時,要是1000ms可有點大,100ms以下還差不多
掃描一次才花費16ms,中間你敢停1000ms嗎?
個人認為,這個延時太小了會無滾動效果,太大了會造成其它行很暗、而只有最後一行很亮的情況
所以,乾脆去掉這個延時,而將每一次掃描重復5-7次,也就是80-110ms,然後再i++,將圖像向上推進
就是在for(z=0;z<8;z++)外面再加一層for循環
for(m=0;m<10;m++)//m值由實驗確定
{
for(z=0;z<8;z++)
{
c=i+z;
DULA=1;
P1=HANG[z];
DULA=0;
delay(1);
WELA=1;
P1=LIE_2[c];
WELA=0;
delay(1);
}
}
另外8*8點陣顯示效果不會很好,特別是點與點之間的空隙太大,有時不仔細看,還真看不出顯的是什麼東東

『捌』 51單片機 點陣問題

左移:處理的是P0 P2口的數據 154是行掃面,就不用更改了。給該行數據就可以了,可以定義一個2位元組的變數,用C語言直接左移就可以了(x<<=1;)再將這個變數強制轉換位單位元組的數據,輸出給兩個P口。
右移的道理和左移一樣,只是方向相反就可以了。

下移:和上移就簡單了,上移就是數組開始的2個 2個位元組的去掉,後面填上0X00/0XFF。就是第一幅畫面不讀取數組的1 2位元組,後面填上2個空白的位元組,第2幅畫面的 1 2 3 4位元組都不讀取,後面填上4個位元組的空白。因為一幅畫面的位元組數是固定了,你只要該數據就可以了。

『玖』 51單片機教程,要通俗易懂版的

我是一名多年的單片機工程師,下面的51單片機教程學習方法你參考一下

1 首先了解單片機的硬體結構。

2 掌握很基本的數電模電知識,如二進制、十進制、十六進制之間的轉換,與、或、非邏輯關系等。

3 熟悉5個基本語句的運用,如:if while for switch/case do-while,講真的,如果你不懂太多術語,if while for已經可以滿足你的日常實驗需要,我個人有體會。

4 熟悉上面的就可以從簡單的實驗入手,把更多的C語言附帶術語學上,越積累越多,漸漸變成單片機高手。

5 如果你想學習更多單片機和程序的知識,可以看看我整理好的「17個實驗學會單片機」,網路一下「17個實驗學會單片機」就可以看到在首頁了,從零開始打造一個單片機高手。

6 學單片機靠的是多玩實驗,不能三天打魚兩天曬網,只要堅持就會看到希望。如果不堅持,就很難學會,如果堅持,幾個月後的單片機就已經很厲害了。加油,祝你成功!

閱讀全文

與51單片機點陣教程相關的資料

熱點內容
安卓快手下載怎麼沒有下載到本地 瀏覽:228
怎麼在安卓手機登繪旅人 瀏覽:404
桌面文件全部加密 瀏覽:401
6s怎麼外接u盤需要什麼app 瀏覽:131
linux查看文件許可權命令 瀏覽:685
安卓手游存檔怎麼用 瀏覽:761
linuxyum安裝ftp 瀏覽:690
村委會主任可以推行政命令嗎 瀏覽:102
電腦文件夾封面多張圖片 瀏覽:263
網吧總伺服器叫什麼 瀏覽:922
多個演算法解決同一個問題 瀏覽:455
小車解壓後我的購車發票呢 瀏覽:977
做app開發用什麼雲伺服器 瀏覽:177
linux網卡子介面 瀏覽:985
21歲職高畢業學程序員怎麼學 瀏覽:321
vs如何對單個文件編譯 瀏覽:6
為什麼有的電腦不能安裝python 瀏覽:75
金蝶迷你版加密狗檢測到過期 瀏覽:186
硬體描述語言編譯結果 瀏覽:655
程序員逆天改命 瀏覽:19