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

📄 lcdmain.c

📁 msp430液晶显示
💻 C
字号:
#include "chip.h"
#include "sport0.h"
#include "st7565.h"
#include "lcdm.h"
#include "lcm16.h"
#include "key.h"
#include "pcf8574.h"
#include "lcm16.h"
#include "hzk16def.h"
#include "i2c.h"
#include "clock.h"

extern unsigned char I2CINT,rx0flg;
extern const unsigned int hzk16index[][2];
unsigned char userkey;
unsigned char brightness,screencnt;


void WaitKey(void)
{
  userkey=0;      //清除键值变量
  rx0flg=0;       //清除串口接收标志
  I2CINT=0;       //清除键盘标志
  while(!rx0flg && !I2CINT);  //等待串口和键盘输入
  if(I2CINT)                  //如果有键按下
  {
     __disable_interrupt();   //禁止全局中断
     I2CINT=0;                //清除键盘标志
     userkey=KeyProcess();    //读取键盘键值  
     __enable_interrupt();    //允许全局中断
     Tx0S((unsigned char *)"Key:"); //显示读取到的键值
     Tx0HexC(userkey);  
     Tx0S((unsigned char *)"\n");
     if(userkey==NO_KEY) userkey=0; //如果非法键值,则清除键盘变量
  }  
  else                        //如果接收到串口数据
  {
     userkey=RXBUF0;          //保存串口接收数据      
     rx0flg=0;                //清除串口接收标志
  }
}

void LCMStartScreen(void)     //显示液晶开机画面
{
 ClrScr();                                         //清除LCM显示屏幕(DDRAM)
 LCMDisplay(0,8,(unsigned char *)"EDB430B1 Rev.B"); //显示开机画面
 LCMDisplay(2,16,"开发实验系统");
 LCMDisplay(4,0,"液晶测试,版本1.0");
 LCMDisplay(6,12,"2007年3月18日");
 screencnt=0;                              //字符显示页面计数器
 brightness=BRIGHTNESS;                    //初始亮度值
}

void main(void)
{
unsigned char linecnt,charcnt;
 WDTCTL=WDTPW+WDTHOLD;
 InitClock();                           //初始化MSP430系统时钟,MCLK=SMCLK=8M
 InitKeyPort();                         //初始化键盘中断端口
 I2CWrByte(I2CWR_ADDR,KEY_INIT_NOLED); //初始化键盘扫描状态端口,关闭LED
 InitSport0();                          //初始化串口0
 __enable_interrupt();                  //允许全局中断
 InitLCDM();                            //初始化液晶模块(端口)
 I2CWrByte(I2CWR_ADDR,KEY_INIT_LED1);        //LED点亮
 LCMStartScreen();                      //显示LCM开机屏幕
 while(1)
 {
  Tx0S((unsigned char *)"128x64点阵图形液晶模块\n");
  Tx0S((unsigned char *)"选择以下测试项目\n");
  Tx0S((unsigned char *)"1.亮度增加\n");
  Tx0S((unsigned char *)"2.亮度减小\n");
  Tx0S((unsigned char *)"3.ASCII字符库显示\n");
  Tx0S((unsigned char *)"4.中文字符库显示\n");
  Tx0S((unsigned char *)"5.清除屏幕\n");
  Tx0S((unsigned char *)"6.满屏点阵显示\n");
  Tx0S((unsigned char *)"7.LCM复位\n");
  WaitKey();
  switch(userkey){
      case '1':
            if(brightness!=0x3f)
            {
             brightness++;                                        //亮度值增加
             Tx0S((unsigned char *)"Brightness:0x");
             Tx0HexC(brightness);                                 //显示亮度值(16进制)
             Tx0S((unsigned char *)"\n");
             WrLCMComd(0x81);                                     //设置LCM亮度命令
             WrLCMComd(brightness);                               //设置LCM亮度值
            }
            else Tx0S((unsigned char *)"Brightness is Max\n");
            break;
      case '2':
            if(brightness)
            {
             brightness--;                                        //亮度值减少
             Tx0S((unsigned char *)"Brightness:0x");
             Tx0HexC(brightness);                                 //显示亮度值(16进制)
             Tx0S((unsigned char *)"\n");
             WrLCMComd(0x81);                                     //设置LCM亮度命令
             WrLCMComd(brightness);                               //设置LCM亮度值
            }
            else Tx0S((unsigned char *)"Brightness is min\n");
          break;               
      case '3':
            for(screencnt=0;screencnt<4;)                         //显示4屏ASCII字符,每屏64个字符
            {
              Tx0S((unsigned char *)"按'Q'键或者键盘9退出,其他键继续......\n");
              if(userkey=='q' || userkey=='Q' || userkey=='9') break; //如果是'q'或者'Q'或者'9',那么退出             
              if(userkey)
              {
                for(linecnt=0;linecnt<4;linecnt++)                //显示4行
                {                
                 for(charcnt=0;charcnt<16;charcnt++)              //显示每行16个字符
                    LcdmDisplayChar16(linecnt<<1,charcnt<<3,(screencnt<<6)+(linecnt<<4)+charcnt);//显示一个ASCII字符
                }
              screencnt++;
              }  
              WaitKey();                                          //等待用户输入
              if(userkey=='Q' || userkey=='q' || userkey=='9') break;
             }
          break;
       case '4':
            screencnt=0;                                           //清除字符显示页面计数器
            do{  
              Tx0S((unsigned char *)"按'Q'键或者键盘9退出,其他键继续......\n");
              if(userkey)
              {
                ClrScr();                                            //清除屏幕
                for(linecnt=0;linecnt<4;linecnt++)                   //显示4行
                {                
                  for(charcnt=0;charcnt<8;charcnt++)                 //显示每行8个中文字符
                  {  
                    LcdmDisplayHZK16(linecnt<<1,charcnt<<4,hzk16index[screencnt][0]);//显示一个中文字符
                    screencnt++;
                    if(screencnt==HZK_SIZE_LEN) break;
                  }    
                }
              }  
              WaitKey();                                           //等待用户输入
            }while(screencnt<HZK_SIZE_LEN && userkey!='q' && userkey!='Q' && userkey!='9' );
          break;
       case '5':
          ClrScr();               //清除屏幕
          break;      
       case '6':
          WrLCMComd(SCR_DOT_ON);  //写全点阵命令
          WaitKey();              //等待用户输入
          WrLCMComd(SCR_DOT_OFF); //退出全点阵显示命令
          break;
       case '7':
          WrLCMComd(EVOL_MODE | 0x00); //LCD对比整命令
          WrLCMComd(BRIGHTNESS);       //缺省对比度值
          LCMStartScreen();       //显示开机画面,LCM复位
          break;
      default:
        break;
     }
   }                                     
}

⌨️ 快捷键说明

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