网站排名提升软件seosem是什么职位
一、前言
LCD1602是一种广泛使用的字符型液晶显示模块,有8根数据线和3根控制线E,RS和R/W,8根数据线与单片机P6连接,3根控制线与使用P1口的P1.4、P1.5、P1.6连接,VO连接了P1.7,通过给P1.7赋值0或1,让LCD最亮或最暗。
二、程序展示
1、头文件部分
#include <c8051f020.h> sbit LCD_VO=P1^7;
sbit LCD_RS=P1^6;
sbit LCD_RW=P1^5;
sbit LCD_EN=P1^4;
sbit LED=P3^4;unsigned char code List1[] = "LCD-1602";
unsigned char code List2[] = "C8051F020";
unsigned char ch1,ch2;
2、端口初始化
void PORT_Init (void)
{XBR2 = 0x40; /*使能交叉开关*/P1MDOUT =0xff;P3MDOUT =0xff;P74OUT |= 0xff; /*推挽输出*/
}
3、延时子程序
void delay(uint s)
{uint x,y;for(x=0;x<s;x++)for(y=0;y<121;y++);
}
4、写命令子程序
void WriteCmdLCD(unsigned char CMD)
{ LCD_RS=0;LCD_RW=0;P6=CMD;LCD_EN=1;delay(50);LCD_EN=0;
}
5、写数据子程序
void WriteDataLCD(unsigned char Wdata)
{ LCD_RS=1;LCD_RW=0;P6=Wdata;LCD_EN=1;delay(50);LCD_EN=0;
}
6、显示单个字符子程序
void DisplayOneChar(unsigned char M, unsigned char N, unsigned char Data)
{N &= 0x1;M &= 0xF; //X不能大于15,Y不能大于1if (N) M |= 0x40; //显示第二行时地址码 0x40;M |= 0x80; // 计算指令码WriteCmdLCD(M); //发送地址码WriteDataLCD(Data);
}
7、显示字符串子程序
void Lcd_Init()
{ WriteCmdLCD(0x38); //初始化为8位数据,双行显示,5X7字型 WriteCmdLCD(0x08); // WriteCmdLCD(0x01); // WriteCmdLCD(0x06); // WriteCmdLCD(0x0c); //
}
8、显示字符串子程序
void Display_List(unsigned char M, unsigned char N, unsigned char code *Data)
{unsigned char Length_List;Length_List = 0;N &= 0x1;M &= 0xF; //M不能大于15,N不能大于1while (Data[Length_List]>0x20) //到达字串尾则退出{if (M <= 0xF) //M应小于0xF{DisplayOneChar(M, N, Data[Length_List]); //显示单个字符Length_List++;M++;}}
}
9、主程序
void main (void)
{WDTCN = 0xde;WDTCN = 0xad; //关闭看门狗PORT_Init ();OSCICN |= 0x01;delay(5000);LCD_VO=0;Lcd_Init ();ch1=0x41;for(ch2=0;ch2<26;ch2++){LED=0;delay(500);WriteDataLCD(ch1);ch1++;if(ch1==0x51){WriteCmdLCD(0xc0);}if(ch1==0x5b){break;}LED=1;delay(500);}delay(2000);WriteCmdLCD(0x01);for(ch2=0;ch2<10;ch2++){LED=0;delay(500);Display_List(3, 0, List1);Display_List(2, 1, List2); LED=1;delay(500);}delay(5000);}