📄 main.c
字号:
#include "msp430x14x.h"
#include "lcd.h"
#define Graphic 1
#define TXT 0
#define Lcmlengthchar 30 //LcmLengthDots 240
#define LcmWidthDots 128
void LcmInit(void)
{
LcmWriteCommandWith2Par(0x00,0x00,0x40); //设置文本显示区首地址
LcmWriteCommandWith2Par(Lcmlengthchar,0x00,0x41); //设置文本显示区宽度
LcmWriteCommandWith2Par(0x00,0x08,0x42); //设置图形显示区首地址0x0800
LcmWriteCommandWith2Par(Lcmlengthchar,0x00,0x43); //设置图形显示区宽度
LcmWriteCommand(0xA7); //设置光标形状 8x8方块
LcmWriteCommand(0x81); //显示方式设置 文本xor图形(异或)
LcmWriteCommand(0x9c); //显示开关设置 文本开,图形开,光标闪烁关
}
//延时函数
void Delay(uint MS)
{
uchar us,usn;
while(MS!=0) //12M Crystal
{
usn = 2;
while(usn!=0)
{
us=0xf2;
while (us!=0){us--;};
usn--;
}
MS--;
}
}
//清显示存储器函数
void LcmClear( uchar FillByte )
{
uint i = 8192; //此处仅清8K RAM,如果您32K RAM都使用,请修改i=32768(后面也要改)
if(FillByte) //注意如果填充ff时,如果RAM仅使用了8K,那么8192次会写入到文本区
{ //会形成乱码.(24064出厂时候默认将R7断开,即默认使用8KRAM)
i -= 2*1024;//所以如果填入ff时候要扣除2K的文本区
LcmWriteCommandWith2Par(0x00,0x08,0x24); //填充0xff时候要在图形区
}
else
LcmWriteCommandWith2Par(0x00,0x00,0x24);
LcmWriteCommand(0xB0); //进入自动写
while(i--)
{
CheckAutoWrite();
LcmWriteData( FillByte );
}
LcmWriteCommand(0xB2); //退出自动写
}
//设定显示地址函数
void LocateXY(uchar x,uchar y,uchar mode)
{
uint temp;
temp= Lcmlengthchar*y + x;
if(mode) //mode=1为Graphic
{ //如果图形模式要加上图形区首地址0x0800
temp+=0x0800;
}
LcmWriteCommandWith2Par(temp&0xff,temp/256,0x24);
}
//显示一个ASCII码函数
void PutChar(uchar x,uchar y,uchar CharByte)
{
LocateXY(x,y,TXT);
LcmWriteCommandWith1Par(CharByte,0xC4);
}
//显示一个字符串函数
void PutString(uchar x,uchar y,uchar *str)
{
while( *str != 0)
{
if(x> 29) //自动换行
{
x=0;
y++;
}
PutChar(x,y,*str);
++x;
++str;
}
}
//显示一副图片函数
void DisplayOneBmp(uchar *puts)
{
uchar i,j;
uint X=0;
LocateXY(0,0,Graphic);
LcmWriteCommand(0xB0); //进入自动写
for(i=0;i<LcmWidthDots;i++)
{
for(j=0;j<Lcmlengthchar;j++)
{
CheckAutoWrite();
LcmWriteData(puts[X]);
X++;
}
}
LcmWriteCommand(0xB2); //退出自动写
}
//反显一副图片函数
void ReverseOneBmp( void )
{ //利用数据一次读写操作
uchar i,j,X; //只能对一段RAM取反
LocateXY(0,0,Graphic);
for(i=0;i<LcmWidthDots;i++)
{
for(j=0;j<Lcmlengthchar;j++)
{
LcmWriteCommand(0xC5); //读数据,地址不变
CheckRWCD();
X = LcmReadData();
X = ~X;
LcmWriteCommandWith1Par(X,0xC0);
}
}
}
//当前坐标移动到下一个点
void lcmcursornextbyte(uchar x,uchar y,uchar *str)
{ x+=1;
if(x>Lcmlengthchar)
{ x=0;
y++;
if(y>LcmWidthDots)
y=0;
}
}
//点 X为点数
void pointxy(uchar X,uchar y,uchar bitdata)
{ uchar x;
x=X>>3;
LocateXY(x,y,Graphic);
if(bitdata==0)
bitdata=0xf0+(0x07-(X&0x07));
else
bitdata=0xf8+(0x07-(X&0x07));
LcmWriteCommand(bitdata);
}
//水平线
void linex(uchar x0,uchar x1,uchar y1,uchar bitdata)
{
uchar dx;
if(x0>x1){dx=x1;x1=x0;x0=dx;}
uchar i,j;
i=x0>>3;
j=x1>>3;
LocateXY(i,y1,Graphic);
LcmWriteCommand(0xB0); //进入自动写
for(;i<j;i++)
{
CheckAutoWrite();
LcmWriteData( 0xff );
}
dx=0x08-(x1&0x07);
LcmWriteData( 0xff<<dx );
LcmWriteCommand(0xB2);
}
//垂直线
void liney(uchar x0,uchar y0,uchar y1,uchar bitdata)
{
uchar dy;
if(y0>y1){dy=y1;y1=y0;y0=dy;}
for(dy=y0;dy<=y1;dy++)
{
pointxy(x0,dy,bitdata);
}
}
//线
//矩形
void rect(uchar x0,uchar y0,uchar x1,uchar y1,uchar bitdata)
{
linex(x0,x1,y0,bitdata);
linex(x0,x1,y1,bitdata);
liney(x0,y0,y1,bitdata);
liney(x1,y0,y1,bitdata);
}
//主函数
void int_sys()
{BCSCTL1&=~XT2OFF;
do
{
IFG1&=~OFIFG;
for(char i=0;i<80;i++);
}while((IFG1&OFIFG)!=0);
BCSCTL2|=(SELM_2+SELS);
}
uchar ch[512];
uchar str1[12]={0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0};
int main(void)
{
WDTCTL = WDTPW + WDTHOLD;
int_sys();
uchar x,y,k;
uint h;
P4DIR=0XFF;
P3DIR=0XFF;
P4OUT=0XFF;
P3OUT=0X00;
// Delay(6000);
//for(h=0;h<512;h++)
// {
// ch[h]=h;
//}
//FS =0;
//Delay(6000);
LcmInit();
// Delay(50);
LcmClear(0);
// pointxy(1,50,1);
// linex(9,50,80,1);
// linex(9,11,81,1);
// linex(12,100,100,1);
// liney(12,10,100,1);
//rect(10,10,100,100,1);
while(1)
{
LcmClear(0);
for(x=0;x<230;x++)
{ while(ch[x]>127)ch[x]-=127;
y=127-ch[x];
liney(x,y,127,1);
}
for(y=0;y<4;y++) //显示一屏字符串
PutString(y,y,str1);
Delay(5500);
//DisplayOneBmp(bmp1); //显示一副图片
ReverseOneBmp(); //反显当前图片
Delay(5500);
LcmClear(0);
k=512-x;
for(x=0;x<k;x++)
{ uchar o;
o=x+230;
while(ch[o]>127)ch[o]-=127;
y=127-ch[o++];2
liney(x,y,127,1);
}
for(y=0;y<4;y++) //显示一屏字符串
PutString(y,y,str1);
Delay(5500);
//DisplayOneBmp(bmp1); //显示一副图片
//ReverseOneBmp(); //反显当前图片
Delay(5500);
LcmClear(0);
//LcmClear(8); //清屏,此处不清屏可观察文本xor图形的显示效果
Delay(8500);
/*LcmClear(8);
Delay(5500);
LcmClear(5);
Delay(5500);
LcmClear(0x58);
Delay(5500);
LcmClear(0x98);
Delay(5500);
LcmClear(0x25);//PutString(0,i,str);
//LcmClear(0);
//LcmClear(0xff); //全黑检测
Delay(5500);*/
}
}
/*
void linexy1(uchar x0,uchar y0,uchar x1,uchar y1,uchar bitdata)
{
uchar dy,dx;
dx=(x1>x0)?(x1-x0):(x0-x1);
dy=(y1>y0)?(y1-y0):(y0-y1);
uchar i;
uchar k;
if(dy>dx)
{ if(y1>y0)
for(i=y0;i<=y1;i++)
{ if(x1>x0)
{ k=x1-x0;
k*=(i-y0);
k/=y1-y0;
pointxy(x0+k,i,bitdata);
}
else //x1<x0
{ k=x0-x1;
k*=(i-y0);
k/=y1-y0;
pointxy(x0-k,i,bitdata);
}
}
else //y1<y0
for(i=y0;i>=y1;i--)
{ if(x1>x0)
{ k=x1-x0;
k*=(y0-i);
k/=y0-y1;
pointxy(x0+k,i,bitdata);
}
else //x1<x0
{ k=x0-x1;
k*=(y0-i);
k/=y0-y1;
pointxy(x0-k,i,bitdata);
}
}
}
else //abs(y1-y0)<abs(x1-x0)
{ if(x1>x0)
for(i=x0;i<=x1;i++)
{ if(y1==y0)
pointxy(i,y0,bitdata);
else if(y1>y0)
{ k=y1-y0;
k*=(i-x0);
k/=x1-x0;
pointxy(i,y0+k,bitdata);
}
else //y1<y0
{ k=y0-y1;
k*=(i-x0);
k/=x1-x0;
pointxy(i,y0-k,bitdata);
}
}
else
for(i=x0;i>=x1;i--)
{ if(y1==y0)
pointxy(i,y0,bitdata);
else if(y1>y0)
{ k=y1-y0;
k*=(x0-i);
k/=x0-x1;
pointxy(i,y0+k,bitdata);
}
else //y1<y0
{ k=y0-y1;
k*=(x0-i);
k/=x0-x1;
pointxy(i,y0-k,bitdata);
}
}
}
}
void foundcgram(uchar *ch)
{ char i;
LcmWriteCommandWith2Par(0x03,0x00,0x22);
LcmWriteCommandWith2Par(0x1c,0x00,0x24);
LcmWriteCommand(0xB0); //进入自动写
for(i=0;i<192;i++)
{
CheckAutoWrite();
LcmWriteData( ch[i] );
}
LcmWriteCommand(0xB2); //退出自动写
}
uchar chinachar[]={
//频 CC6B5 80
0x08,0x00,0x08,0xFE,0x4E,0x20,0x48,0x40,
0x48,0xFC,0xFE,0x84,0x00,0xA4,0x08,0xA4,
0x4A,0xA4,0x4A,0xA4,0x84,0xA4,0x08,0x50,
0x10,0x48,0x20,0x86,0xC3,0x02,0x00,0x00,
//率 CC2CA 84
0x02,0x00,0x01,0x00,0x7F,0xFE,0x41,0x00,
0x22,0x28,0x17,0xD0,0x04,0x80,0x11,0x10,
0x22,0x48,0x47,0xC4,0x01,0x20,0xFF,0xFE,
0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,
//功 CB9A6 88
0x00,0x20,0x00,0x20,0x7F,0x20,0x08,0x20,
0x0B,0xFC,0x08,0x24,0x08,0x24,0x08,0x44,
0x09,0x44,0x0E,0x44,0xF0,0x84,0x40,0x84,
0x01,0x04,0x02,0x78,0x04,0x10,0x00,0x00,
//总 CD7DC 8c
0x08,0x20,0x04,0x20,0x04,0x40,0x1F,0xF0,
0x10,0x10,0x10,0x10,0x10,0x10,0x1F,0xF0,
0x00,0x00,0x01,0x00,0x08,0x88,0x28,0x84,
0x28,0x16,0x68,0x12,0x07,0xF0,0x00,0x00,
//周 CD6DC 90
0x00,0x00,0x1F,0xFC,0x10,0x84,0x13,0xE4,
0x10,0x84,0x10,0x84,0x17,0xF4,0x10,0x04,
0x13,0xE4,0x12,0x24,0x12,0x24,0x13,0xE4,
0x22,0x24,0x20,0x04,0x40,0x14,0x80,0x08,
//期 CC6DA 94
0x22,0x00,0x22,0x7C,0x7F,0x44,0x22,0x44,
0x3E,0x44,0x22,0x7C,0x3E,0x44,0x22,0x44,
0x22,0x44,0xFF,0x7C,0x00,0x44,0x24,0x84,
0x22,0x84,0x43,0x14,0x81,0x08,0x00,0x00
};
*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -