📄 lcd.c
字号:
#include<reg52.h>
#include<absacc.h>
#include"lcd.h"
#include"zhimo.h"
//******写命令***********//////////////////////////////////
void KS0108_writeorder(bit RL,unsigned char order)
{
if(RL)
{
while(KS0108R_status1&0x80!=0) {;}
KS0108Set1=order;
}
else
{
while(KS0108R_status2&0x80!=0) {;}
KS0108Set2=order;
}
}
//////////////////////////////////////////////////////////
///////**********写数据****************/////////
void KS0108_writedata(bit RL,unsigned char din)
{
if(RL)
{
while(KS0108R_status1&0x80!=0) {;}
KS0108W_data1=din;
}
else
{
while(KS0108R_status2&0x80!=0) {;}
KS0108W_data2=din;
}
}
////////////////////////////////////////////////////////
////*********初始化*********////////
void KS0108_init()
{
KS0108_writeorder(0,KS0108_row);
KS0108_writeorder(0,KS0108_tier);
KS0108_writeorder(1,KS0108_row);
KS0108_writeorder(1,KS0108_tier);
KS0108_writeorder(1,KS0108_on);
KS0108_writeorder(0,KS0108_on);
}
///////////////////////////////////////////
/////***********清屏***//////////////////////
void KS0108_clear(bit RL)
{
unsigned char page,tier;
KS0108_init();
if(RL)
{
for(page=0;page<8;page++)
{
KS0108_writeorder(1,page|LCD_page);
KS0108_writeorder(1,LCD_tier);
for(tier=0;tier<64;tier++)
{
KS0108_writedata(1,0);
}
}
}
else
{
for(page=0;page<8;page++)
{
KS0108_writeorder(0,page|LCD_page);
KS0108_writeorder(0,LCD_tier);
for(tier=0;tier<64;tier++)
{
KS0108_writedata(0,0);
}
}
}
}
void LCD_init()
{ KS0108_clear(1);
KS0108_clear(0);
KS0108_init();
KS0108_clear(1);
KS0108_clear(0);
KS0108_init();
}
//输出8x16数字子程序
void LCD_Numdislay(unsigned char page,unsigned char tier,unsigned char num,bit rev_flag)
{
unsigned char x,i;
unsigned char time;
x=0;
time=0;
if(rev_flag)
{ while(time!=2)
{
if(tier<64) //选择左半屏显示
{
KS0108_writeorder(1,(page+time)|LCD_page); //设置起始页
KS0108_writeorder(1,tier|LCD_tier); //设置起始行
for(i=0;i<8;i++) //从起始列开始输出列
KS0108_writedata(1,~shu[num][i+x]);
}
else //选择右半屏显示
{
KS0108_writeorder(0,(page+time)|LCD_page);
KS0108_writeorder(0,(tier)|LCD_tier);
for(i=0;i<8;i++)
KS0108_writedata(0,~shu[num][i+x]);
}
x=8; //下次输出从字模代码数组的第8个字节开始
time++;
}
}
else
{
while(time!=2)
{
if(tier<64) //选择左半屏显示
{
KS0108_writeorder(1,(page+time)|LCD_page); //设置起始页
KS0108_writeorder(1,tier|LCD_tier); //设置起始列
for(i=0;i<8;i++) //从起始列开始输出列
KS0108_writedata(1,shu[num][i+x]);
}
else //选择右半屏显示
{
KS0108_writeorder(0,(page+time)|LCD_page);
KS0108_writeorder(0,(tier)|LCD_tier);
for(i=0;i<8;i++)
KS0108_writedata(0,shu[num][i+x]);
}
x=8; //下次输出从字模代码数组的第8个字节开始
time++;
}
}
}
//输出8*16字母///////////////
void LCD_letterdisplay(unsigned char page,unsigned char tier,unsigned char code *letter, bit rev_flag)
{ unsigned char i;
if(rev_flag)
{
if(tier<64)
{ KS0108_writeorder(1,page|LCD_page);
KS0108_writeorder(1,tier|LCD_tier);
for(i=0;i<8;i++)
{ KS0108_writedata(1,~letter[i]);
}
KS0108_writeorder(1,(page+1)|LCD_page);
KS0108_writeorder(1,tier|LCD_tier);
for(i=0;i<8;i++)
{ KS0108_writedata(1,~letter[i+8]);
}
}
if(tier>=64)
{ KS0108_writeorder(0,(page)|LCD_page);
KS0108_writeorder(0,(tier-64)|LCD_tier);
for(i=0;i<8;i++)
{ KS0108_writedata(0,~letter[i]);
}
KS0108_writeorder(0,(page+1)|LCD_page);
KS0108_writeorder(0,(tier-64)|LCD_tier);
for(i=0;i<8;i++)
{ KS0108_writedata(0,~letter[i+8]);
}
}
}
else
{ if(tier<64)
{ KS0108_writeorder(1,page|LCD_page);
KS0108_writeorder(1,tier|LCD_tier);
for(i=0;i<8;i++)
{ KS0108_writedata(1,letter[i]);
}
KS0108_writeorder(1,(page+1)|LCD_page);
KS0108_writeorder(1,tier|LCD_tier);
for(i=0;i<8;i++)
{ KS0108_writedata(1,letter[i+8]);
}
}
if(tier>=64)
{ KS0108_writeorder(0,(page)|LCD_page);
KS0108_writeorder(0,(tier-64)|LCD_tier);
for(i=0;i<8;i++)
{ KS0108_writedata(0,letter[i]);
}
KS0108_writeorder(0,(page+1)|LCD_page);
KS0108_writeorder(0,(tier-64)|LCD_tier);
for(i=0;i<8;i++)
{ KS0108_writedata(0,letter[i+8]);
}
}
}
}
//16x16汉字显示输出
void LCD_hanzhidisplay(unsigned char page,unsigned char tier,unsigned char code *chinese,bit rev_flag)
{ unsigned char i;
unsigned char x=0;
unsigned char time=0;
if(rev_flag)
{ while(time!=2)
{
if(tier<64)
{
KS0108_writeorder(1,(page+time)|LCD_page); //设置起始页
KS0108_writeorder(1,tier|LCD_tier); //设置起始行
for(i=0;i<16;i++) //从起始列开始输出列
KS0108_writedata(1,~chinese[i+x]);
}
else
{
KS0108_writeorder(0,(page+time)|LCD_page);
KS0108_writeorder(0,(tier-64)|LCD_tier);
for(i=0;i<16;i++)
KS0108_writedata(0,~chinese[i+x]);
}
x=16; //下次输出从字模代码数组的第16个字节开始
time++;
}
}
else
{
if(tier<64)
{ KS0108_writeorder(1,page|LCD_page);
KS0108_writeorder(1,tier|LCD_tier);
for(i=0;i<16;i++)
{ KS0108_writedata(1,chinese[i]);
}
KS0108_writeorder(1,(page+1)|LCD_page);
KS0108_writeorder(1,tier|LCD_tier);
for(i=0;i<16;i++)
{ KS0108_writedata(1,chinese[i+16]);
}
}
if(tier>=64)
{ KS0108_writeorder(0,page|LCD_page);
KS0108_writeorder(0,(tier-64)|LCD_tier);
for(i=0;i<16;i++)
{ KS0108_writedata(0,chinese[i]);
}
KS0108_writeorder(0,(page+1)|LCD_page);
KS0108_writeorder(0,(tier-64)|LCD_tier);
for(i=0;i<16;i++)
{ KS0108_writedata(0,chinese[i+16]);
}
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -