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

📄 ocmj12232c-1(并口).h

📁 msp430的中文输入程序
💻 H
字号:
#ifndef _OCMJ12232_H_
#define _OCMJ12232_H_

//引脚定义
//p2 ---- 并口数据通信
#define DB_DIR P2DIR
#define DB_OUT P2OUT
#define DB_IN  P2IN
#define DB_SEL P2SEL

//控制引脚 ---- P3
//E  ---- P3.0
//RW ---- P3.1
//RS ---- P3.2
// RW:H -- 读取  L -- 写
// RS:H -- 数据  L -- 命令
#define E_H  P3OUT |= 0X01
#define E_L  P3OUT &= ~0X01
#define RW_H P3OUT |= 0X02
#define RW_L P3OUT &= ~0X02
#define RS_H P3OUT |= 0X04
#define RS_L P3OUT &= ~0X04

#define COMMAND 0
#define DATA    1

void init_port(void);
unsigned char read_RAM(void);
unsigned char read_BF(void);
void check_BF(void);
void write_lcd(unsigned char data_com,unsigned char value);
void init_lcd (void);
void write_data(unsigned char *data);
void delay_xus(int us);
void delay_xms(int ms);
void clrram (void);
void go(unsigned char xxx, unsigned char yyy);

/****************** 引脚初始化 ******************/
void init_port(void)
{
  DB_OUT = 0X00;
  DB_DIR = 0X00;
  P3DIR  = 0X07;
  P3OUT  = 0X00;
}
/****************** 读取RAM数据 ******************/
//没有完成
unsigned char read_RAM(void)
{
  unsigned char ret = 0;
  _NOP();
  return ret;
}
/****************** 读取busy标志位 ******************/
//BF = H 忙    BF = L 空闲  (bit7)
//读取BF标志位,读取了两次,不知道对不对 
unsigned char read_BF(void)
{
  unsigned char ret;
  DB_DIR = 0X00;
  RS_L;
  RW_H;
  
  E_H;
  _NOP();
  _NOP();
  ret = DB_IN;
  E_L;
  _NOP();
  _NOP();
  _NOP();
  _NOP();
  
  E_H;
  _NOP();
  _NOP();
  ret = DB_IN;
  E_L;
  _NOP();
  _NOP();
  _NOP();
  _NOP();
  
  return ret;
}
/****************** 检查BF标志位,直到 BF = 0 ******************/
void check_BF(void)
{
  unsigned char temp;
  do
  {
    temp = read_BF();
  }while((temp & 0x80) == 0x80);
}
/****************** 写数据或命令 ******************/
void write_lcd(unsigned char data_com,unsigned char value)
{
  //check_BF();
  
  unsigned char temp;
  do
  {
    temp = read_BF();
  }while((temp & 0x80) == 0x80);
  
  DB_DIR = 0XFF;
  if(data_com == DATA)
  {
    RS_H;
    RW_L;
  }
  else if(data_com == COMMAND)
  {
    RS_L;
    RW_L;
  }
  else 
    return ;
  DB_OUT = value;
  E_H;
  _NOP();
  E_L;
  DB_DIR = 0X00;
  /*if((data_com == COMMAND) && (value == 0x01))
    delay_xms(10);
  else
    delay_xus(75);*/
}
/****************** 初始化******************/
void init_lcd (void)
{
  write_lcd (COMMAND,0x30);  /*30---基本指令动作*/   
  write_lcd (COMMAND,0x01);  /*清屏,地址指针指向00H*/
  write_lcd (COMMAND,0x06);  /*光标的移动方向*/
  write_lcd (COMMAND,0x0c);  /*开显示,关游标*/
}
/*------------------- 写数据 --------------------*/
void write_data(unsigned char *data)
{
  //写数据之前必须先指定AC值
  write_lcd(COMMAND,0x30);//基本指令集
  //write_lcd(COMMAND,0X80);//设定DDRAM AC值 = 0
  while(*data)
  {
    write_lcd(DATA,*data);
    data++;
  }
}
/*-------------- 清DDRAM ------------------*/
void clrram (void)
{
  write_lcd (COMMAND,0x30);//基本指令集动作
  write_lcd (COMMAND,0x01);//清除显示
}


/*-------------- 光标定位 ---------------*/
void go(unsigned char xxx, unsigned char yyy)
{ 
  write_lcd(COMMAND,0x30);
  if(yyy==0)  
    write_lcd(COMMAND,0x80+xxx);
  else if(yyy==1) 
    write_lcd(COMMAND,0x90+xxx);
}
/*------------------- 延 时 --------------------*/
void delay_xus (int us)   //delay time
{
  do
  {
    _NOP();
    _NOP();
    _NOP();
    _NOP();
    _NOP();
    _NOP();
  }while(us--);
}

void delay_xms(int ms)
{
  do 
  {
    delay_xus(1000);
  }while(ms--);
}

#endif  /*_OCMJ12232_H_*/

⌨️ 快捷键说明

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