導航:首頁 > 操作系統 > 單片機lcd字元移動

單片機lcd字元移動

發布時間:2023-12-29 01:53:24

『壹』 編寫51單片機實現液晶上字的循環顯示和移動程序

在1602的第一行 循環顯示 welcome to china
//用1602循環右移顯示"Welcome to China"
#include<reg52.h> //包含單片機寄存器的頭文件
#include<intrins.h> //包含_nop_()函數定義的頭文件
sbit RS=P2^0; //寄存器選擇位,將RS位定義為P2.0引腳
sbit RW=P2^1; //讀寫選擇位,將RW位定義為P2.1引腳
sbit E=P2^2; //使能信號位,將E位定義為P2.2引腳
sbit BF=P0^7; //忙碌標志位,,將BF位定義為P0.7引腳
unsigned char code string[ ]={"Welcome to China"};
/*****************************************************
函數功能:延時1ms
(3j+2)*i=(3×33+2)×10=1010(微秒),可以認為是1毫秒
***************************************************/
void delay1ms()
{
unsigned char i,j;
for(i=0;i<10;i++)
for(j=0;j<33;j++)
;
}
/*****************************************************
函數功能:延時若干毫秒
入口參數:n
***************************************************/
void delay(unsigned char n)
{
unsigned char i;
for(i=0;i<n;i++)
delay1ms();
}
/*****************************************************
函數功能:判斷液晶模塊的忙碌狀態
返回值:result。result=1,忙碌;result=0,不忙
***************************************************/
unsigned char BusyTest(void)
{
bit result;
RS=0; //根據規定,RS為低電平,RW為高電平時,可以讀狀態
RW=1;
E=1; //E=1,才允許讀寫
_nop_(); //空操作
_nop_();
_nop_();
_nop_(); //空操作四個機器周期,給硬體反應時間
result=BF; //將忙碌標志電平賦給result
E=0;
return result;
}
/*****************************************************
函數功能:將模式設置指令或顯示地址寫入液晶模塊
入口參數:dictate
***************************************************/
void WriteInstruction (unsigned char dictate)
{
while(BusyTest()==1); //如果忙就等待
RS=0; //根據規定,RS和R/W同時為低電平時,可以寫入指令
RW=0;
E=0; //E置低電平(根據表8-6,寫指令時,E為高脈沖,
// 就是讓E從0到1發生正跳變,所以應先置"0"
_nop_();
_nop_(); //空操作兩個機器周期,給硬體反應時間
P0=dictate; //將數據送入P0口,即寫入指令或地址
_nop_();
_nop_();
_nop_();
_nop_(); //空操作四個機器周期,給硬體反應時間
E=1; //E置高電平
_nop_();
_nop_();
_nop_();
_nop_(); //空操作四個機器周期,給硬體反應時間
E=0; //當E由高電平跳變成低電平時,液晶模塊開始執行命令
}
/*****************************************************
函數功能:指定字元顯示的實際地址
入口參數:x
***************************************************/
void WriteAddress(unsigned char x)
{
WriteInstruction(x+0x80); //顯示位置的確定方法規定為"80H+地址碼x"
}
/*****************************************************
函數功能:將數據(字元的標准ASCII碼)寫入液晶模塊
入口參數:y(為字元常量)
***************************************************/
void WriteData(unsigned char y)
{
while(BusyTest()==1);
RS=1; //RS為高電平,RW為低電平時,可以寫入數據
RW=0;
E=0; //E置低電平(根據表8-6,寫指令時,E為高脈沖,
// 就是讓E從0到1發生正跳變,所以應先置"0"
P0=y; //將數據送入P0口,即將數據寫入液晶模塊
_nop_();
_nop_();
_nop_();
_nop_(); //空操作四個機器周期,給硬體反應時間
E=1; //E置高電平
_nop_();
_nop_();
_nop_();
_nop_(); //空操作四個機器周期,給硬體反應時間
E=0; //當E由高電平跳變成低電平時,液晶模塊開始執行命令
}
/*****************************************************
函數功能:對LCD的顯示模式進行初始化設置
***************************************************/
void LcdInitiate(void)
{
delay(15); //延時15ms,首次寫指令時應給LCD一段較長的反應時間
WriteInstruction(0x38); //顯示模式設置:16×2顯示,5×7點陣,8位數據介面
delay(5); //延時5ms
WriteInstruction(0x0f); //顯示模式設置:顯示開,有游標,游標閃爍
delay(5);
WriteInstruction(0x06); //顯示模式設置:游標右移,字元不移
delay(5);
WriteInstruction(0x01); //清屏幕指令,將以前的顯示內容清除
delay(5);
}
void main(void) //主函數
{
unsigned char i;
LcdInitiate(); //調用LCD初始化函數
delay(10);
while(1)
{
WriteInstruction(0x01);//清顯示:清屏幕指令
WriteAddress(0x00); // 設置顯示位置為第一行的第5個字
i = 0;
while(string[i] != '\0')
{ // 顯示字元
WriteData(string[i]);
i++;
delay(150);
}
for(i=0;i<4;i++)
delay(250);

}

}

『貳』 單片機如何驅動LCD顯示字元

首先你要確定你的LCD是什麼型號,是否有字型檔 等等, 而後對應找這個型號的datasheet 查看怎麼驅動他。一般都會有例子,多逛逛單片機論壇吧 有用的。別老來網路問些不知道怎麼回答的問題
下面我給一個單片機驅動1602液晶的部分代碼,希望有用。
/*******************************************************************************
1602LCD
*******************************************************************************/
#include <reg51.h>
#include <intrins.h>
#define unit unsigned int
#define char unsigned char

sbit rs = P2^1;
sbit rw = P2^2;
sbit ep = P2^0;
char code ask[]={0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0xb0};
/* 0 1 2 3 4 5 6 7 8 9 - */
char code dis1[] = {"welcome!"};
char code dis2[] = {"pzowen love you!"};

//***********************************************//
//***********************************************//
///////////////////////////////////////////////////
///////////////////////////////////////////////////
delay(char ms)
{ // 延時子程序
char i;
while(ms--)
{
for(i = 0; i<250; i++)
{
_nop_();
_nop_();
_nop_();
_nop_();
}
}
}

lcd_wcmd(char cmd)
{ // 寫入指令數據到LCD
delay(1);
rs = 0;
rw = 0;
ep = 0;
_nop_();
_nop_();
P0 = cmd;
_nop_();
_nop_();
_nop_();
_nop_();
ep = 1;
_nop_();
_nop_();
_nop_();
_nop_();
ep = 0;

}

lcd_pos(char pos)
{ //pos=0x40; //設定顯示位置
lcd_wcmd(pos|0x80);
//lcd_wcmd(pos);

}

lcd_wdat(char dat)
{ //寫入字元顯示數據到LCD
delay(1);
rs = 1;
rw = 0;
ep = 0;
_nop_();
_nop_();
P0 = dat;
_nop_();
_nop_();
_nop_();
_nop_();
ep = 1;
_nop_();
_nop_();
_nop_();
_nop_();
ep = 0;

}

lcd_init()
{
delay(1); //LCD初始化設定
lcd_wcmd(0x38); //顯示模式設置:單行,8字元,5x7點陣
delay(1);
delay(1);
lcd_wcmd(0x0c); //開顯示,關游標,不閃爍
delay(1);
delay(1);
lcd_wcmd(0x06); //設置輸入模式:游標增量移動,顯示不移位
delay(1);
delay(1);
//lcd_wcmd(0x01); //清除LCD顯示的內容
//delay(1);

}

void main()
{
char i;
char k;
lcd_init(); // 初始化LCD
delay(10);
lcd_pos(0x04); // 設置顯示位置為第一行的第5個字元
i = 0;
while(dis1[i]!='\0')
{ // 顯示字元"welcome!"
lcd_wdat(dis1[i]);
//lcd_wdat(ask[xianshi[i]]);
delay(30);
i++;
}
//lcd_wdat(xianshi[1]);
//delay(30);

delay(20);
lcd_init();
delay(10);
lcd_pos(0x40); // 設置顯示位置為第二行第二個字元
delay(10);
i = 0;
while(dis2[i]!='\0')
{
lcd_wdat(dis2[i]); // 顯示字元" "
//lcd_wdat(ask[xianshi[i]]);
delay(30);
i++;
}

『叄』 單片機LCD左移顯示字元顯示不全

#include<reg52.h>

unsigned char code s[]={"Hello everyone! Welcome to Beijing"}; //顯示字元

sbit rs=P2^0;
sbit rw=P2^1;
sbit e=P2^2;

void delay(int i)//延時函數
{
while(i--);
}

void w_command(unsigned char w) //寫入指令
{
rs=0;
rw=0;
P3=w;
e=1;
delay(3000);
e=0;
}

void init_lcd() //1602液晶初始化設定
{
w_command(0x38);// 16*2顯示,5*7點陣,8位數據介面
w_command(0x0c);// 開顯示,關游標,不閃爍
w_command(0x06);// 指針加1,顯示不移動
w_command(0x01);// 清屏
}

void w_data(unsigned char num)//寫入字元顯示
{
rs=1;
rw=0;
P3=num;
e=1;
delay(3000);
e=0;
}

void main()
{
int i;

init_lcd();

while(1)
{
w_command(0x80);
i=0;

while(s[i]!='\0')
{
w_data(s[i]);
delay(6000);
w_command(0x1c);
i++;
if(i==16)w_command(0xc0);
}
}
}

『肆』 用單片機如何調整液晶的顯示位置

先寫顯示地址,在寫顯示數據0x80是第一行第一位,0xC0是第二行第一位
0x80加n就在第n位顯示了,1602液晶n<16

閱讀全文

與單片機lcd字元移動相關的資料

熱點內容
股票預測演算法現狀 瀏覽:428
程序員三高 瀏覽:178
pythonfiddle 瀏覽:215
韓信分油總共有幾種演算法 瀏覽:941
程序員思維方案 瀏覽:970
編譯環境要裝c盤嗎 瀏覽:648
單片機生成pwm 瀏覽:206
線上租車有什麼app 瀏覽:908
php程序修改 瀏覽:684
下列能查找文件或文件夾的操作是 瀏覽:314
遙感科學與技術演算法待遇 瀏覽:136
cad標注半徑命令 瀏覽:367
打卡領購app邀請碼怎麼填 瀏覽:336
編程訪問許可權沖突 瀏覽:152
桌面運維如何轉伺服器運維 瀏覽:627
tomcat如何設置伺服器 瀏覽:679
php編譯支持mysql 瀏覽:817
mir4手游安卓版怎麼玩國際服 瀏覽:23
伺服器程序怎麼刪除 瀏覽:657
阿里年薪70萬程序員名單照片 瀏覽:575