① 單片機點陣
你是用什麼實現點亮16*16點陣的,外圍接了什麼?
建立個數組,將顯示內容放進去,開始時從第一行開始顯示, 接在從第二行開始顯示你的數組,如此下去可以了,
② 51單片機 點陣問題
左移:處理的是P0 P2口的數據 154是行掃面,就不用更改了。給該行數據就可以了,可以定義一個2位元組的變數,用C語言直接左移就可以了(x<<=1;)再將這個變數強制轉換位單位元組的數據,輸出給兩個P口。
右移的道理和左移一樣,只是方向相反就可以了。
下移:和上移就簡單了,上移就是數組開始的2個 2個位元組的去掉,後面填上0X00/0XFF。就是第一幅畫面不讀取數組的1 2位元組,後面填上2個空白的位元組,第2幅畫面的 1 2 3 4位元組都不讀取,後面填上4個位元組的空白。因為一幅畫面的位元組數是固定了,你只要該數據就可以了。
③ 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;
}
}
④ 單片機io口怎麼排序呢
這里的PIO口都是個一位元組的寄存器,晶元內部規定P2.0為最低位,P2.7為最高位;
而數據的表示方式按約定是高位在左低位在右的排序,所以有你看到的1111 1110的順序;
而當數據按位進行串列傳輸,同時先傳低位時,就有你想看到的0111 1111 的順序了;
⑤ 單片機點陣
16*16的點陣么?單片機控制點陣方法是根據硬體電路來設計的。一般來說,點陣會連一個解碼器(比如74HC138等),通過控制138解碼器,完成列掃描功能。還有一部分直接接到單片機上,由單片機負責輸出。完成行掃描功能。網上這種例子一搜一大堆的。
⑥ 單片機點陣移動怎麼編
試試如下修改:
#include<reg51.h>
unsigned char code tab[] = {0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe};//列選通控制
unsigned char code digittab[9][8] = {
{0x3e,0x41,0x41,0x41,0x3e,0x00,0x00,0x00}, //0 8行,
{0x00,0x3e,0x41,0x41,0x41,0x3e,0x00,0x00},
{0x00,0x00,0x3e,0x41,0x41,0x41,0x3e,0x00},
{0x00,0x00,0x00,0x3e,0x41,0x41,0x41,0x3e},
{0x00,0x00,0x00,0x00,0x3e,0x41,0x41,0x41},
{0x00,0x00,0x00,0x00,0x00,0x3e,0x41,0x41},
{0x00,0x00,0x00,0x00,0x00,0x00,0x3e,0x41},
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3e},
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}};
unsigned char tt=0;
void delay()
{
int m, n;
for(m = 20; m > 0; m--) for(n = 15; n > 0; n--);
}
void Disp(unsigned char j)
{
unsigned char i; //i定義列,j定義行
for(i = 0; i < 8; i++) {
P0 = digittab[j][i]; // 行線
P2 = tab[i]; delay(); P2 = 0xff; // 列線, 掃描時間
}
}
void main(void)
{
unsigned char i, j;
while(1) {
for(i = 0; i < 10; i++) Disp(j);
j++;
if(j == 9) j = 0;
}
}
⑦ 單片機匯編語言8乘8點陣從上到下顯示修改成從左到右顯示
對於點陣顯示來說,是從上到下顯示還是從左到右顯示,還得看待顯示的字元的點陣數據是如何排列的;
1)如採用從左到右從上到下的排列結構形式,那麼顯示方式就如
則行(PC口)輸出8位數據,而列(PA口)則僅輸出與要顯示行對應的位數據;
如果字元的點陣數據是第一種結構的,想要採用第二種顯示形式,就需要先把字元的點陣數據進行數據格式的轉換。
⑧ 51單片機中,點陣8X8點陣取字模軟體有 陰碼、陽碼、逐列式、逐行式、逆向、順向,能幫做一個簡單的介紹嗎
8X8點陣 分為行和列,當以低電平進行行掃描,那麼列所送的就是陽碼,相反就是陰碼。。。。如:陽碼::第一個20Us內給第一行送低電平0,給列八位送待顯示的高電平,第二個20Us內給第二行送低電平0,給列八位送待顯示的高電平,如此進行八次,,剛好掃完一個屏幕,用時不到1Ms人眼是無法分辨出來的,就這樣我們看到的就是整平數碼。。。