📄 128641.c
字号:
#include<absacc.h>
//****************************************************************************************//
//名称:带字库液晶显示模块MS 12864R(st7920控制器)驱动程序//
//适用:购买的MS12864液晶模块和所有7920驱动的液晶模块//
//*****************************************************************************************//
#define uint unsigned int
#define uchar unsigned char
#define ulong unsigned long
sbit P2_2=P2^2;
sbit DS1302=P1^5;
uint i;
uchar hang, lie;
uchar code page1[]={"哈尔滨威克科技股"};
uchar code page2[]={" 份有限公司 "};
uchar code page3[]={"版权所有盗版必究"};
#define Write_data_addr XBYTE[0x8100] //写数据地址
#define Read_data_addr XBYTE[0x8300] //读数据地址
#define Write_command_addr XBYTE[0x8000] //写指令地址
#define Read_command_addr XBYTE[0x8200] //读状态
void delay(uint x) //延时X ms
{
uint j;
while(x--)
{
for(j=0; j<125; j++);
}
}
void Write_command(uchar COM) //写指令
{
Write_command_addr=COM;
}
void Write_data(uchar data_num) //写数据
{
Write_data_addr=data_num;
}
Read_data() //读数据
{
char num;
num=Read_data_addr;
return num;
}
void youbiao(unsigned char Address) //打开游标,并在指定位置显示
{
Write_command(0x30);
Write_command(0x0e);
Write_command(0x18);
Write_command_addr=Address;
}
unsigned char Read_command(void)
{
unsigned char num;
num=Read_command_addr;
num=num&0x80;
return num;
}
void CLEAR_LCD( ) //清全屏
{
while(Read_command());
Write_command(0x01);
while(Read_command());
}
void fanbai(uchar ddram) //光标位置fanbai
{
Write_command(0x0f);
delay(25);
Write_command(ddram);
}
void huifu(uchar ddram) //光标位置huifu
{
Write_command(0x0c);
delay(100);
Write_command(ddram);
}
//*******************************液晶初始化*******************************//
void CHUSHIHUA()
{
delay(100);
Write_command(0x30); //功能设定:RE=0; 基本指令集动作
delay(150);
Write_command(0x30); //功能设定:RE=0; 基本指令集动作
delay(100);
Write_command(0x0c); //显示状态 开/关:整体显示ON, 游标OFF, 游标位置OFF
delay(150);
Write_command(0x01); //清除显示屏幕,把DDRAM位址计数器调整为"00H"
delay(100);
Write_command(0x02); //位址归位
}
//*************************************在指定地址处写字符串***********************//
void Display(uchar *ptr, uchar ddram)
{
uchar l, i1, x;
l=0;
if(ddram<0x88)
{
hang=0; //定位行地址:第一行
} else if(ddram<0x90)
{
hang=2; //定位行地址:第三行
}
else if(ddram<0x98)
{
hang=1; //定位行地址:第二行
} else
{
hang=3; //定位行地址:第四行
}
lie=0x0f&ddram; //定位列位置
if(lie>0x07)
{
lie=lie-0x08;
}
x=lie*2;
Write_command(ddram); //定位显示起始地址
while((ptr[l])!='\0')
{
l++;
}
for(i1=0; i1<l; i1++)
{
Write_data(ptr[i1]);
x++;
if(x==0x10)
{
x=0;
hang++;
switch(hang)
{
case 0:
Write_command(0x80);
break;
case 1:
Write_command(0x90);
break;
case 2:
Write_command(0x88);
break;
case 3:
Write_command(0x98);
break;
}
if(hang>3)
{
Write_command(0x80);
hang=0;
}
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -