📄 main.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 + -