单片机
返回首页

1604液晶屏输入输出C51源程序

2016-11-17 来源:eefocus

#include
#include 'INC\LCD1604.H'


sfr  LCD_INTER = 0x80;    //数据总线接口
 sbit LCDBUSY=LCD_INTER^7;  //标志位

sfr  LCD_CONTROL = 0xA0;   //数据总线接口
 sbit LCDRS=LCD_CONTROL^0;  //数据、指令选择
 sbit LCDRW=LCD_CONTROL^1;  //读写选择
 sbit LCDE =LCD_CONTROL^2;  //使能

 

/******************************自定义字符*******************************/
unsigned char code Symbol[40] = {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
         0x00,0x00,0x04,0x0E,0x1F,0x00,0x00,0x00, //UP 01H 
         0x00,0x00,0x1F,0x0E,0x04,0x00,0x00,0x00, //DOWN 02H
         0x00,0x02,0x06,0x0E,0x06,0x02,0x00,0x00, //LEFT 03H
         0x00,0x08,0x0C,0x0E,0x0C,0x08,0x00,0x00}; //RIGHT 04H          
/***********************************************************************/
/*名称: LCD_WriteCmd()
/*说明: 向LCD送入1字节指令数据
/*输入: cmd 要输入的指令数据 
/*输出: 无
/***********************************************************************/ 
void LCD_WriteCmd(unsigned char cmd)

 bit BF;
 do
 {
  LCDRS=0;
  LCDRW=1;
  LCD_INTER = 0xFF;
  LCDE=1;
  BF=LCDBUSY;
  LCDE=0;
 }
 while(BF==1);

 LCDE=0;
 LCDRS=0;
 LCDRW=0;
 LCD_INTER = cmd;
 LCDE=1; 
 LCDE=0;
 LCDRS=1;
 LCDRW=1;
 LCD_INTER = 0xFF;
}
/***********************************************************************/
/*名称: LCD_SendData()
/*说明: 向LCD送入1字节数据
/*输入: Word 要输入的数据 
/*输出: 无 
/***********************************************************************/
void LCD_SendData(unsigned char Word)
{   
 bit BF;
 do
 {
  LCDRS=0;
  LCDRW=1;
  LCD_INTER = 0xFF;
  LCDE=1;
  BF=LCDBUSY;
  LCDE=0;
 }
 while(BF==1);

 LCDE=0;
 LCDRS=1;
 LCDRW=0;
 LCD_INTER = Word;
 LCDE=1;   
 LCDE=0;
 LCDRS=1;
 LCDRW=1;
 LCD_INTER = 0xFF;
}

/**********************************************************************/
/*名称: LCD_Init()
/*说明: LCD初始化程序
/*输入: 无
/*输出: 无
/**********************************************************************/ 
void LCD_Init(void)
{
 LCD_WriteCmd(0x30);
 LCD_WriteCmd(0x30);
 LCD_WriteCmd(0x30);
 LCD_WriteCmd(SET_FUCTION);
 LCD_WriteCmd(CLEAR_WINDOW);
 LCD_WriteCmd(RESET_AC);
 LCD_WriteCmd(INPUT_MODE);
 LCD_WriteCmd(DISPLAY_CON);
 LCD_WriteCmd(CLEAR_WINDOW);
}

/**********************************************************************/
/*名称: LCD_WriteCGRam()
/*说明: 写入自定义字符
/*输入: 无
/*输出: 无
/**********************************************************************/
void LCD_WriteCGRam(void)
{
 unsigned int i;
 LCD_WriteCmd(0x40);
 for(i=0;i<40;i++)
 {
  LCD_SendData(Symbol[i]);
 }
 LCD_WriteCmd(CLEAR_WINDOW);
}
/**********************************************************************/
/*名称: LCD_ByteWrite()
/*说明: LCD单字符输出程序
/*输入: pos  要输出的位置
/*  byte 要输出的字符
/*输出: 无
/**********************************************************************/
void LCD_ByteWrite(unsigned char pos,unsigned char byte)
{
 LCD_WriteCmd(pos);
 LCD_SendData(byte); 
}

/**********************************************************************/
/*名称: LCD_StrNWrite()
/*说明: LCD指定长度字符串输出程序
/*输入: pos  要输出的位置
/*  *str  字符串指针
/*  length 字符串长度 
/*输出: 无
/**********************************************************************/
void LCD_StrNWrite(unsigned char pos,unsigned char *str,unsigned char length)
{
 unsigned char i;
 LCD_WriteCmd(pos);
 for(i=0;i { 
  LCD_SendData(*(str+i));
 }
}

/**********************************************************************/
/*名称: LCD_StrWrite()
/*说明: LCD字符串输出程序
/*输入: pos  要输出的位置
/*  *str  字符串指针 
/*输出: 无
/**********************************************************************/
void LCD_StrWrite(unsigned char pos,unsigned char *str)
{
 unsigned char i;
 LCD_WriteCmd(pos);
 for(i=0;i { 
  LCD_SendData(*(str+i));
 }
}     


进入单片机查看更多内容>>
相关视频
  • RISC-V嵌入式系统开发

  • SOC系统级芯片设计实验

  • 云龙51单片机实训视频教程(王云,字幕版)

  • 2022 Digi-Key KOL 系列: 你见过1GHz主频的单片机吗?Teensy 4.1开发板介绍

  • TI 新一代 C2000™ 微控制器:全方位助力伺服及马达驱动应用

  • MSP430电容触摸技术 - 防水Demo演示

精选电路图
  • 光控音效发生器电路

  • 非常简单的150W功放电路图

  • 一个简单的警笛电路图

  • 分享一个电网倾角计电路

  • 电谐波图形均衡器示意图

  • 一种构建12V和230V双直流电源的简单方法

    相关电子头条文章