📄 lcd_ch.c
字号:
//LCD型号:KM12232F(ST7920A),连接模式:串口模式,供电:3V.
//KM12232F是内带汉字库,只须提供汉字内码地址给LCD模块即可.
//MCU:TI MSP430F1121. SID-->P4.6,SCK-->P4.7
//C编译器:IAR Embedded Workbench IDE 3.2
//编写日期:2004.7.
//编写提供:DC Huang
# include <msp430x14x.h>
#define SID 0x40 //串行数据输入端
#define SCK 0x80 //同步时钟输入端
#define DDRAM_0 0x80 //显示回位
#define off_cursor 0x0c //关闭光标
#define on_cursor 0x0e //开光标
#define off_cursor_filsh 0x0e //光标关闪烁
#define on_cursor_filsh 0x0f //光标开闪烁
#define GM12232_MINADD_L1 0x80 //第一行第一位地址
#define GM12232_MAXADD_L1 0x87 //第一行最后地址
#define GM12232_MINADD_L2 0x90 //第二行第一位地址
#define GM12232_MAXADD_L2 0x97 //第二行最后地址
//**************************************************
void delay(void)
{ char i;
for (i = 0;i != 0xff;i++);
}
//**************************************************
void sendBYTE(char dat) //串行传送一字节数据
{
char i;
P4DIR|=SID; //设P1.3 SID为输出
for (i=0;i<8;i++)
{
P4OUT&=~SCK; //SCK=0
if((dat & 0x80)!=0)
P4OUT|=SID; //SID=1
else
P4OUT&=~SID; //SID=0
P4OUT|=SCK; //SCK=1;
dat = dat<<1;
}
}
//****************************************************
//如果需要改变半字地址,也是用此程序.只需输入地址就可以.
void sendCMD(char dat) //写控制指令
{
sendBYTE(0xf8);
sendBYTE(dat & 0xf0);
sendBYTE((dat<<4)&0xf0);
}
//****************************************************
void sendDAT(char dat)//写显示数据;也可以写一个单字节字符
{
sendBYTE(0xfa);
sendBYTE(dat & 0xf0);
sendBYTE((dat<<4)&0xf0);
}
//****************************************************
void display(char x_add,char dat,char dat1)
//写汉字到LCD屏指定位置
//x_add显示RAM地址
//dat/dat1显示汉字编码
{
sendCMD(x_add);
sendDAT(dat);
sendDAT(dat1);
}
//*****************************************************
void initlcm(void)//初始化LCM
{
delay();
P4DIR|=SCK; //SCK设为输出
sendCMD(0x30);//功能设置:一次送8位数据,基本指令集
sendCMD(0x04);//点设定 :显示字符/ 光标从左到右移位,DDRAM地址加一
sendCMD(0x0f);//显示设定:开显示 ,显示光标,当前显示位反白闪动
sendCMD(0x0f);//显示设定:开显示,显示光 标,当前显示位反白 闪动
sendCMD(0x01);//清DDRAM
sendCMD(0x02);//*DDRAM 地址归位
}
//****************************************************
//发送半角数字和字母字符串
//*p为字符串指针
//x_add 所要显示的地址
void char_string (unsigned char *p, unsigned char x_add)
{
unsigned char n;
if((x_add >= GM12232_MINADD_L1)&&(x_add <GM12232_MAXADD_L1))
{ sendCMD(x_add);
for (n=0; p[n]!='\0'; n++)
{ sendDAT(p[n]); }
}
else if ((x_add >= GM12232_MINADD_L2)&&(x_add <GM12232_MAXADD_L2))
{ sendCMD(x_add);
for (n=0; p[n]!='\0'; n++)
{ sendDAT(p[n]); }
}
else
return ;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -