来源:21ic 作者:
关键字:LCD1602 显示程序
#include
#define uchar unsigned char sbit rs=P2^0; //lcd1602 rs端 sbit rw=P2^1; //lcd1602 rw端 sbit en=P2^2; //lcd1602 e端 uchar code table[]=\"wang yun\";
uchar code tt1[]={0x1F,0x1F,0x04,0x0E,0x0E,0x04,0x1F,0x1F}; //王 uchar code tt2[]={0x0E,0x0E,0x00,0x1F,0x1F,0x0C,0x19,0x1F}; //云 /////////////////////////////////////// void delay(uchar H,uchar L) //定时器延时程序段 { TF0=0;TH0=H;TL0=L; while(!TF0); }
////////////////////////////////////// 写指令程序段 void w_comd(uchar lcd1602_code) { en=1;rs=0;rw=0; P0=lcd1602_code; delay(0xff,0xd8);
en=0; //en端下降沿触发数据发送
delay(0xff,0xd8); //本程序没有 忙检测程序,所以此处必须给足够长的延时,保证数据发送完全
}
///////////////////////////////////////写数据程序段 void w_data(uchar lcd1602_data) { en=1;rs=1;rw=0; P0=lcd1602_data; delay(0xff,0xd8);
en=0; //en端下降沿触发数据发送 delay(0xec,0x78); }
//////////////////////////////////// 初始化lcd1602 void set_lcd1602() { w_comd(0x01); //清屏 delay(0xf9,0x98);
w_comd(0x02); //地址指针归位 delay(0xf9,0x98); w_comd(0x06); // w_comd(0x0c); //开显示屏
w_comd(0x38); //8位传送数据 2行显示 }
/////////////////////////////////// 显示程序段
void view_lcd1602(uchar addr,uchar *i) //*i为所传字符串指针
{ int j;
w_comd(addr); //写入地址 while(*i>0)
{ w_data(*i); //写入数据 i++;
for(j=0;j<=100;j++) delay(0x15,0xa0); w_comd(0x18); //左移指令 } }
/////////////////////////////////////// cgram写入程序段 void cgram_set_lcd1602(uchar addr,uchar*i) { int j;
w_comd(addr); //地址写入 for(j=0;j<8;j++)
{ w_data(*i); //自定义数据写入 i++; } }
////////////////////////////////////// 主程序 void main() {
TMOD=0x00; //设定定时器
TR0=1; //定时器0开
set_lcd1602(); //初始化LCD1602 view_lcd1602(0x8f,table); cgram_set_lcd1602(0x40,tt1); cgram_set_lcd1602(0x48,tt2);
w_comd(0xca); w_data(0x00); w_data(0x01); //自定义字符显示 while(1); }
因篇幅问题不能全部显示,请点此查看更多更全内容