lcd1602.c

来自「单片机Atmel at89s51与液晶LCM1602显示程序」· C语言 代码 · 共 122 行

C
122
字号

/*1-VSS 2-VDD 3-V0 4-RS 5-R/W 6-E
 *7-14 DB0-DB7 15-BLA 16-BLK
 */

/*copyright 2007,ShangHai  HaoTun Electronic Technology co.,Ltd
 *
 *This sample is used for lcm1602 .
 *
 *write by Shifang 2007-8-11
 *
 *V1.1
 */
#include<reg52.h>
#include<stdio.h>
#include<intrins.h>


unsigned int hour,minute,second,count;

sbit RS = P2^4;//Pin4
sbit RW = P2^5; //Pin5
sbit E  = P2^6;//Pin6

#define Data  P0    //数据端口

char data TimeNum[]="                ";
char data Test1[]="                  ";
/******************************************************************/
/*                    函数声明                                    */
/******************************************************************//***************************************************************/
void DelayUs(unsigned char us)//delay us
{
 unsigned char uscnt;
 uscnt=us>>1;/* Crystal frequency in 12MHz*/
 while(--uscnt);
}
/******************************************************************/
void DelayMs(unsigned char ms)//delay Ms
{
 while(--ms)
   {
     DelayUs(250);
     DelayUs(250);
	 DelayUs(250);
	 DelayUs(250);
   }
}
void WriteCommand(unsigned char c)
{
 DelayMs(5);//short delay before operation
 E=0;
 RS=0;
 RW=0;
 _nop_();
 E=1;
 Data=c;
 E=0;
}
/****************************************************************/
void WriteData(unsigned char c)
{
 DelayMs(5);   //short delay before operation
 E=0;
 RS=1;
 RW=0;
 _nop_();
 E=1;
 Data=c;
 E=0;
 RS=0;
}
/*********************************************************************/
void ShowChar(unsigned char pos,unsigned char c)
{
 unsigned char p;
 if (pos>=0x10)
    p=pos+0xb0; //是第二行则命令代码高4位为0xc
 else 
    p=pos+0x80; //是第二行则命令代码高4位为0x8
 WriteCommand (p);//write command
 WriteData (c);   //write data
}
/*************************************************************************/
void ShowString (unsigned char line,char *ptr)
{
 unsigned char l,i;
 l=line<<4;
 for (i=0;i<16;i++)
  ShowChar (l++,*(ptr+i));//循环显示16个字符
}
/*********************************************************************/
void InitLcd()
{
 DelayMs(15);
 WriteCommand(0x38); //display mode
 WriteCommand(0x38); //display mode
 WriteCommand(0x38); //display mode
 WriteCommand(0x06); //显示光标移动位置
 WriteCommand(0x0c); //显示开及光标设置
 WriteCommand(0x01); //显示清屏

}


/////////////////////////////////////////////////////////////////
void main(void)

{
InitLcd();//
DelayMs(15);

sprintf(Test1," www.haotun.com ");//the first line
ShowString(0,Test1);

sprintf(TimeNum,"LCM1602 Test ok!");//the first line
ShowString(1,TimeNum);

while(1);

}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?