📄 display.c
字号:
//***************************************************************************/
#include <msp430x16x.h>
#include "asc_cosd.h"
#include "display.h"
//******************************************基本函数**************************/
void delay1(int n)
{
while(n--);
}
void Init(void)
{
WDTCTL = WDTPW + WDTHOLD;
P5DIR |=BIT7+BIT6+BIT5+BIT4+BIT3;
}
void LcdInit()
{
delay1(10);// 等待液晶进入工作状态
LCD_12864A_RES_L;
delay1(10);
LCD_12864A_RES_H; // 复位脚有个上升沿
delay1(5);
WriteControlData(0xa3);//LCD BIAS SET ( A2 1/8;A3 1/65DUTY)
WriteControlData(0xa0);//ADC select,NORMAL 0-->127
WriteControlData(0xaf);// DISPLAY ON/OFF
WriteControlData(0x2f);//power control(VB,VR,VF=1,1,1)
WriteControlData(0x23); // VOLT REGULATOR RADIO SET
WriteControlData(0x81);//ELECTRONIC VOLUME mode setting 100B 对比度命令
WriteControlData(0x28);//REFERENCE VOLT REG set
WriteControlData(0xc0);//SHL SELECT
WriteControlData(0xaf);//DISPLAY ON/OFF
WriteControlData(0x40);// DISPLAY START LINE SET
_NOP();
_NOP();
}
void WriteControlData(unsigned char com)
{
LCD_12864A_CS1_L;
LCD_12864A_A0_L;
ShiftData(com);
LCD_12864A_CS1_H;
}
void WriteDisplayData(unsigned char dat)
{
LCD_12864A_CS1_L;
LCD_12864A_A0_H;
ShiftData( dat );
LCD_12864A_CS1_H;
}
void ShiftData(unsigned char dat)
{
unsigned char s,temp;
int i;
LCD_12864A_SCL_L;
s = dat;
for( i = 0 ;i<8; i++ )
{
LCD_12864A_SCL_L;
_NOP();
_NOP();
temp=s & 0x80;
if(temp)
{LCD_12864A_SI_H;}
else {LCD_12864A_SI_L;}
LCD_12864A_SCL_H;
s=s<<1;
}
}
void Location(unsigned char x,unsigned char y)
{
WriteControlData(0xB0|y); //页地址设置 写命令
WriteControlData(0x10|(0x0F&(x>>4))); //列高4位 写命令
WriteControlData(0x0F&x); // 列低4位 写命令
}
//fb=1 时为反白显示
void WriteAbc(unsigned char x, unsigned char y ,unsigned char n, unsigned char fb)
{
uchar date1,i;
Location(x,y);
for (i=0;i<8;i++)
{
date1=table_aa[n*16+i];
if(fb)
{
date1=255-date1;
}
WriteDisplayData(date1);
delay1(1);
}
Location(x,y+1);
for(i=8;i<16;i++)
{
date1=table_aa[n*16+i];
if(fb)
{
date1=255-date1;
}
WriteDisplayData(date1);
delay1(1);
}
}
void WriteNumber(unsigned char x, unsigned char y ,unsigned char n, unsigned char fb)
{
uchar date1,i;
Location(x,y);
for (i=0;i<8;i++)
{
date1=success[n*8+i];
if(fb)
{
date1=255-date1;
}
WriteDisplayData(date1);
delay1(1);
}
Location(x,y+1);
for(i=8;i<8;i++)
{
date1=success[n*8+i];
if(fb)
{
date1=255-date1;
}
WriteDisplayData(date1);
delay1(1);
}
}
/*16*16汉字写入子程序fb=1 时为反白显示*/
void WriteChinese(unsigned char x, unsigned char y ,unsigned char n, unsigned char fb)
{
uchar date1,i;
Location(x,y);
for (i=0;i<=15;i++)
{
date1=table_ch[n*32+i];
if(fb)
{
date1=255-date1;
}
WriteDisplayData(date1);
delay1(1);
}
Location(x,y+1);
for(i=16;i<32;i++)
{
date1=table_ch[n*32+i];
if(fb)
{
date1=255-date1;
}
WriteDisplayData(date1);
delay1(1);
}
}
void WriteBmp(unsigned char x,unsigned char y,unsigned char fb ,unsigned char hang,unsigned char lie)
{
uchar i=y,j=x,dat;
for(i=y;i<y+hang/8;i++)
{
for(j=x;j<x+lie;j++)
{ Location(x+j,y+i);
dat=logo[i*lie+j];
if(fb) {dat=255-dat;}
WriteDisplayData(dat);
}
}
}
void ClearSree(unsigned char fb )
{
//uchar i,j,dat;
/*for(i=0;i<64/8;i++)
{
for(j=0;j<128;j++)
{ Location(j,i);
dat=0;
if(fb) {dat=255-dat;}
WriteDisplayData(dat);
}
}*/
uchar date1,i;
unsigned char x,y;
for(y=0;y<8;y=y+2)
{
for(x=0;x<128;x=x+16)
{
Location(x,y);
for (i=0;i<=15;i++)
{
date1=0;
if(fb)
{
date1=255-date1;
}
WriteDisplayData(date1);
delay1(1);
}
Location(x,y+1);
for(i=16;i<32;i++)
{
date1=0;
if(fb)
{
date1=255-date1;
}
WriteDisplayData(date1);
delay1(1);
}
}
}
}
/******************************************************************************/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -