⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 1602_液晶显示技术.c

📁 单片机开发板演示程序 1602晶体:12M MCU:STC89S51
💻 C
字号:
#include<reg52.h>
#include<stdio.h>
#include<intrins.h>

unsigned int hour,minute,second,count;

sbit RS = P0^7;      //Pin4,寄存器选择。等于1为数据;等于0为指令。
sbit RW = P0^6;      //Pin5,读写操作选择。等于1为读;等于0为写。
sbit E  = P0^5;      //Pin6,输入端,使能信号

#define Data  P2     //数据输出端口

char data FirstLine[]="                ";
char data SecondLine[]="                ";

/******************************************************************/
/*                            函数声明                            */
/******************************************************************/ 
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 Line,i;

    Line=line<<4;                       //???????????????????????
    for (i=0;i<16;i++)
        ShowChar (Line++,*(ptr+i));     //循环显示16个字符
}

/*********************************************************************/
/*                                                                   */
/*         RS  R/W  |  DB7  DB6  DB5  DB4__DB3  DB2  DB1  DB0        */
/*                                                                   */
/*********************************************************************/

void InitLcd()
{
    DelayMs(15);
    WriteCommand(0x38);         //功能设置,功能是设置工作方式工(初始化指令?	                            //00_001(DL)_NF**,D/L=1为8位数据接口?								//                N=1为两行显示,
								//                F=0为5X7点阵字符
	WriteCommand(0x38);         //为什么要写两次"WriteCommand(0x38); "?,如果只写一次会出现只有第一行显示且看不清
    WriteCommand(0x06);         //输入方式设置,功能是设置光标和画面移动方式
	                            //00_0000_01(I/D)s,I/D=1为数据读写AC自动增一?								//                  S=0为数据读写操作后画面不动								
    WriteCommand(0x0c);         //显示开关控制,功能是设置显示,光标及闪烁开或关
	                            //00_0000_1DCB,D为显示开关,为1表示开,
								//              C为光标开关,为0表示关,
      						    //              B为闪烁开关,为0表示关
    WriteCommand(0x01);         //显示清屏功能是清DDRAM和AC值,00_0000_0001

}

/******************************************************************/
/*                            主函数                              */
/******************************************************************/ 
void main(void)
{
    InitLcd();
    DelayMs(15);

    sprintf(FirstLine," Made  by  LZT  ");      //the first line," Made  by  LZT ""0123456789ABCDEF"
    ShowString(0,FirstLine);

    sprintf(SecondLine,"Xihua University");   //the second line,"Xihua University""GHIJKLMNOPQRSTUV"
    ShowString(1,SecondLine);

    while(1);

}

⌨️ 快捷键说明

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