📄 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 = 0x7E;
XBR0 = 0x02; // 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 + -