❶ 51單片機開發板led點陣程序
你的程序沒有問題的,估計是,你的程序與你的開發板上74HC595的引腳不符吧。下圖是根據你的程序畫的模擬圖,程序沒有變,只是把顯示的圖形數據變了一下,顯示出菱形。
u8 code anled[]=
{
/*-- 調入了一幅圖像:這是您新建的圖像 --*/
/*-- 寬度x高度=8x8 --*/
0x10,0x38,0x7C,0xFE,0x7C,0x38,0x10,0x00
};
❷ 數字4單片機led點陣怎麼編寫
你好!
1、確定點陣的大小
2、確定點陣的驅動器IC
3、確定單片機型號
4、連接硬體
5、根據硬體編寫程序
❸ 單片機 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文檔在我的空間裡面
❹ 單片機LED點陣顯示程序。
SETB SCK
SETB SCLT
把兩合去掉,改為:ORL DATAIN,#0X24
沒有十全十美,只有更好
❺ 普中51單片機矩形鍵盤控制led點陣實現計算器功能的C語言程序
摘要 本計算器只能進行1e8以內正數的加減乘除運算,若計算結果為負數會在數碼管上顯示「EEEEEEE」表示數據錯誤
❻ 單片機漢字8x8點陣LED動態顯示程序
#include <reg52.h>
sbit ADDR0 = P1^0;
sbit ADDR1 = P1^1;
sbit ADDR2 = P1^2;
sbit ADDR3 = P1^3;
sbit ENLED = P1^4;
unsigned char code image[11][8] = {
{0xC3, 0x81, 0x99, 0x99, 0x99, 0x99, 0x81, 0xC3}, //數字0
{0xEF, 0xE7, 0xE3, 0xE7, 0xE7, 0xE7, 0xE7, 0xC3}, //數字1
{0xC3, 0x81, 0x9D, 0x87, 0xC3, 0xF9, 0xC1, 0x81}, //數字2
{0xC3, 0x81, 0x9D, 0xC7, 0xC7, 0x9D, 0x81, 0xC3}, //數字3
{0xCF, 0xC7, 0xC3, 0xC9, 0xC9, 0x81, 0xCF, 0xCF}, //數字4
{0x81, 0xC1, 0xF9, 0xC3, 0x87, 0x9D, 0x81, 0xC3}, //數字5
{0xC3, 0x81, 0xF9, 0xC1, 0x81, 0x99, 0x81, 0xC3}, //數字6
{0x81, 0x81, 0x9F, 0xCF, 0xCF, 0xE7, 0xE7, 0xE7}, //數字7
{0xC3, 0x81, 0x99, 0xC3, 0xC3, 0x99, 0x81, 0xC3}, //數字8
{0xC3, 0x81, 0x99, 0x81, 0x83, 0x9F, 0x83, 0xC1}, //數字9
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, //全亮
};
void main()
{
EA = 1; //使能總中斷
ENLED = 0; //使能U4,選擇LED點陣
ADDR3 = 0;
TMOD = 0x01; //設置T0為模式1
TH0 = 0xFC; //為T0賦初值0xFC67,定時1ms
TL0 = 0x67;
ET0 = 1; //使能T0中斷
TR0 = 1; //啟動T0
while (1);
}
/* 定時器0中斷服務函數 */
void InterruptTimer0() interrupt 1
{
static unsigned char i = 0; //動態掃描的索引
static unsigned int tmr = 0; //1s軟體定時器
static unsigned char index = 9; //圖片刷新索引
TH0 = 0xFC; //重新載入初值
TL0 = 0x67;
//以下代碼完成LED點陣動態掃描刷新
P0 = 0xFF; //顯示消隱
switch (i)
{
case 0: ADDR2=0; ADDR1=0; ADDR0=0; i++; P0=image[index][0]; break;
case 1: ADDR2=0; ADDR1=0; ADDR0=1; i++; P0=image[index][1]; break;
case 2: ADDR2=0; ADDR1=1; ADDR0=0; i++; P0=image[index][2]; break;
case 3: ADDR2=0; ADDR1=1; ADDR0=1; i++; P0=image[index][3]; break;
case 4: ADDR2=1; ADDR1=0; ADDR0=0; i++; P0=image[index][4]; break;
case 5: ADDR2=1; ADDR1=0; ADDR0=1; i++; P0=image[index][5]; break;
case 6: ADDR2=1; ADDR1=1; ADDR0=0; i++; P0=image[index][6]; break;
case 7: ADDR2=1; ADDR1=1; ADDR0=1; i=0; P0=image[index][7]; break;
default: break;
}
//以下代碼完成每秒改變一幀圖像
tmr++;
if (tmr >= 1000) //達到1000ms時改變一次圖片索引
{
tmr = 0;
if (index == 0) //圖片索引10~0循環
index = 10;
else
index--;
}
}
❼ 關於51單片機16*64LED點陣左移程序~~高手進~~~~
這不僅僅是簡單的移位,我也做過,你生成字型碼的時候是橫著掃描嗎?如果是,移位也會橫向,如果不是,移位的話會亂碼。存放字型碼的最好是Uchar code,這樣佔用數據空間會減小。你移位的時候用中間變數和指針進行操作。
還有,你掃碼方式,我做的是1/4行掃。你的如果是逐行掃描就不太一樣 了。
❽ 51單片機如何儲存LED點陣屏顯示的圖案並且可以實現調用出來,求程序
首先你要確定點陣的大小,黑白(單色)點陣一個 點佔一位二進制數據,128*128點佔16*128個位元組,即2K。用專門的軟體將圖形轉化成十六進制數據,存儲於表格中,顯示時再一個一個讀出,進行顯示。
點陣顯示屏有的是一個點一個點寫入,有的是一行一行(或半行)寫入,程序當然是不一樣的。
❾ 單片機C51 LED點陣顯示驅動程序設計
點陣原理就是一個LED的兩端都接IO,當正極為1,負極為0時點亮相應的LED。
下面是8×8的LED點陣程序,參考一下吧
#include<reg51.h>
#defineucharunsignedchar
#defineuintunsignedint
ucharcodeTAB[]={
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
0x00,0x82,0xFE,0x82,0x80,0xC0,0x00,0x00,
0x00,0x7C,0x82,0x82,0x82,0x7C,0x00,0x00,
0x02,0x0E,0x72,0x80,0x70,0x0E,0x02,0x00,
0x00,0x82,0xFE,0x92,0xBA,0x82,0xC6,0x00,
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00
};
/*delay(uintt)
{
uinta,b;
for(a=0;a<t;a++)
for(b=0;b<110;b++);
}*/
voidmain(void)
{
uinti,j,xx;
ucharbittemp=0x01;
while(1)
{
for(i=0;i<40;i++)
{
for(xx=0;xx<500;xx++)
{
bittemp=0x80;
for(j=0;j<8;j++)
{
P2=0x00;//消隱
P0=~TAB[i+8-j];
P2=bittemp;
bittemp>>=1;
}
}
}
}
}