首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

1602/2002/2004液晶模块驱动3

1602/2002/2004液晶模块驱动3

//在指定的位置显示一个数字(0-9)函数(用来显示变量的值):

void LCD1602DisplayOneNumber( unsigned char y,unsigned char x,unsigned char v)

              //y-行数值0-3x-列数值0-19v-变量的一位数字0-9

{

      unsigned char lineaddr;

      switch(y)//根据行号选择行地址(对于1602,2002液晶只有两行)

      {

               case 0:lineaddr=0x80;break;//第一行首地址

               case 1:lineaddr=0xc0;break;//第二行首地址

               //case 2:lineaddr=0x94;break;//第三行首地址 (2004LCD才有)

               //case 3:lineaddr=0xd4;break;//第四行首地址 (2004LCD才有)

               default:;

      }

      Write1602Command(lineaddr+x);//写地址

      Write1602Data(0x30+v);//先将数字化成ASCII码,再写入

}   



//在指定的位置显示字符串函数:

void LCD1602DisplayString( unsigned char y,unsigned char x, unsigned char *pstr)

             //y-行数值0-3x-列数值0-19pstr-字符串指针

{      unsigned char lineaddr,n=0;

        switch(y)//根据行号选择行地址(对于1602,2002液晶只有两行)

       {

                case 0:lineaddr=0x80;break;//第一行首地址

                case 1:lineaddr=0xc0;break;//第二行首地址

               //case 2:lineaddr=0x94;break;//第三行首地址 (2004LCD才有)

               //case 3:lineaddr=0xd4;break;//第四行首地址 (2004LCD才有)

                default:;

        }

        Write1602Command(lineaddr+x);//写地址

        while(*pstr!='\0')//判断字符串是否写完

        {

                 Write1602Data(*pstr++);//写字符

                 n++;

                 if((n+x)==16)//如果第一行写满,写第二行(对于1602液晶)

                         Write1602Command(0xc0);//写第二行地址

        }

}

/1602初始化函数:

void Initialize1602()

{  

       Delayms(20);

       Write1602Command(0x38);//显示模式设置:5*7点阵,8位数据接口

       Write1602Command(0x08);//显示关

       Write1602Command(0x01);//清屏

       Write1602Command(0x06);//写一个字符地址指针加一、光标加一

       Write1602Command(0x0c);//显示开

}



//主函数:

int main(void)

{  

       Initialize1602();//初始化1602

       LCD1602DisplayString(0,2,"http://wushifuc51.21ic.org");

                                                             //在第一行第二个位置开始写字符串

       LCD1602DisplayOneNumber(1,15,8);//在第二行最后一个位置显示数字8

       while(1);

       return 0;

}
返回列表