LCD12864液晶屏测试程序
- 格式:pdf
- 大小:119.73 KB
- 文档页数:5
/////LCD12864液晶屏测试程序(已通过)//////
////////液晶屏型号:HJ12864M-1//////////
#include
//8bit数据接入IO口
#define Part P0 //P0接8位数据线
//控制数据端
sbit LCD_RS=P2^5; //定义12864液晶RS端,寄存器选择信号 H:数据
寄存器 L:指令寄存器
sbit LCD_RW=P2^6; //定义12864液晶RW端,读/写信号 H:读 L:写
sbit LCD_EN=P2^7; //定义12864液晶LCDEN端, 片选信号 下降沿
触发,锁存数据
sbit LCD_PSB=P3^2; //定义12864液晶PSB端, H:并行 L:串行
sbit LCD_RST=P3^4; //定义12864液晶RST端, H:不复位 L:复位
uchar code dis1[]={"床前明月光"};
uchar code dis2[]={"疑是地上霜"};
uchar code dis3[]={"举头望明月"};
uchar code dis4[]={"低头思故乡"};
//毫秒延时函数 void delay(uint xms) {
uint i,j;
for(j=0;i for(i=0;i<110;i++); } //LCD忙检测函数 bit lcd_busy() { bit result; LCD_RS=0; LCD_RW=1; LCD_EN= 1; result=(bit)(Part & 0x80); LCD_EN=0; return result; } //液晶写命令函数 void lcd_write_cmd(uchar com) { while(lcd_busy()); LCD_RS=0; //选择指令寄存器 LCD_RW=0; //写 LCD_EN=0; Part=com; //指令值赋给P0口 delay(5); LCD_EN=1; delay(5); LCD_EN=0; } //液晶写一个字符数据函数 void lcd_write_dat(uchar date) { while(lcd_busy()); LCD_RS=1; //选择数据寄存器 LCD_RW=0; //写 LCD_EN=0; P0=date; //数据值赋给P0口 delay(5); LCD_EN=1; delay(5); LCD_EN=0; } //液晶写一个字符串函数 void lcd_write_string(uchar *str) { while(*str!='\0') //未结束 { lcd_write_dat(*str++); delay(5); } } //液晶显示位置函数 void lcd_pos(uchar x,uchar y) //从第X行的第Y位置开始显示 { uchar pos; if(x==1) //第一行 { x=0x80;} else if(x==2) //第二行 { x=0x90;} else if(x==3) //第三行 { x=0x88;} else if(x==4) //第四行 { x=0x98;} pos=x+y-1; //首地址为0X80 lcd_write_cmd(pos); } //液晶初始化函数 void lcd_init() { LCD_PSB=1; //并行方式 LCD_RST=1; //不复位 lcd_write_cmd(0x30); delay(5); lcd_write_cmd(0x0c); //开显示,不显示光标 delay(5); lcd_write_cmd(0x06); //写一个字符后地址指针自动加1 delay(5); lcd_write_cmd(0x01); //清屏 delay(5); } //主函数函数 void main() { // uchar i; lcd_init(); while(1) { lcd_pos(1,1); // lcd_write_string(dis1); lcd_write_string("床前明月光"); delay(5); lcd_pos(2,1); // lcd_write_string(dis2); lcd_write_string("疑是地上霜"); delay(5); lcd_pos(3,1); // lcd_write_string(dis3); lcd_write_string("举头望明月"); delay(5); lcd_pos(4,1); // lcd_write_string(dis4); lcd_write_string("低头思故乡"); delay(500); } }