?? lcd1602 液晶.txt
字號:
//function: 循環顯示2行字符串,整屏左移;
//data: 2009 4.16
//E-->P1.7 R/W-->P1.6 RS-->P1.5
//D7-->P0.3 D6-->P0.2 D5-->P0.1 D4-->P0.0
//=================================頭文件
#include <c8051f330.h>
#include <intrins.h>
//==================================宏命名
#define uchar unsigned char
#define uint unsigned int
//======================================定義變量
uchar num;
uchar code table[]="I am CJG!!!";
uchar code table1[]="a USST's student";
//================================ 定義常量
sbit LCM_RS = P1^5;
sbit LCM_RW = P1^6;
sbit LCM_E = P1^7;
//=============================子程序聲明
void delay(uint z);
void init();
void write_data(uchar date);
void write_com(uchar com);
void left_str( );
void lcd_init();
//=============================//主程序
void main()
{
init();
lcd_init();
while(1)
{
left_str( );
}
}
//=============================//子程序
void init()
{
PCA0MD &= ~0x40;
XBR0=0x00;
XBR1=0x40;
P1MDIN |=0xee;
P1MDOUT |=0xee;
P0MDIN |=0x0f;
P0MDOUT |=0x0f;
}
void delay(uint z) //延時
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
void write_com(uchar com) //寫命令
{
delay(10);
LCM_RS=0;
LCM_RW=0 ;
LCM_E=0;
com = ((com&0x0f)<<4) | ((com&0xf0)>>4); //高低位轉換
P0=(com&0x0f);
delay(5);
LCM_E=1;
delay(5); //延時0.5us
LCM_E=0;
com = com >>4; //高四位移到低四位
P0= com&0x0f; //寫低四位
LCM_E = 1; delay(5); // Z=1,延時3.2us
LCM_E= 0; delay(5);
}
void write_data(uchar date)//寫數據
{
delay(10);
LCM_RS=1;
LCM_RW=0 ;
LCM_E=0;
date = ((date&0x0f)<<4) | ((date&0xf0)>>4);
P0=(date&0x0f);
delay(5);
LCM_E=1;
delay(5);
LCM_E=0;
date = date >>4;
P0= date&0x0f;
LCM_E = 1; delay(5);
LCM_E = 0; delay(5);
}
void lcd_init() //lcd初始化
{
delay(10);
write_com(0x02); //function set
write_com(0x28); //4bit 2line frot
write_com(0x06); //Mode set 顯示右移
write_com(0x0e); //開屏幕,開光標,不閃爍
write_com(0x01); //清屏
write_com(0x80+0x03); //指針
delay(5);
}
void left_str( )
{
write_com(0x80+0x13); //移動指針
//--------------------------------------
for (num=0;num<11;num++)
{
write_data(table[num]); //寫字符串1
}
write_com(0x80+0x40+0x10);
//----------------------------------
for (num=0;num<16;num++)
{
write_data(table1[num]); //寫字符串2
}
//------------------------------------
for(num=0;num<16;num++) //全屏左移
{
write_com(0x18);
delay(500);
}
delay(1000);
write_com(1); //清屏
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -