当前位置: 首页 > >

1602液晶显示器的详细控制与应用

发布时间:

#include<reg52.h> #include<intrins.h> #define uchar unsigned char #define uint unsigned int uchar SecondLine[]="xxxxxxxx "; //第二行数据 uchar FirstLine[] ="xxxxxxxxx "; //第一行数据 #define Data P1 //数据端口 sbit RS=P2^4; sbit RW=P2^5; sbit E=P2^6; void delay(uchar ms) { uchar i,j; for(i=ms;i>0;i--) for(j=100;j>0;j--); } // 延时函数 ms 毫秒

void DelayUs(unsigned char us) //--延时函数 { unsigned char uscnt; uscnt=us>>1; /*12MHz 频率*/ while(--uscnt); } void DelayMs(unsigned char ms) { while(--ms) { DelayUs(250); DelayUs(250); DelayUs(250); DelayUs(250); } } void lcd_write_com(uchar c) //写命令 { DelayMs(5);//操作前短暂延时,保证信号稳定 E=0; RS=0; RW=0; _nop_(); E=1; Data=c; E=0;

} void lcd_write_dat(uchar c) { //写数据

DelayMs(5); //操作前短暂延时,保证信号稳定 E=0; RS=1; RW=0; _nop_(); E=1; Data=c; E=0; RS=0; } void lcd_init() //LCD 初始化 { DelayMs(15); lcd_write_com(0x38); //display mode lcd_write_com(0x38); //display mode lcd_write_com(0x38); //display mode lcd_write_com(0x06); //显示光标移动位置 lcd_write_com(0x0c); //显示开及光标设置 lcd_write_com(0x01); //显示清屏 } void ShowChar(uchar pos,uchar c) //显示单个字符 { unsigned char p; if (pos>=0x10) p=pos+0xb0; //是第二行则命令代码高 4 位为 0xc else p=pos+0x80; //是第二行则命令代码高 4 位为 0x8 lcd_write_com(p);//写命令 lcd_write_dat(c); //写数据 } void ShowString (uchar line,char *ptr) { unsigned char l,*p; p=ptr; l=line<<4; while((*p)!='\0') { //显示字符串

ShowChar(l++,*(p)); p++; } } void disp(void) //主函数调用的显示函数 { ShowChar(uchar pos,uchar c) ShowString(0,"Jilin University"); ShowString(1,SecondLine); } Void main() { Disp(); While(1); }




友情链接: