LongQiu S.&T.(龙丘科技) https://bbs.21ic.com/?477823 [收藏] [复制] [RSS] 作为一个热爱技术的工程师,我们都渴望从别人那里学习经验,同时又不想把自己的成果无偿的送给别人,这不是很矛盾的吗?那么,就把你认为“没有价值的”部分贡献出来如何?相信每一个有收获的人都会打心底感谢你的!不要吝啬,贡献点吧!

日志

龙丘智能奉献LCD1602液晶MC9S12XS128代码一份,接口说明详细

已有 2051 次阅读2010-12-8 13:18 |个人分类:单片机|系统分类:单片机| MC9S12XS128, , 龙丘智能科技, , 智能车




Code Warrior 5.0
Target : MC9S12XS128
Crystal: 16.000Mhz
busclock: 8.000MHz
pllclock:16.000MHz
============================================
液晶管脚接线定义
PIN1 GND
PIN2 5V
PIN3 10K电阻接地
PIN4 LCD1602_RS   PORTB_PB0 //Data Command Pin  1 data  0 command
PIN5 LCD1602_RW   PORTB_PB1 //Read Write Pin    1 read   0 write
PIN6 LCD1602_EN   PORTB_PB2 //LCD Enable Signal
PIN7-14 LCDIO     PORTA
------------------------------------------------------
主题函数如下图,完整工程参考附件: LQ_XS_LCD1602.rar (60.72 KB)

#include "derivative.h"
#include "LQ1602.h"
void LcdInit(){
  DDRA = 0xff;
  DDRB = 0xff;
  LCDIO_DIR = LCDIO_DIR_OUT;
LcdDelay();
LcdCommand(CLR,0);          //clear screen
LcdCommand(DATA_MODE,1);    //set 8 bit data transmission mode
LcdCommand(INPUTMODE_CUR_R | INPUTMODE_ALL_D, 1);   // cursor right, disable moving
LcdCommand(SCREEN_OPEN | SCREEN_OPEN_CUR | SCREEN_OPEN_TWI, 1); //open display (enable lcd display)
LcdCommand(LINE1_HEAD,1);   //set lcd first display address
LcdCommand(CLR,1);          //clear screen
}
////////////////////////////////////////////////////////////////////
// write command
//
void LcdCommand(byte command,byte BusyC){
if (BusyC) ReadStatus(); //Test it busy or not
LCDIO=command;
LCD1602_RS=0;   
LCD1602_RW=0;
LCD1602_EN=0;
LCD1602_EN=0;
LCD1602_EN=1;
}
byte ReadStatus(void)
{
  byte cRtn;
LCDIO_DIR = LCDIO_DIR_IN;
LCD1602_RS = 0;
LCD1602_RW = 1;
LCD1602_EN = 0;
LCD1602_EN = 0;
LCD1602_EN = 1;
while (LCDIO & BUSY); //Test Busy State
cRtn = LCDIO_DIR;     // if Not save the port value, it should be change
LCDIO_DIR = LCDIO_DIR_OUT;
return(cRtn);
}
void LcdDelay(void)
{
  word i, j;
  for (i = 0; i < 300; i++)
    for(j = 0; j < 3000; j++);
}
void LcdClear(void)
{
  LcdCommand(CLR,1);          //clear screen
}
////////////////////////////////////////////////////////////////////
// write data
//
void LcdData(byte dat,byte BusyC)
{
if (BusyC) ReadStatus(); //Test it busy or not
LCDIO=dat;
LCD1602_RS=1;
LCD1602_RW=0;
LCD1602_EN=0;
LCD1602_EN=0;
LCD1602_EN=1;
}
////////////////////////////////////////////////////////////////////
// write lcd a character
//
void LcdWriteChar( byte x,byte y,byte dat){
  LcdSetXY(x, y);
LcdData(dat,1);
}
////////////////////////////////////////////////////////////////////
// set display address
//
void LcdSetXY( byte x, byte y ){
byte address;
if (y == LINE1)
    address = LINE1_HEAD + x;
else
    address = LINE2_HEAD + x;
LcdCommand(address,1);
}
////////////////////////////////////////////////////////////////////
// write lcd string
//
void LcdWriteStr(byte X,byte Y,char *s)
{
    LcdSetXY( X, Y ); //set address
    while (*s)  // write character
    {
      LcdData(*s, 1);   
      s++;
    }
}

路过

鸡蛋

鲜花

握手

雷人

评论 (0 个评论)