?? lcd2222.c
字號:
//連上J15短路環.
//-----------------------------------------------------------------------------
// Includes
//-----------------------------------------------------------------------------
#include <c8051f350.h> // SFR declarations
#include <INTRINS.H>
#include <stdio.h>
//-----------------------------------------------------------------------------
// Global CONSTANTS
//-----------------------------------------------------------------------------
#define uchar unsigned char
#define uint unsigned int
#define SYSCLK 24500000 // SYSCLK frequency in Hz
//----------------------------------------------------------------------------
void writelcd(uchar disdata);
unsigned char xdata discode; //開關顯示、光標、閃爍的命令字暫存單元
unsigned long x;
unsigned char virt_port;
unsigned char xdata tab1[16] ={0x20,0x20,0x42,0x54,0x20,0x46,0x33,0x33,0x30,0x20,0x56,0x31,0x2e,0x30
,0x20,0x20};
unsigned char xdata Netdata[16]={0x77,0x77,0x77,0x2e,0x78,0x68,0x6c,0x2e,0x63,0x6f,
0x6d,0x2e,0x63,0x6e,0x20,0x20};
sbit LCDCS = P1^2;
//-----------------------------------------------------------------------------
// PORT_Init
//-----------------------------------------------------------------------------
void PORT_Init (void)
{ P0SKIP = 0x4E;
XBR0 |= 0x03; // Enable SMBus pins
XBR1 |= 0x40; // Enable crossbar and weak pull-ups
P0MDOUT |= 0x01; // All P0 pins open-drain output
P1MDOUT |= 0x05;
}
//-----------------------------------------------------------------------------
//SPI_INIT
//-----------------------------------------------------------------------------
void SPI0_Init (void)
{
SPI0CFG = 0x70; // data sampled on 1st SCK rising edge
// 8-bit data words
SPI0CN = 0x09; // Master mode; SPI enabled; flags
// cleared
SPI0CKR = 0x03;//SYSCLK/2/3000000-1;// SPI clock <= 8MHz (limited by
// EEPROM spec.)
}
//-----------------------------------------------------------------------------
//write com
//-----------------------------------------------------------------------------
void Write_COM(uchar ins)
{
uchar xdata i,t;
uint xdata j;
for(j=0;j<500;j++); //用延時代替查詢
virt_port|=ins&0xf0;
writelcd(virt_port);
virt_port|=0x08;
writelcd(virt_port);
for(i=3;i>0;i--);
virt_port&=~0x08;
writelcd(virt_port);
virt_port&=0x07;
writelcd(virt_port);
t=ins<<4;
virt_port|=t&0xf0;
writelcd(virt_port);
virt_port|=0x08;
writelcd(virt_port);
for(i=3;i>0;i--);
virt_port&=~0x08;
writelcd(virt_port);
virt_port=0;
writelcd(virt_port);
}
//----------------------------------------------------------------------------------
//write data
//----------------------------------------------------------------------------------
void Write_CHAR(uchar d)
{
uchar xdata i,t;
uint xdata j;
for(j=0;j<500;j++); //用延時代替查詢
virt_port|=0x02;
writelcd(virt_port);
virt_port|=d&0xf0;
writelcd(virt_port);
virt_port|=0x08;//E=1
writelcd(virt_port);
for(i=3;i>0;i--);
virt_port&=0xf7; //E=0
writelcd(virt_port);
virt_port&=0x07;
writelcd(virt_port);
t=d&0x0f;
virt_port|=t<<4;
writelcd(virt_port);
virt_port|=0x08; //E=1
writelcd(virt_port);
for(i=3;i>0;i--);
virt_port&=0xf7; //E=0
writelcd(virt_port);
virt_port=0;
writelcd(virt_port);
}
//---------------------------------------------------------------------------------------
void lcdaddr(uchar DDRAM)
{
if (DDRAM<=16)
{
Write_COM(0x80+DDRAM-1);
}
else
{
Write_COM(0x80+DDRAM+0x2f);
}
}
//---------------------------------------------------------------------------------------
void cursoropen(uchar position)//開光標,關閃爍
{
lcdaddr(position);
discode|=0x02;
discode&=~0x01;
Write_COM(discode);
}
//----------------------------------------------------------------------------------------
void flickeropen(uchar position)//開光標、開閃爍
{
lcdaddr(position);
discode|=0x02;
discode|=0x01;
Write_COM(discode);
}
//-----------------------------------------------------------------------------------------
void cursorclose(void) //關光標、關閃爍
{
discode&=~0x02;
discode&=~0x01;
Write_COM(discode);
}
//------------------------------------------------------------------------------------------
void YJ_Init(void)
{
uint xdata i;
// setting (24500000)
PORT_Init (); // initialize crossbar and GPIO
SPI0_Init ();
virt_port=0;
writelcd(virt_port);
virt_port|=0x08; //E=1,第一步
writelcd(virt_port);
virt_port|=0x30;
writelcd(virt_port);
for(i=20;i>0;i--);
virt_port&=0xf7; //E=0
writelcd(virt_port);
virt_port=0;
writelcd(virt_port);
for(i=20000;i>0;i--);
for(i=20000;i>0;i--);
virt_port|=0x08; //E=1,第二步
writelcd(virt_port);
virt_port|=0x30;
writelcd(virt_port);
for(i=20;i>0;i--);
virt_port&=0xf7; //E=0
writelcd(virt_port);
virt_port=0;
writelcd(virt_port);
for(i=1000;i>0;i--);
virt_port|=0x08; //E=1,第三步
writelcd(virt_port);
virt_port|=0x30;
writelcd(virt_port);
for(i=20;i>0;i--);
virt_port&=0xf7; //E=0
writelcd(virt_port);
virt_port=0;
writelcd(virt_port);
for(i=1000;i>0;i--); //3次延時,重要!
for(i=8000;i>0;i--); //用延時代替查詢
virt_port=0; //第五步,寫入20碼,設置為4位總線方式,非常重要!!!!!
writelcd(virt_port);
virt_port|=0x20; //只寫高字節
writelcd(virt_port);
virt_port|=0x08; //E=1
writelcd(virt_port);
for(i=20;i>0;i--);
virt_port&=0xf7; //E=0
writelcd(virt_port);
for(i=10;i>0;i--);
virt_port=0;
writelcd(virt_port);
Write_COM(0x28); //第六步。。。。
for(i=50;i>0;i--);
Write_COM(0x01);
for(i=50;i>0;i--);
Write_COM(0x0e);
for(i=50;i>0;i--);
Write_COM(0x06);
for(i=50;i>0;i--);
}
//-----------------------------------------------------
void writelcd(uchar disdata) //write 595
{
uint xdata i;
for(i=0;i<3;i++);
LCDCS=1;
SPIF = 0;
for(x=0;x<50;x++);
SPI0DAT=disdata;
while (SPIF == 0); // 等待寫結束
for(x=0;x<500;x++);
LCDCS=0;
for(x=0;x<500;x++);
}
//----------------------------------------------------------
//end
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -