📄 lcdmain.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 + -