Ⅰ 用keil51單片機C語言編寫程序,使液晶顯示器顯示16*16點陣漢字,請問怎麼編寫,謝謝!
#include"at89x51.h"
unsigned char code led[]={0x10,0x04,0x10,0x03,0xD0,
0x00,0xFF,0xFF,0x90,0x00,
0x18,0x1D,0xF7,0x13,0x14,
0x11,0x54,0x15,0x94,0x19,
0x14,0x51,0x14,0x91,0xF6,
0x7F,0x04,0x11,0x00,0x01,
0x00,0x00,
0x04,0x04,0x04,0x02,0x04,
0x01,0xC4,0xFF,0x3F,0x00,
0x04,0x20,0x04,0x10,0x04,
0x08,0xE4,0x3F,0x04,0x42,
0x1F,0x41,0x84,0x40,0xC4,
0x40,0x06,0x40,0x04,0x70,
0x00,0x00};
unsigned char i=0,j=0,time_50ms=0;
delay();
main()
{
TMOD=0X01;
TH0=0X3C;
TL0=0XB0;
TR0=1;
ET0=1;
EA=1;
while(1)
{
P1=i;
P2=led[32*j+2*i];
P3=led[32*j+2*i+1];
delay();
i++;
if(i==16)
i=0;
if(time_50ms==20)
{
time_50ms=0;
j++;
if(j==2)
j=0;
}
}
}
int_T0() interrupt 1
{
TH0=0X3C;
TL0=0XB0;
time_50ms++;
}
delay()
{
unsigned char t1;
for(t1=0;t1<100;t1++);
}
Ⅱ 51單片機Led點陣8*8顯示一個字的程序是什麼 請講講程序內容里的原理!謝謝
在8X8點陣LED上顯示柱含卜形,讓其先從左到右平滑移動三次,其次從右到左平滑移動三次,再次從上到下平滑移動三次,最後從下到上平滑移動三次,如此循環下去。
1. 程序設計內容
8X8點陣LED工作原理說明 :8X8點陣共需要64個發光二極體組成,且每個發光二極體是放置在行線和列線的交叉點上,當對應的某一列置1電平,某一行置0電平,則相應的二極體就亮;因此要實現一根柱形的亮法,如圖49所示,對陸老鎮應的一列為一根豎柱,或者對應的一行為一根橫柱,因此實現柱的亮的方法如下所述:早粗
一根豎柱:對應的列置1,而行則採用掃描的方法來實現。
一根橫柱:對應的行置0,而列則採用掃描的方法來實現。
Ⅲ 關於51單片機16*64LED點陣左移程序~~高手進~~~~
這不僅僅是簡單的移位,我也做過,你生成字型碼的時候是橫著掃描嗎?如果是,移位也會橫向,如果不是,移位的話會亂碼。存放字型碼的最好是Uchar code,這樣佔用數據空間會減小。你移位的時候用中間變數和指針進行操作。
還有,你掃碼方式,我做的是1/4行掃。你的如果是逐行掃描就不太一樣 了。
Ⅳ 如何用51單片機設計16*128點陣的LED顯示器
1:Dais-PG206試驗箱,這是教學用的,應該是你們學校的實驗儀器,建議你到枝帶實驗室了解一下。2:16×16點陣就是256個LED發光二極體集成在一塊上,16個腳接高電平16腳通過限流電阻接地,通電就亮,原理很簡單。3:通信原理這個定義很廣泛,不過用在你的設計上用VB6.0做上位機通信程序,那必須得用到「串口通信」,做這個設計了解這個協議就足夠了,這個通訊協議肯定比你想的要簡單。4:16×16點陣要顯示漢字,一直亮著很耗電,為了節約能源用單片機循環點亮的方式猛雀蘆,大概一秒鍾點亮12次以上,人眼看到的基本就是一直亮的狀態,原理就是這樣,至於怎麼實現,你可以在網上下一個C程序,自己讀一遍(如果你會的話,程序不會很長,真想學的話找個人教你1天就能讀懂那個程序)。5:鍵盤程序在網上找很多,原理就是判斷單片機引腳的電平狀態,別忘了加防抖程序。6:整個歲攜系統的原理弄明白了,電氣圖自然就會畫了。開題報告:談談現在廣告屏的現狀,以後的發展趨勢,本系統的大概說明字數不用太多補充一句:畢業設計是在學校最後一次學習的機會,好好珍惜吧,即使一點不會最好還是硬著頭皮自己做,以後受益匪淺,祝你好運!
Ⅳ 求助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;
}
}