|
#include "stdio.h"
#include "math.h"
#include "macroconst.h"
#include "reg52.h"
#include "string.h"
#include "delay.h"
unsigned char code IC_DAT[];//----------------定義數組
unsigned char code pic1[];
unsigned char code pic2[];
unsigned char code pic3[];
sbit RS =P1^0;//------------------------定義接口信息
sbit WRD=P1^1;
sbit E= P1^2;
sbit PSB=P2^7;
sbit RES=P2^5;
void TransferData(char data1,bit DI); //-------------函數聲明
void display(void);
void display_grapic(void);
//void delayms(unsigned int n);
void DisplayLine(unsigned char line1,unsigned char line2);
void DisplayGraphic(unsigned char code *adder);
//void delay(unsigned int m);
void lcd_mesg(unsigned char code *adder1);
//unsigned char code IC_DAT[]={
//"就辭白帝彩云間,"
//"千里江陵一日還。"
//"兩岸猿聲啼不住,"
//"輕舟已三萬重山。"
//};
//unsigned char code IC_DAT2[]={
//"海納百川寬容為先"
//"欲成大業誠信為先"
//"游弋商海濟世為先"
//"人立于世守法為先"
//};
void TransferData(char data1,bit DI) //------------傳送數據或者命令,當DI=0是,傳送命令,當DI=1,傳送數據.
{
WRD=0;
RS=DI;
delay(1);
P0=data1;
E=1;
delay(1);
E=0;
}
//void delayms(unsigned int n)//--------------------延時10×n毫秒程序
// {
// unsigned int i,j;
// for(i=0;i<n;i++)
// for(j=0;j<2000;j++);
// }
//
//void delay(unsigned int m)//----------------------延時程序
// {
// unsigned int i,j;
// for(i=0;i<m;i++)
// for(j=0;j<20;j++);
// }
void initina1(void) //------------LCD字庫初始化程序
{
delay(40); //大于40MS的延時程序
PSB=1; //設置為8BIT并口工作模式
delay(1); //延時
RES=0; //復位
delay(1); //延時
RES=1; //復位置高
delay(10);
TransferData(0x30,0); //Extended Function Set :8BIT設置,RE=0: basic instruction set, G=0 :graphic display OFF
delay(100); //大于100uS的延時程序
TransferData(0x30,0); //Function Set
delay(37); ////大于37uS的延時程序
TransferData(0x08,0); //Display on Control
delay(100); //大于100uS的延時程序
TransferData(0x10,0); //Cursor Display Control光標設置
delay(100); //大于100uS的延時程序
TransferData(0x0C,0); //Display Control,D=1,顯示開
delay(100); //大于100uS的延時程序
TransferData(0x01,0); //Display Clear
delay(10); //大于10mS的延時程序
TransferData(0x06,0); //Enry Mode Set,光標從右向左加1位移動
delay(100); //大于100uS的延時程序
}
void initina2(void) //-------------LCD顯示圖片(擴展)初始化程序
{
delay(40); //大于40MS的延時程序
PSB=1; //設置為8BIT并口工作模式
delay(1); //延時
RES=0; //復位
delay(1); //延時
RES=1; //復位置高
delay(10);
TransferData(0x36,0); //Extended Function Set RE=1: extended instruction
delay(100); //大于100uS的延時程序
TransferData(0x36,0); //Extended Function Set:RE=1: extended instruction set
delay(37); ////大于37uS的延時程序
TransferData(0x3E,0); //EXFUNCTION(DL=8BITS,RE=1,G=1)
delay(100); //大于100uS的延時程序
TransferData(0x01,0); //CLEAR SCREEN
delay(100); //大于100uS的延時程序
}
void Lcd_Set_Post(uchar y,uchar x) //設置顯示位置
{
uchar Address;
if(y==1){Address = 0x80 + x;}
if(y==2){Address = 0x90 + x;}
if(y==3){Address = 0x88 + x;}
if(y==4){Address = 0x98 + x;}
TransferData(Address,0);
}
void LCD_WRITE_CHAR(uchar *Word)//------------------------寫字
{
while(*Word)
{
TransferData(*Word,1);
Word ++;
}
}
void DisplayGraphic(unsigned char code *adder)//-------畫數字 圖
{
int i,j;
//顯示上半屏內容設置
for(i=16;i<32;i++) //
{
TransferData((0x80 + i),0); //SET 垂直地址 VERTICAL ADD
TransferData(0x80,0); //SET 水平地址 HORIZONTAL ADD
for(j=0;j<2;j++)
{
TransferData(*adder,1);
adder++;
}
}
//顯示下半屏內容設置
for(i=0;i<16;i++) //
{
TransferData((0x80 + i),0); //SET 垂直地址 VERTICAL ADD
TransferData(0x88,0); //SET 水平地址 HORIZONTAL ADD
for(j=0;j<2;j++)
{
TransferData(*adder,1);
adder++;
}
}
}
void display() //為反白做準備,目地是在圖形顯示時防止有噪點
{
uchar i,j;
TransferData(0x34,0); //寫數據時,關閉圖形顯示
for(i=0;i<32;i++)
{
TransferData(0x80+i,0); //先寫入水平坐標值
TransferData(0x80,0); //寫入垂直坐標值
for(j=0;j<16;j++) //再寫入兩個8位元的數據
TransferData(0x00,1);
delay(1);
}
for(i=0;i<32;i++)
{
TransferData(0x80+i,0); //先寫入水平坐標值
TransferData(0x88,0); //寫入垂直坐標值
for(j=0;j<16;j++) //再寫入兩個8位元的數據
TransferData(0x00,1);
delay(1);
}
TransferData(0x36,0); //寫完數據,開圖形顯示
}
void white(uchar x,uchar y,uchar width) //反白,X值為0-7,Y值為0-3,width為行反白格數
{
uchar i,j,flag=0x00;
display();
if(y>1)
{
flag=0x08;
y=y-2;
}
// TransferData(0x34,0); //寫數據時,關閉圖形顯示,且打開擴展指令集
for(i=0;i<16;i++)
{
TransferData((0x80+(y<<4)+i),0);
TransferData((0x80+flag+x),0);
for(j=0;j<width;j++)
{
TransferData(0xff,1);
TransferData(0xff,1);
}
delay(1);
}
// TransferData(0x36,0); //寫完數據,開圖形顯示
// lcd_wcmd(0x30); //從擴展指令到基本指令
}
|
-
-
51黑論壇_12864萬年歷.zip
2021-5-5 19:28 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
227.32 KB, 下載次數: 30, 下載積分: 黑幣 -5
|