❶ 單片機lcd屏幕的問題 為甚麼整個屏幕一直在閃動
delay大,所以刷新慢。
顯示的時候沒有設置顯示位置,那麼顯示在原位,就不停刷新。
在main函數裡面最後加一句while(1);也就是原地踏步,那麼就不刷新了(也就是顯示完那幾個字元),就不抖動了
❷ 怎麼用單片機讓LCD顯示呢
用單片機讓LCD顯示,一要保證電路正確,二是程序必須與電路相符,程序中的LCD的控制腳必須與實物相符。否則,液晶屏只亮並不顯示字元。你主程序中的液晶屏初始化語句應放在第一行。你現在是放在最後了,假如前面語句顯示了,可初始化後就全沒了。
❸ 單片機用oled和lcd顯示有什麼區別
LED顯示屏是一種通過控制半導體發光二極體的顯示方式,靠燈的亮滅來顯示字元。用來顯示文字、圖形、圖像、動畫、行情、視頻、錄像信號等各種信息的顯示屏幕。OLED顯示屏由於同時具備自發光,不需背光源、對比度高、厚度薄、視角廣、反應速度快、可用於撓曲性面板、使用溫度范圍廣、構造及製程較簡單等優異之特性,被認為是下一代的平面顯示器新興應用技術。
OLED被稱為有機發光二極體或有機發光顯示器。整體上講,OLED的產業化目前已經開始,其中單色,多色和彩色器件已經達到批量生產水平,大尺寸全彩色器件目前尚處在研究開發階段,但產能仍較低。OLED是通過電流驅動有機薄膜本身來發光的,發的光可為紅、綠、藍、白等單色,同樣也可以達到全彩的效果。所以說OLED是一種不同於CRT,LED和液晶技術的全新發光原理。而LED顯示屏是由LED點陣和LEDPC面板組成,通過紅色,藍色,白色,綠色LED燈的亮滅來顯示文字、圖片、動畫、視頻,內容可以隨時更換,各部分組件都是模塊化結構的顯示器件。傳統LED顯示屏通常由顯示模塊、控制系統及電源系統組成。顯示模塊由LED燈組成的點陣構成,負責發光顯示;控制系統通過控制相應區域的亮滅,可以讓屏幕顯示文字、圖片、視頻等內容,單色、雙色屏主要用來播放文字的,全彩LED顯示屏不僅可以播放文字,圖片,動畫,還可以播放視頻等多種格式。
總的來說LED顯示屏,OLED是完全不同的成像技術。
另外LCD為液晶顯示屏,本身不發光,需要背光源。其由TFT基板與CF(彩膜)基板貼合而成,內充液晶。通過TFT基板提供電場來控制液晶旋轉的角度,從而起到控制液晶穿透率的作用。彩膜上印刷有RGB三種顏色色塊,背光源的光線透過透明的TFT基板,透過液晶分子,然後透過CF基板。受各個色塊下液晶分子的穿透率不同的影響,色塊發出不同亮暗的紅綠藍三色,可混合成顯示所需的顏色。
而OLED為有機發光二極體,屬於自發光器件,不需要背光源;構造為在TFT基板上蒸鍍在通電下可以自發光的RGB三色有機膜層。通過TFT基板控制電流大小,即可控制RGB有機膜層的發光亮暗,從而混合出顯示所需的顏色。
目前市場主流的顯示技術還是為TFT-LCD技術,OLED作為新一代的顯示技術,在工藝良率、大尺寸、高PPI、使用壽命、製作成本等方面還需要進一步提升,但其在低功耗、高色域、寬視角、可彎曲、更薄更輕、可透明方面有顯著的優勢。
❹ 如何用單片機來控制LCD顯示
你不會說的是電腦用的彩色液晶顯示器吧...:)
我這兒有個,320*240的lcd單片機控製程序....
❺ 單片機LCD編程
/*************************************************
名 稱:LCD12864_ST7920並行測試程序
試驗功能:測試基於ST7920控制晶元的LCD12864的顯示
並行方式連接;晶振11.0592M
編 寫:JiangX.net
*************************************************/
#include <reg52.h>
#include <ziku.h>
#include <intrins.h>
#include <string.h>
#define uchar unsigned char
#define uint unsigned int //宏定義
#define ulong unsigned long
#define Channal_A 1 //通道A
#define Channal_B 2 //通道B
#define Channal_AB 3 //通道A&B
//**************************一下為函數聲明修**************************************
static void DA_conver(uint Dignum);
extern void Write_A_B(uint Data_A,uint Data_B,uchar Channal,bit Model);
//**************************修改硬體時要修改的部分********************************
sbit DIN = P0^0; //數據輸入端
sbit SCLK = P0^1; //時鍾信號
sbit CS = P0^2; //片選輸入端,低電平有效
/*MAX187介面定義*/
sbit MAX187_CS= P2^6;
sbit MAX187_DO= P2^5;
sbit MAX187_SK= P2^7;
/*****13864LCD介面定義*****/
sbit LCD_RS = P3^7; //1:輸入數據 ;0:輸入命令
sbit LCD_RW = P2^7; //1:讀數據 0:寫數據
sbit LCD_EN = P2^6; //LCM使能端
sbit LCD_PSB = P2^3; //串並口選擇 1:並口模式; 0:串口模式;
#define LCD_DATA P1 //LCD匯流排埠
/*****LCD功能初始化指令*****/
#define CLEAR_SCREEN 0x01 //清屏指令:清屏且AC值為00H
#define AC_INIT 0x02 //將AC設置為00H。且游標移到原點位置
#define CURSE_ADD 0x06 //設定游標移到方向及圖像整體移動方向(默認游標右移,圖像整體不動)
#define FUN_MODE 0x30 //工作模式:8位基本指令集
#define DISPLAY_ON 0x0c //顯示開,顯示游標,且游標位置反白
#define DISPLAY_OFF 0x08 //顯示關
#define CURSE_DIR 0x14 //游標向右移動:AC=AC+1
#define SET_CG_AC 0x40 //設置AC,范圍為:00H~3FH
#define SET_DD_AC 0x80
/*****漢字地址表*****/
uchar code addr_tab[]={ //便於根據漢字坐標求出地址
0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,//第一行漢字位置
0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97,//第二行漢字位置
0x88,0x89,0x8a,0x8b,0x8c,0x8d,0x8e,0x8f,//第三行漢字位置
0x98,0x99,0x9a,0x9b,0x9c,0x9d,0x9e,0x9f,//第四行漢字位置
};
//------------全局變數定義-------------
uchar first[]="MAX187 ";
uchar show187[]="12345";
//uchar code shw187[]="123456";
uchar error[]="ERROR!";
ulong vv;
/*****n(ms)延時子程序*****/
void delayms(uint t) //約延時n(ms)
{
uint i;
while(t--)
{
for(i=0;i<125;i++);
}
}
/*****等待LCD忙*****/
void WaitBusy(void) //延時一小段時間,等待LCD空閑
{
uchar i=5;
while(i--);
}
/*****寫指令代碼*****/
void Lcd_WriteCmd(uchar cmdcode)
{
LCD_RS = 0;
LCD_RW = 0;
LCD_EN = 1;
WaitBusy();
LCD_DATA = cmdcode;
LCD_EN = 0;
}
/*****寫數據*****/
void Lcd_WriteData(uchar dispdata)
{
LCD_RS = 1;
LCD_RW = 0;
LCD_EN = 1;
WaitBusy();
LCD_DATA = dispdata;
LCD_EN = 0;
}
/*****初始化LCD*****/
void Lcd_Init()
{
LCD_PSB = 1;
delayms(50);
Lcd_WriteCmd(0x30); //選擇基本指令集
delayms(1);
Lcd_WriteCmd(0x30); //選擇8bit數據流
delayms(1);
Lcd_WriteCmd(0x0c); //開顯示(無游標、不反白)
delayms(1);
Lcd_WriteCmd(0x01); //清除顯示,並且設定地址指針為00H
delayms(20);
}
/*****顯示漢字*****/
void hanzi_Disp(uchar x,uchar y,uchar *s)
{ //x、y為漢字坐標
Lcd_WriteCmd(addr_tab[8*x+y]); //寫地址
while(*s>0)
{
Lcd_WriteData(*s); //寫數據
s++;
}
}
/*****顯示圖片(顯示Gdram內容)*****/
/*繪圖顯示的步驟
1 關閉繪圖顯示功能
2 先將垂直的坐標(Y)寫入繪圖RAM地址
3 再將水平的位元組坐標(X)寫入繪圖RAM地址
4 將D15-D8寫入RAM中
5 將D7-D0寫入到RAM中
6 打開繪圖顯示功能*/
//圖片取模方式:橫向取模,位元組正序
void pic_Disp(uchar *pic) //顯示Gdram內容(顯示圖片)
{
uchar x,y,i;
for(i=0;i<9;i=i+8)
for(y=0;y<32;y++)
{
for(x=0;x<8;x++)
{
Lcd_WriteCmd(0x36); //擴充指令,開繪圖顯示
Lcd_WriteCmd(0x80+y); //行地址
Lcd_WriteCmd(0x80+x+i); //列地址
Lcd_WriteData(*pic++); //寫數據 D15-D8
Lcd_WriteData(*pic++); //寫數據 D7-D0
Lcd_WriteCmd(0x30);
}
}
}
/*max187延時程序*/
void delay_MS(uint ms)//普通延時MS級
{ uint i,j;
for(i=0;i<ms;i++)
{for(j=0;j<1141;j++); }
}
void delay_uS(uint us)//普通延時US級
{ uint i,j;
for(i=0;i<us;i++)
{ for(j=0;j<10;j++); }
}
//MAX187讀程序;
unsigned int MAX187read(void)
{
uchar H,L,i;
uint count; //16位變數
MAX187_CS=0; //低電平有效,開始轉換
delay_uS(2); //延時8.5μ等待轉換結束
MAX187_SK=1;
MAX187_SK=0;
H=0; //高位變數清零
for(i=0;i<4;i++) //高4位
{
MAX187_SK=1;
if(MAX187_DO) H++; //位標量,如為1則H加1,如為0則跳過
MAX187_SK=0;
if(i!=3)
H<<=1;
}
L=0;
for(i=0;i<8;i++) //低8位
{
MAX187_SK=1;
if(MAX187_DO) L++; //位標量,如為1則L加1,如為0則跳過
MAX187_SK=0;
if(i!=7)
L<<=1;
}
delay_uS(1);
MAX187_CS=1;
count=0;
count=L;
return count;
}
void MAX187_data()
{
vv=MAX187read();
vv=vv*2*4096/4093;
show187[0]=vv/1000+'0';
show187[1]='.';
show187[2]=vv/100%10+'0';
show187[3]=vv/10%10+'0';
show187[4]=vv%10+'0';
show187[5]='\0';
}
/*****主函數*****/
void main(void)
{
uchar volt,number;
number=2;
volt=0x30+number;
Lcd_Init();
while(1)
{
Lcd_Init();
hanzi_Disp(0,1,"山東天工機電");
hanzi_Disp(1,2,"智能充電機");
hanzi_Disp(2,0,"www.sdtgjd.com");
hanzi_Disp(3,3,"");
delayms(1000);
Lcd_Init();
hanzi_Disp(1,2,"充電電流:");
//delayms(500);
//Lcd_Init();
MAX187_data();
hanzi_Disp(2,3,show187);
delayms(1500);
Write_A_B(0x0fff,0x0000,Channal_A,0); //測量A通道
//Write_A_B(0x0000,0x0600,Channal_B,1); //測量B通道
// Write_A_B(0x0504,0x0a47,Channal_AB,1); //測量AB通道,測量時需屏蔽上面兩句
//while(1);
}
}
//=================================================================
// 函數名稱 :void DA_conver(uint Dignum)
// 函數功能 :進行DA轉換
// 入口參數 :Dignum:根據說明設置轉化數據.頭四位為特殊位用於選擇轉化方式,
// 以及用於通道選擇.請自行設置.後12位為需要轉換的值
// 出口參數 :無
//=================================================================
void DA_conver(uint Dignum)
{
uint Dig=0;
uchar i=0;
SCLK=1;
CS=0; //片選有效
for(i=0;i<16;i++) //寫入16為Bit的控制位和數據
{
Dig=Dignum&0x8000;
if(Dig)
{
DIN=1;
}
else
{
DIN=0;
}
SCLK=0;
_nop_();
Dignum<<=1;
SCLK=1;
_nop_();
}
SCLK=1;
CS=1; //片選無效
}
//=================================================================
// 函數名稱 :void Write_A_B(uint Data_A,uint Data_B,uchar Channal,bit Model)
// 函數功能 :模式、通道選擇並進行DA轉換
// 入口參數 :Data_A:A通道轉換的電壓值
// Data_B:B通道轉換的電壓值
// Channal:通道選擇,其值為Channal_A,Channal_B,或Channal_AB
// Model:速度控制位 0:slow mode 1:fast mode
// 出口參數 :無
// 說明: Data_A,Data_B的范圍為:0-0x0fff
// 本程序如果只需要一個通道時,另外一個通道的值可任意,但是不能預設
//=================================================================
void Write_A_B(uint Data_A,uint Data_B,uchar Channal,bit Model)
{
uint Temp;
if(Model)
{
Temp=0x4000;
}
else
{
Temp=0x0000;
}
switch(Channal)
{
case Channal_A: //A通道
DA_conver(Temp|0x8000|(0x0fff&Data_A));
break;
case Channal_B: //B通道
DA_conver(Temp|0x0000|(0x0fff&Data_B));
break;
case Channal_AB:
DA_conver(Temp|0x1000|(0x0fff&Data_B)); //A&B通道
DA_conver(Temp|0x8000|(0x0fff&Data_A));
break;
default:
break;
}
}
❻ 單片機 LCD
12c887讀取時間不要太快 51好像沒有問題。你用的什麼液晶 什麼單片機,寫程序貌似不太好。思路給你個吧。你要做的是找到887的驅動程序 LCD的驅動程序,恩,太簡單了也不知道怎麼給你說了。
❼ 單片機lcd顯示函數
在數字系統里,字元有它的編碼,比如你在在LCD上顯示7,這個7它的意義是個字元,那麼你必須加個引號,因為加了個引號後,編譯程序就會知道它是一個「字元」而不是一個數字(實際上,加引號的7會被編譯程序翻譯成37H,對應7的ASIIC碼」。為什麼非要用「字元」呢,因為LCD只認字元,它只對「字元」進行顯示,就像上面的例子,LCD知道37H是字元7,所以會顯示字元7。如果不用引號,那麼編譯程序就單純的把它當作一個常量送過去,到LCD時,LCD 」看"到的是07H,它當然不會顯示出字元7出來。
要顯示PC傳來的數組,重寫一個函數如下:
void LCD_printstr(unsigned char * Pch)
{
unsigned char chnum=20; //一個字串里最多有幾個字元,這里是20個,可以改
while(chnum!=0) //循環取字元當一個字串不能超過20個,防止陷入死循環
{
if (*Pch)!=0x0d ; //數組里的字元串以0x0d,也就是回車符結束,如果不是回車符,
//表示還未到字串結尾,PC傳過來的字串要以0x0d結束,當然別的
//特殊字元也可以
{
LCD_write_data(* Pch); //顯示字元
//如果上面的函數顯示後不會自動向右移動,在此處加入移動字元位置的函數
Pch++; //指向下一個字元
chnum--; //字元計數減1
}
}//循環結束
}
比如你存字元的數組是unsgiend char str[],調用函數的方法如下:
LCD_printstr(&str);
❽ 單片機程序中lcdrs是什麼意思有什麼作用
是液晶的數據/命令選擇端,一般高電平代表傳輸的是數據,低電平代表傳輸的是命令。液晶資料上面有詳細介紹
❾ 單片機用oled和lcd顯示有什麼不同
前者是自發光後者是背光源發光,前者圖像暗場相比LCD更黑,對比度更好,其它差別不大。
❿ 單片機 中的LCD
write_date(0x30+shi);
shi是代表日期十位的數字,0x30就是ASCII碼的'0'字元,二者相加就是該數字的ASCII碼。下面的ge(日期個位)也是如此。
add是address(地址)的一種縮寫。一般習慣上寫為addr為好。