lcd1602显示程序
据***********************************/
void LCD_WriteData(uchar WDLCD)
{
LCD_ReadStatus();//检测忙
LCD_Data = WDLCD
LCD_RS = 1;
LCD_RW = 0;
LCD_E = 1;//若晶振速度太高可以在这后加小的延时
LCD_E = 1;//延时
LCD_E = 0;
}
/************************写指令********************************/
void LCD_WriteCommand(uchar WCLCD,BuysC) //BuysC为0时忽略忙检测
{
if (BuysC)
LCD_ReadStatus(); //根据需要检测忙
LCD_Data = WCLCD;
LCD_RS = 0;
LCD_RW = 0;
LCD_E = 1;
LCD_E = 1;
LCD_E = 0;
}
/*****************初始化***********************************/
void LCD_Init(void)
{
LCD_Data = 0;
LCD_WriteCommand(0x38,0);//三次显示模式设置,不检测忙信号
Delay_ms(5);
LCD_WriteCommand(0x38,0);
Delay5Ms();
LCD_WriteCommand(0x38,0);
Delay_ms(5);
LCD_WriteCommand(0x38,1); //显示模式设置,开始要求每次检测忙信号
LCD_WriteCommand(0x08,1); //关闭显示
LCD_WriteCommand(0x01,1); //显示清屏
LCD_WriteCommand(0x06,1); // 显示光标移动设置
LCD_WriteCommand(0x0C,1); // 显示开及光标设置
}
/***********************显示一个字符********************************/
void DisplayOneChar(uchar X, uchar Y, uchar DData)
{
Y &= 0x1;
X &= 0xF; //限制X不能大于15,Y不能大于1
if (Y) X |= 0x40; //当要显示第二行时地址码+0x40;
X |= 0x80; // 算出指令码
LCD_WriteCommand(X, 0); //这里不检测忙信号,发送地址码
LCD_WriteData(DData);
}
/************************显示一串字符*******************************/
void DisplayListChar(uchar X, uchar Y, uchar code *DData)
{
uchar ListLength;
ListLength = 0;
Y &= 0x1;
X &= 0xF; //限制X不能大于15,Y不能大于1
while (DData[ListLength]》0x20) //若到达字串尾则退出
{
if (X 《= 0xF) //X坐标应小于0xF
{
DisplayOneChar(X, Y, DData[ListLength]); //显示单个字符
ListLength++;
X++;
}
}
}
/******************************************************************/
void main(void)
{
Delay_ms(400); //启动等待,等LCD讲入工作状态
LCD_Init(); //LCD初始化
Delay_ms(5); //延时片刻(可不要)
DisplayListChar(0, 1, up);
DisplayListChar(6, 0, down);
LCD_Data=0xff;
while(1);
}
用16F877A编写lcd1602显示程序
#include《pic.h》
#define uchar unsigned char
#define uint unsigned int
#define DB PORTD //定义端口
#define rs RB0 #define e RB1
__CONFIG(0x3B31);
const uchar data[]="happy everyday";//输入的字符串 第一行
const uchar data1[]="xiexie";//第二行
void init();
void write_commond(uchar dat);//写指令函数
void write_data(uchar dat);//写数据函数
void delay(uint x);
void delay(uint x)
{
uint a,b;
for(a=x;a》0;a--)
for(b=110;b》0;b--); }
void init()//初始化指令
{
write_commond(0x01);//0000000001,清除屏幕显示
write_commond(0x28);//设置4位格式,2行,5X7,功能设定
write_commond(0x0C);//0000001100,开显示,无光标,不闪烁
write_commond(0x06);//0000000110,置输入模式,光标右移,屏幕上的文字不移动
write_commond(0x14);//0001000100,设定CGRAM地址显示屏或光标移动方向
}
void write_commond(uchar dat)
{
rs=0;//指令 DB=dat;
e=1;//允许 下降沿触发1-0
delay(5);
e=0;
DB=DB《《4;//左移四位从RD4~RD7进入LCD
delay(5);
e=1; delay(5);
e=0;
}
void write_data(uchar dat)
{
rs=1;//数据
DB=dat;
e=1;//允许
delay(5);
e=0;
delay(5);
DB=DB《《4;
e=1;
delay(5);
e=0;
}
void main()
{
uchar i;
TRISD=0X00;//定义端口寄存器
PORTD=0X00;
PORTB=0X00;
TRISB=0X00;
init();
write_commond(0x80);//第一行的DDRAM的地址,不加0x10时,也可以从//最左边开
- LCD1602初始化流程图及程序的两种方法(09-08)
- 通用型LCD1602自定义字符的显示(02-12)
- 全方位解析LCD1602特性及单片机显示应用(09-17)
- LCD1602程序代码及显示流程图(09-12)
- 以LCD1602驱动程序为例分析C51单片机编程技巧(08-26)
- lcd1602工作原理是什么?(08-24)