基于MSC51系列的LCD1602通用程序
#define PORT P2
sbit RS = P3^5;//1602的數(shù)據(jù)/指令選擇控制線
sbit RW = P3^6;//1602的讀寫控制線
sbit EN = P3^7;//1602的使能控制線
unsigned char code table[] = "LCD1602 check ok"; //要顯示的內(nèi)容1放入數(shù)組tablel
unsigned char code table1[] = "study up"; //要顯示的內(nèi)容2放入數(shù)組table1
void DelayXms(unsigned int time)//延時程序,大約1ms
{
unsigned char i;
while(time--)
{
for(i = 0;i < 112;i++)//11.0592MHz晶振
{};
}
}
void LCDWriteCom(unsigned char com) //1602寫命令函數(shù)
{
RS = 0; //選擇指令寄存器
RW = 0; //選擇寫
PORT = com; //把命令字送入PORT
DelayXms(5); //延時一小會兒,讓1602準備接收數(shù)據(jù)
EN = 1; //使能線電平變化,命令送入1602的8位數(shù)據(jù)口
EN = 0;
}
void LCDWriteDat(unsigned char dat) //1602寫數(shù)據(jù)函數(shù)
{
RS = 1; //選擇數(shù)據(jù)寄存器
RW = 0; //選擇寫
PORT = dat; //把要顯示的數(shù)據(jù)送入PORT
DelayXms(5); //延時一小會兒,讓1602準備接收數(shù)據(jù)
EN = 1; //使能線電平變化,數(shù)據(jù)送入1602的8位數(shù)據(jù)口
EN = 0;
}
void LCDInit() //1602初始化函數(shù)
{
LCDWriteCom(0x38); //8位數(shù)據(jù),雙列,5*7字形
LCDWriteCom(0x0c); //開啟顯示屏,關光標,光標不閃爍
LCDWriteCom(0x06); //顯示地址遞增,即寫一個數(shù)據(jù)后,顯示位置右移一位
LCDWriteCom(0x01); //清屏
}
void main() //主函數(shù)
{
unsigned char n,m = 0;
LCDInit(); //液晶初始化
LCDWriteCom(0x80); //顯示地址設為80H(即00H,)上排第一位
for(m = 0;m < 16;m++) //將table[]中的數(shù)據(jù)依次寫入1602顯示
{
LCDWriteDat(table[m]);
DelayXms(200);
}
LCDWriteCom(0x80+0x44); //重新設定顯示地址為0xc4,即下排第5位
for(n = 0;n<8;n++) //將table1[]中的數(shù)據(jù)依次寫入1602顯示
{
LCDWriteDat(table1[n]);
DelayXms(200);
}
while(1); //動態(tài)停機
}
評論