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

📄 main.c

📁 MSP430控制128×64液晶程序
💻 C
📖 第 1 页 / 共 2 页
字号:
#include        <msp430x14x.h>
#include        <string.h>
#include        <stdio.h>
#include        <stdlib.h>


#define uint       unsigned int
#define uchar      unsigned char
#define BYTE       unsigned char
#define ulong      unsigned long int

#define bit0  (0x01<<0)
#define bit1  (0x01<<1)
#define bit2  (0x01<<2)
#define bit3  (0x01<<3)
#define bit4  (0x01<<4)
#define bit5  (0x01<<5)
#define bit6  (0x01<<6)
#define bit7  (0x01<<7)


uchar num[] = {
/*1    */
0x00,0x42,0x7F,0x40,0x00,0x00,

/*2    */
0x62,0x51,0x49,0x49,0x46,0x00,

/*3    */
0x21,0x41,0x49,0x4D,0x33,0x00,

/*4    */
0x18,0x14,0x12,0x7F,0x10,0x00,

/*5    */
0x27,0x45,0x45,0x45,0x39,0x00,

/*6    */
0x3C,0x4A,0x49,0x49,0x31,0x00,

/*7    */
0x01,0x71,0x09,0x05,0x03,0x00,

/*8    */
0x36,0x49,0x49,0x49,0x36,0x00,

/*9    */
0x46,0x49,0x49,0x29,0x1E,0x00,

/*0    */
0x3E,0x51,0x49,0x45,0x3E,0x00,

/*-号   */
0x00,0x08,0x08,0x08,0x08,0x00,
/*电量  */
0x38,0x38,0x38,0x38,0x38,0x38,
/*.   */
0x00,0x60,0x60,0x00,0x00,0x00,
/*:   */
0x00,0x36,0x36,0x00,0x00,0x00,
/*度  */
0x00,0x00,0x06,0x06,0x00,0x00,
/*分  */
0x00,0x00,0x00,0x06,0x00,0x00,
/*秒   */
0x00,0x06,0x00,0x06,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,


};

uchar  word[]={
  /*a    */
0x24,0x54,0x54,0x38,0x40,0x00,0x00,0x00,

/*h    */
0x7f,0x08,0x04,0x04,0x78,0x00,0x00,0x00,

/*g    */
0x98,0xA4,0xA4,0xA4,0x78,0x00,0x00,0x00,

/*i    */
0x00,0x00,0x79,0x00,0x00,0x00,0x00,0x00,

/*l    */
0x00,0x41,0x7F,0x40,0x00,0x00,0x00,0x00,

/*n    */
0x04,0x78,0x04,0x04,0x78,0x00,0x00,0x00,

/*O    */
0x3e,0x41,0x41,0x41,0x3e,0x00,0x00,0x00,

/*p    */
0xFC,0x24,0x24,0x24,0x18,0x00,0x00,0x00,

/*H    */
0x7f,0x08,0x08,0x08,0x7f,0x00,0x00,0x00,

/*D    */
0x7f,0x41,0x41,0x41,0x3e,0x00,0x00,0x00,

/*t    */
0x04,0x3F,0x44,0x44,0x24,0x00,0x00,0x00,

/*A    */
0x7C,0x12,0x11,0x12,0x7C,0x00,0x00,0x00,

/*B    */
0x7F,0x49,0x49,0x49,0x36,0x00,0x00,0x00,

/*L    */
0x7F,0x40,0x40,0x40,0x40,0x00,0x00,0x00,

/*N    */
0x7F,0x04,0x08,0x10,0x7F,0x00,0x00,0x00,

/*P    */
0x7F,0x09,0x09,0x09,0x06,0x00,0x00,0x00,

/*R    */
0x7F,0x09,0x19,0x29,0x46,0x00,0x00,0x00,

/*S    */
0x26,0x49,0x49,0x49,0x32,0x00,0x00,0x00,

/*T    */
0x01,0x01,0x7F,0x01,0x01,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
};



uchar results[8];
uchar number;
uchar scia_tx[128];
uchar scia_txlen=0;
uchar flag0=0;
uchar flag1=0;
uchar rx1_buf[64];
int ADC_Flag=0;
int rx1num=1;
uchar rx1temp=0;  
uchar rx1_cnt=0;  


uchar *p=&num[0];
uchar *m=&word[0];

/******************************************TIME B VAR*****************************************/
uchar timecnt=0;       //10ms记数器
uchar second=0;        //秒记数器
uchar second1=0;      //1秒记数器
uchar second6=0;       //6秒记数器
uchar second6_flg=0;   //6秒标志位
/************************************************com watchdog**************************/
uchar ComWatchDogFlag=0x00;    //串口狗时间的标志位
uchar ComWatchDogcnt=0;        //串口记数器
uchar ComWatchdogcnt1=0;       
uchar ComWatchdogcnt2=0;
uchar reset=0;                 //程序复位标志位

uchar timecnt1=0;

//#define Lcd_Bus     P4
#define CSA        bit6
#define CSB        bit7
#define RS         bit5
#define E          bit3
#define RW         bit4
#define Lcd_Rst    bit2

void Check_0180_State1();
void Check_0180_State2();
void Com1String();
void Clr_Screen();
//================================================================
//  KS0108??????
//================================================================
#define  Set_Disp_On 0x3F
#define  Set_Disp_Off 0x3E
#define  Set_Column  0x40
#define  Set_Page  0xB8
#define  Set_Start_Line 0xC0





//================================================================
//  ??
//================================================================
void Delay()
{
uchar i,j;
for(i=0;i<255;i++)
for(j=0;j<100;j++);
}



//================================================================
//  ???
//================================================================
void Long_Delay(int t)
{
int n=0xff;
 while(--t){
  while(--n);
  n=0xff;
 }
}


//================================================================
//  KS0108写指令
//================================================================
Write_0108_Reg1(uchar Reg_Code)
{
 Check_0180_State1();
 P2OUT&=~CSA;
 P4DIR=0xff;
 P2OUT&=~RS ;              //RS =0
 P2OUT&=~RW;              //RW=0
 P4OUT=Reg_Code;          //Lcd_Bus=Reg_Code;
 P2OUT|=E;                //E=1
  _NOP();
  _NOP();
 P2OUT&=~E;              //E=0
  _NOP();
  _NOP();
 P2OUT|=CSA;
}
Write_0108_Reg2(uchar Reg_Code)
{
 Check_0180_State2();
 P4DIR=0xff;
 P2OUT&=~CSB;
 P2OUT&=~RS;              //RS=0
 P2OUT&=~RW;              //RW=0
 P4OUT=Reg_Code;          //Lcd_Bus=Reg_Code;
 P2OUT|=E;                //E=1
   _NOP();
  _NOP();
 P2OUT&=~E;              //E=0
   _NOP();
  _NOP();
 P2OUT|=CSB;
}


//================================================================
//  KS0108写数据
//================================================================
Write_0108_Data1(uchar Disp_Data)
{
 Check_0180_State1();
 P2OUT&=~CSA;
 P4DIR=0xff;
 P2OUT|=RS ;              //RS =1
 P2OUT&=~RW;              //RW=0
 P4OUT=Disp_Data;          //Lcd_Bus=Reg_Code;
 P2OUT|=E;                //E=1
  _NOP();
  _NOP();
 P2OUT&=~E;              //E=0
  _NOP();
  _NOP();
 P2OUT|=CSA;
}
Write_0108_Data2(uchar Disp_Data)
{
 Check_0180_State2();
 P4DIR=0xff;
 P2OUT&=~CSB;
 P2OUT|=RS;          // RS=1
 P2OUT&=~RW;         // RW=0
 P4OUT=Disp_Data;    //Lcd_Bus=Disp_Data
 P2OUT|=E;          // E=1
 _NOP();
 _NOP();
 P2OUT&=~E;        // E=0
 _NOP();
 _NOP();
 P2OUT|=CSB;
}
//================================================================
//  读KS0108数据
//================================================================
void Read_0108_Data1()
{
  Check_0180_State1();
  uchar  Data; 
  P2OUT&=~CSA;
  P4DIR=0x00; 
  P2OUT|=RS;
  P2OUT|=RW;
    P2OUT|=E;
    Data=P4IN;
    _NOP();
    _NOP();
    _NOP();
    _NOP(); 
    P2OUT&=~E;
    Com1String(&Data);
    P2OUT|=CSA; 
}
void Read_0108_Data2()
{
 Check_0180_State2();
 uchar Data;
 P2OUT&=~CSB;
 P4DIR=0x00;
 P2OUT|=RS;          //RS=1
 P2OUT|=RW;         //RW=1
 P2OUT|=E;          //E=1;
 Data=P4IN;      //Disp_Data=Lcd_Bus
 _NOP();
 _NOP();
 _NOP();
 _NOP();
 P2OUT&=~E;        //E=0;
 P2OUT|=CSB;
 Com1String(&Data);
}

//================================================================
//  设置,X???????,Y???page???
//================================================================
Set_XY(uchar X_Column, uchar Y_Page)
{
  Write_0108_Reg1(Set_Page+Y_Page);
  Write_0108_Reg1(Set_Column+X_Column);
  Write_0108_Reg2(Set_Page+Y_Page);
  Write_0108_Reg2(Set_Column+X_Column);
  
}

//================================================================
//  KS0108初始化
//================================================================
void Init_0108()
{
 P2OUT&=~Lcd_Rst;           //Lcd_Rst=0
 Delay();
 P2OUT|=Lcd_Rst;            //Lcd_Rst=1
 P2OUT&=~RW;                //RW,E,RS=0
 P2OUT&=~RS;
 P2OUT&=~E; 
 P2OUT|=CSA;
 P2OUT|=CSB;
 Delay();
 Clr_Screen();
 Write_0108_Reg1(Set_Disp_On);
 Write_0108_Reg2(Set_Disp_On);
 Delay();
 Write_0108_Reg1(Set_Start_Line);
 Write_0108_Reg2(Set_Start_Line);
}


//================================================================
//  KS0108清屏
//================================================================
void Clr_Screen()
{ 
  uchar Page;
  for(uchar i=0;i<8;i++)
{  
   Page=Set_Page+i;
   Write_0108_Reg1(Page);//送入左半屏
   Write_0108_Reg1(Set_Column);//设置列地址
for(uchar j=0;j<64;j++)
  {
  Write_0108_Data1(0x00);
  }
} //左半屏清屏
for(uchar i=0;i<8;i++)
{
  Page=i+Set_Page;//设置页地址*/
  Write_0108_Reg2(Page);//送入右半屏*/
  Write_0108_Reg2(Set_Column);//设置列地址
for(uchar j=0;j<64;j++)
  {
  Write_0108_Data2(0x00);
  }
} //右半屏清屏

}


//================================================================
//  KS0108写数据
//================================================================
Word1(uchar i)     //写字母左半屏
{

  for(m=(word+i);m<(word+i+8);m++)
   {
     Write_0108_Data2(*m);
   }
}

Word2(uchar i)   //写字母右半屏
{

  for(m=(word+i);m<(word+i+8);m++)
   {
     Write_0108_Data1(*m);
   }
}

Num1(number)    //写数字左半屏
{

  for(p=(num+number);p<(num+number+6);p++)
   {
     Write_0108_Data2(*p);
   }
}
Num2(number)   //写数字右半屏
{

  for(p=(num+number);p<(num+number+6);p++)
   {
     Write_0108_Data1(*p);
   }
}
void Lcd_data()
{
   Set_XY(0,0);
   Word1(136);
   Word1(88);
   Word1(144);
   Word1(152);
   Word1(120);
   Word1(128);
   Word1(112);
   Word1(152);
   Word2(72);
   Word2(48);
   Word2(120);
   Word2(152);
   Set_XY(50,0);
   Num2(66);Num2(66);

   Set_XY(0,5);
   Word1(104);
   Word1(0);
   Word1(80);
   Num1(78);
   Set_XY(0,6);
   Word1(104);
   Word1(40);
   Word1(16);
   Num1(78);
   Set_XY(0,7);
   Word1(64);
   Word1(16);
   Word1(80);
   Num1(78);


//} 
/*for(uchar i=0;i<8;i++)
{  
   Page=Set_Page+i;
   Write_0108_Reg2(Page);
   Write_0108_Reg2(Set_Column);
for(uchar j=0;j<32;j++)
  {
  Write_0108_Data2(0x00);

⌨️ 快捷键说明

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