Ⅰ 單片機漢字點陣屏怎麼寫暫停
單片機漢字點陣屏寫暫停:讀寫時序,這個要小心,一般液晶控制晶元的時序分為8080,6800,根據規格書寫出讀寫子程序,我們在寫液晶程序時有時候沒有顯示,程序檢查半天發現是讀寫子程序錯誤。
有閃爍,可能是時間太慢,掃描次數不夠。每顯示一個字,無論自上而下,還是從做到右,都是在利用欺騙眼睛的原理完成的。你一個字盡量多刷幾次,每次的時間短一點,刷新頻率高點(針對一個字)。兩個字之間的間隔長一點。
地址寄存器AR:
地址寄存器用於保存當前CPU所要訪問的內存單元或I/O設備的地址。由於內存與CPU之間存在著速度上的差異,所以必須使用地址寄存器來保持地址信息,直到內存讀/寫操作完成為止。
顯然,當CPU向存儲器存數據、CPU從內存取數據和CPU從內存讀出指令時,都要用到地址寄存器和數據寄存器。同樣,如果把外圍設備的地址作為內存地址單元來看的話,那麼當CPU和外圍設備交換信息時,也需要用到地址寄存器和數據寄存器。
Ⅱ 單片機 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單片機LED點陣屏有燈不亮怎麼辦
可進入調試模式,在執行22句後,檢查595數據,看看其輸出是不是 0xaa,在執行23句後,檢查P0口數據,看看是不是 0x7f;
Ⅳ 單片機怎麼在點陣屏上交替顯示日月兩個字
要顯示漢字,最小的點陣數是16×16,這也是漢字型檔中最少的點陣數。如果只是顯示日月兩個字,用16×16的點陣屏倒是可以同時顯示出來,因為合起來是明字,只要比明字中的日月適當大點就行。當然這樣不標准。那可以交替分別顯示兩個字也很容易的。可設定顯示一個字的時間,比如每個字顯示一秒或更多,根據需要設定。方法是取出兩個字的模,定義成二維數組,下標分別為x、y,x為0、1,代表日、月兩個字,y=0~31,為每個字的字模數據。定時器按x循環即可分別顯示日月兩個字了。
Ⅵ 51單片機 點陣屏滾動顯示姓名首字母
摘要 #include "csb.h"
Ⅶ 51單片機做點陣屏的問題,64行 16列,採用行掃,但顯示的時候,畫面總是跳動閃爍,我是在Proteus 7上模擬
^_^,我以前做個一個類似的項目,經驗認為一般每一行使用1~2ms就可以了,也就是說實際應用中20ms內完成一個周期一般是沒有問題的,頻率太高,顯示會變暗,頻率太低就會閃爍,下面是部分代碼,原程序還有一個紅外遙控輸入程序的:
/********************show****************************************************/
void trasmit(unsigned char byte,unsigned char bit_count){
unsigned char tmp;
tmp=bit_count;
byte<<=3;
clock=0;
for(;tmp>0;tmp--) {
// while(tmp--){
if (byte&0x80)wdata=1;
else wdata=0;
clock=1;_nop_();clock=0;
byte<<=1;
}
rdata=0;
rdata=1;_nop_();rdata=0;
}
/*****************************************************************************/
void show0(unsigned char y){
unsigned char i;
wdata=1;
for(i=0;i<y;i++){
clock=1;
clock=0;
}
rdata=1;
rdata=0;
}
/***************************************************************/
void display(void){
unsigned char k,row,bit_cnt;
iout=0x01;
for(row=0;row<7;row++)
{
bit_cnt=5;
for(k=0;k<9;k++){
if(show_letter[k]>127)show_letter[k]=_NUL;//
temp_data[k]=letter[show_letter[k]][row];
}
SCAN_PORT=0xff;
for(k=0;k<9;k++)
{
if(!int_f){
if(k==8)bit_cnt=bit_step_temp;
trasmit(temp_data[k],bit_cnt);
}
else if(k==8 && !brake_f){
if(right_flag|left_flag)trasmit(temp_data[k],bit_cnt);
}
else {
if(brake_f)show0(40);
else trasmit(temp_data[k],bit_cnt);
}
if((brake_f1|right_flag|left_flag| k==8) && REVERSE_S);
else show0(1);
}
if(right_flag|left_flag){
show0(2);
}
//if(brake_f1)show0(5);
SCAN_PORT=~iout;
//if(brake_f)SCAN_PORT=0xff;
// if(brake_f)
DelayMs(4);
iout=iout<<1;
SCAN_PORT=0xff;
}
}
/***************************************************************************/
Ⅷ 單片機 怎麼控制點陣屏和LCD屏
LED點陣屏和LCD屏的顯示原理是不同的,LCD屏是自帶的驅動晶元的,可以和單片機直接連接的。
而LED屏需要加驅動電路的,而且顯示時也要採用動態掃描的方式的。
LCD屏顯示漢字時,有的屏是自帶字型檔的,不帶字型檔的屏,就要用漢字取模軟體取出顯示的數據,即取出漢字的字模。
LED屏顯示漢字,就必須用取模軟體來取模了,不是自己像畫畫那樣,那可畫不起。取模軟體在網上可以下載的。
最後一個問題:LCD的集成電路去了當成點陣屏用嗎?這是不可能的,一則LCD的集成電路是封裝在PCB板上的,即軟封裝的,自己是用不了的,是不可能自己接線的。二則,假如能接線,可是,LCD和LED顯示原理不同,是根本不可能通用的。
舉個例子吧,你能把你家的私家車掛在高鐵的車頭拉著跑嗎?
Ⅸ 基於單片機led點陣屏的設計需要用到哪些知識
ABSTRACT II
第1章 前言 1
1.1 LED電子顯示屏概述 1
1.3 LED顯示屏的應用示例 2
第2章 顯示原理及控制方式分析 3
2.1 LED點陣模塊結構 3
2.2 LED動態顯示原理 4
2.3 LED常見的控制方式 4
第3章 方案設計與分析 7
3.1 顯示單元 7
3.2 滾屏的實現 7
3.3 關於可擴展性 7
3.4 微控制器的考慮 7
3.5 關於點陣數據的存儲方式 8
3.6 關於顯示內容的更新 9
3.7 總體電路結構及工作原理 9
3.7.1 硬體電路框圖 9
3.7.2 工作原理 11
第4章 硬體電路設計 13
4.1 顯示單元電路設計 13
4.1.1 LED點陣模塊的選擇 13
4.1.2 列驅動電路設計 13
4.1.3 行驅動電路設計 14
4.2 單片機控制系統電路設計 15
4.2.1 單片機的選型 15
4.2.2 單片機系統電路設計 16
4.3 字型檔與單片機的介面設計 17
4.3.1 字型檔晶元選型 17
4.3.2 字型檔晶元的使用方法 17
4.3.3 字型檔晶元的電氣特性 18
4.3.4 字型檔晶元與單片機的介面設計 19
4.3.5 字型檔晶元3.3V電源設計 20
4.3.6 5V-3.3V的電平轉換電路設計 20
Ⅹ 課程設計:單片機的8乘8LED點陣顯示屏的設計
#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;
}
}