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

📄 main.c

📁 MSP430F1611 的OCM12864-9的驱动程序
💻 C
字号:
#include <msp430x16x.h>

#define uchar unsigned char
#define uint unsigned int

#define LCD_E_1   (P3OUT |=  BIT2)
#define LCD_E_0   (P3OUT &=~ BIT2)


#define LCD_RS_1   (P3OUT |=  BIT0)
#define LCD_RS_0   (P3OUT &=~ BIT0)

#define LCD_WR_1   (P3OUT |=  BIT1)
#define LCD_WR_0   (P3OUT &=~ BIT1)

#define LCD_RST_1  (P3OUT |=  BIT5)
#define LCD_RST_0  (P3OUT &=~ BIT5)

#define LCD_CS1_1 (P3OUT |= BIT3)
#define LCD_CS1_0 (P3OUT &= ~BIT3)

uchar a[]={123,45,34,64,35,148};
unsigned char a1[32]={0x20,0x20,0x22,0x22,0xFE,0x21,0x21,0x20,0x20,0xFF,0x20,0x22,
                      0xAC,0x20,0x20,0x00,0x04,0x04,0x42,0x82,0x7F,0x01,0x01,0x10,
                      0x10,0x08,0x07,0x1A,0x21,0x40,0xF0,0x00};
                        //汉字 “我” 的点阵数据 ,使用 纵向取模 字节倒序
void delay(uint i)
{
  uint j;
  for (j = 0;j <i;j++) ;

}

void check_busy(void)
{
  uchar read_data=0xff;
P3DIR=0xFF;
P3SEL=0x00;
P2DIR=0x00;
P2SEL=0x00;

LCD_RS_0;
LCD_WR_1; //读命令
LCD_CS1_0; //片使能
while(read_data&BIT7)
{
LCD_E_1;
delay(5);
read_data=P2IN;
LCD_E_0;
}
LCD_E_0;
LCD_CS1_1; //片禁能
}


void send_cmd(uchar cmd)
{
check_busy();
P3DIR=0xFF;
P3SEL=0x00;
P2DIR=0xFF;
P2SEL=0x00;
LCD_RS_0;
LCD_WR_0; //写命令
LCD_CS1_0; //片使能
P2OUT=cmd;
LCD_E_1;
delay(5);
LCD_E_0;
delay(5);
LCD_CS1_1; //片禁能
}


void send_dat(uchar dat)
{
check_busy();
P3DIR=0xFF;
P3SEL=0x00;
P2DIR=0xFF;
P2SEL=0x00;
LCD_RS_1;
LCD_WR_0; //写数据
LCD_CS1_0; //片使能
P2OUT=dat;
LCD_E_1;
delay(5);
LCD_E_0;
delay(5);
LCD_CS1_1; //片禁能
}




void lcd_initial(void)
{
LCD_RST_1;
delay(5000);
send_cmd(0xE2);//Internal reset
send_cmd(0xA3);//0xA3 Sets the LCD drive voltage bias ratio 1/7 bias (0xA2 1/9 bias)
send_cmd(0xA0);//0xA0 Sets the display RAM address SEG output correspondence normal(0xA1 reverse)
send_cmd(0xC8);//0xC8 Select COM output scan direction reverse direction(0xC0 normal direction)
send_cmd(0x24);//调节Vo电压的内部电阻比值Rb/Ra (0x2.)(.<=7)
send_cmd(0x81);//Set the Vo output voltage调节液晶亮度,与下面命令一起使用
send_cmd(0x14);//输入0x81后 输入electronic volume register值(<64)
send_cmd(0x2C);//功率控制 (0x28|.)
               //BIT2 Booster circuit (1 ON 0 OFF)
               //BIT1 Voltage regulator circuit (1 ON 0 OFF)
               //BIT0 Voltage follower circuit (1 ON 0 OFF)
send_cmd(0x2E);
send_cmd(0x2F);
send_cmd(0x40);//设置显存 行起始位置(0x40|.)(.<=64)
send_cmd(0xB0);//设置显存 页面地址(0xB.)
send_cmd(0x10);//设置显存高4位 列地址(0x1.)
send_cmd(0x00);//设置显存低4位 列地址 (0x0.)
send_cmd(0xAF);//LCD display (AF)ON  (AE)OFF
}




/*****************清屏***********************/
/*
void Clear_LCD(void)

{
Write_Com(0x34);
Write_Com(0x30);
Write_Com(0x01);
delay(200);
}

*/
void clearLCD(void)
{
 uchar page,seg;

 for(page=0xb0;page<0xb8;page++)
 {
  send_cmd(page);
  send_cmd(0x10);                            /*列地址高位,D4位为1表示高位地址*/
  send_cmd(0x00);                            /*列地址低位,D4位为0表示低位地址*/
  for(seg=0;seg<128;seg++)
  {
   send_dat(0xa5);
  }
 }
}

void disphz(unsigned char pages,unsigned char line,unsigned char * zfdz)
{   //  pages页参数可取(0-7),line 列参数可取(0-111),zfdz 点阵指针
 unsigned char page,seg,zi,j;
 uchar ix=0;

 for(page=0;page<2;page++)
 {
  send_cmd(page+0xb0+pages);
  j = line & 0xf0;
  j = j/16;
 send_cmd(0x10|j);                            /*列地址高位,D4位为1表示高位地址*/
 send_cmd(0x0f&line);                             /*列地址低位,D4位为0表示低位地址*/

  zi=0;
  for(seg=0;seg<16;seg++)
  {
   if(ix)
   zi=16;
   send_dat(zfdz[seg+zi]);

  }
  ix=~ix;
 }
}

void main(void)

{
  int i;
WDTCTL = WDTPW + WDTHOLD;// Stop WDT
//DCOCTL=0x63;
//BCSCTL1=0x81;
//delay(1000);

lcd_initial();
clearLCD();
/*
Write_Com(0x4A);
  E_0;
  WR_1;
  RS_0;
  RET_1;
*/
disphz(3,80,a1);
//Clear_LCD();
/*send_cmd(0x42);//设置显存 行起始位置(0x40|.)(.<=64)
send_cmd(0xB2);
for (i=0;i<6;i++)
{
  send_dat(0xFE);
  //delay(40);
 }
*/
 /*while(1)
   {
    P2OUT=0xAA;
    P2OUT=0x55;
   }
 */

}

⌨️ 快捷键说明

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