找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1244|回复: 0
打印 上一主题 下一主题
收起左侧

LCD液晶发送数据 飞思卡尔单片机

[复制链接]
跳转到指定楼层
楼主
ID:386134 发表于 2018-8-14 12:11 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
#include "derivative.h"      /* derivative-specific definitions */
#include "LCD.h"      

unsigned char adress_table[]=                 //定义液晶点阵的坐标
{
0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,      //第一行汉字位置
0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97,      //第二行汉字位置
0x88,0x89,0x8A,0x8B,0x8C,0x8D,0x8E,0x8F,      //第三行汉字位置
0x98,0x99,0x9A,0x9B,0x9C,0x9D,0x9E,0x9F       //第四行汉字位置
};


/*************************************************************/
/*                      初始化液晶接口                       */
/*************************************************************/
void INIT_PORT(void)
{
PSB_dir = 1;
RS_dir = 1;
RW_dir = 1;
EN_dir = 1;
DATA_dir = 0xff;
DATA = 0;
PSB = 1;
EN = 0;
RW = 0;
RS = 0;
}

/*************************************************************/
/*                     向液晶发送数据                        */
/*************************************************************/
void write_Data(unsigned char b)
{
     RS = 1;
     RW = 0;
     EN = 1;
     somenop();
     DATA = b;
     somenop();
     EN = 0;
}

/*************************************************************/
/*                      向液晶发送命令                       */
/*************************************************************/
void write_command(unsigned char b)
{
     RS = 0;
     RW = 0;
     EN = 1;
     somenop();
     DATA = b;
     somenop();
     EN = 0;
}

/*************************************************************/
/*                         延时函数1                         */
/*************************************************************/
void delay20us(unsigned int n)
{
    unsigned int i;
    for(i=0;i<n;i++)
    {
        TFLG1_C0F = 1;              //清除标志位
        TC0 = TCNT + 5;             //设置输出比较时间为20us
        while(TFLG1_C0F == 0);      //等待,直到发生输出比较事件
    }
}

/*************************************************************/
/*                         延时函数2                         */
/*************************************************************/
void delay1ms(unsigned int n)
{
    unsigned int i;
    for(i=0;i<n;i++)
    {
        TFLG1_C0F = 1;              //清除标志位
        TC0 = TCNT + 250;             //设置输出比较时间为1ms
        while(TFLG1_C0F == 0);      //等待,直到发生输出比较事件
    }
}

/***************************************************************************/
/*                            清屏子程序                                   */
/***************************************************************************/
void lcd_clear(void)
{
    write_command(0x30);//0011,0000 功能设置,一次送8位数据,基本指令集
    delay20us(4);       //延时80us
    write_command(0x03);//AC归0,不改变DDRAM内容
    delay1ms(5);        //延时5ms
    write_command(0x01);//0000,0001 清DDRAM
    delay1ms(5);        //延时5ms
    write_command(0x06);//写入时,游标右移动
    delay20us(4);       //延时80us
    write_command(0x0C);//0000,1100  整体显示,游标off,游标位置off
    delay20us(4);       //延时80us
}

/***************************************************************************/
/*                           向LCD发送字符串                               */
/***************************************************************************/
void lcd_string(unsigned char row,unsigned char col,char *data1)   //row为写入数据所在的行数,col为写入数据所在的列数,*data1为写入的数据
{
  for(;row<4&&(*data1)!=0;row++)
  {
      for(;col<8&&(*data1)!=0;col++)
      {
          write_command(adress_table[row*8+col]);
          delay20us(4);       //延时80us

          write_Data(*data1++);
          delay20us(4);       //延时80us
          write_Data(*data1++);
          delay20us(4);       //延时80us
      }
      col=0;
  }
}


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表