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

📄 main.c

📁 用MSP430F149驱动 HS240128-1显示器,带自扫描电路
💻 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 + -