?? 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;
}
}
//////////////////////////////////////////////////////////
///////**********寫數(shù)據(jù)****************/////////
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數(shù)字子程序
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); //設(shè)置起始頁
KS0108_writeorder(1,tier|LCD_tier); //設(shè)置起始行
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; //下次輸出從字模代碼數(shù)組的第8個字節(jié)開始
time++;
}
}
else
{
while(time!=2)
{
if(tier<64) //選擇左半屏顯示
{
KS0108_writeorder(1,(page+time)|LCD_page); //設(shè)置起始頁
KS0108_writeorder(1,tier|LCD_tier); //設(shè)置起始列
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; //下次輸出從字模代碼數(shù)組的第8個字節(jié)開始
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); //設(shè)置起始頁
KS0108_writeorder(1,tier|LCD_tier); //設(shè)置起始行
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; //下次輸出從字模代碼數(shù)組的第16個字節(jié)開始
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]);
}
}
}
}
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -