?? lcd.c
字號:
#include <at89x51.h>
#include <intrins.h>
#include "lcd.h"
typedef unsigned int uint;
typedef unsigned char uchar;
////////////////////////////////////////////////////////////////////////
#define CMD_CLEAR 0x01
#define CMD_HOME 0x03
#define CMD_DISPLAYON 0x0c
#define CMD_FUNCTION 0x30 //8 bit basic instr
#define CMD_ENTRY 0x06 //ac plus
#define CMD_SHOWCURSOR 0x0f
#define CMD_SETCURSOR 0x14
#define CMD_GRAPH_ON 0x3e
#define CMD_GRAPH_OFF 0x3c
////////////////////////////////////////////////////////////////////////
sbit RS=P1^5;
sbit RW=P2^1;
sbit EN=P1^7;
////////////////////////////////////////////////////////////////////////
void Delay()
{
uchar n;
for(n=0;n<5;n++);
}
void SendLcdCmd(uchar cmd)
{
P2=0xff;
RS=0;
RW=0;
EN=0;
P0=cmd;
EN=1;
_nop_();
EN=0;
}
void SendLcdData(uchar dat)
{
P2=0xff;
RS=1;
RW=0;
EN=0;
P0=dat;
EN=1;
_nop_();
EN=0;
RS=0;
}
/*
uchar ReadLcdState()
{
uchar state;
P2=0xff;
RS=0;
RW=1;
EN=0;
EN=1;
_nop_();
state=P0;
EN=0;
return state;
}
uchar ReadLcdData()
{
uchar dat;
P2=0xff;
RS=1;
RW=1;
EN=0;
EN=1;
_nop_();
dat=P0;
EN=0;
RS=0;
return dat;
}
*/
void ShowCursor()
{
Delay();
SendLcdCmd(CMD_SHOWCURSOR);
Delay();
SendLcdCmd(CMD_SETCURSOR);
}
void HideCursor()
{
Delay();
SendLcdCmd(CMD_DISPLAYON);
}
void LcdClear()
{
uint n;
Delay();
SendLcdCmd(CMD_CLEAR);
for(n=0;n<4800;n++);
}
void LcdInit()
{
uint n;
EN=0;
SendLcdCmd(CMD_FUNCTION);
Delay();
SendLcdCmd(CMD_DISPLAYON);
Delay();
SendLcdCmd(CMD_CLEAR);
for(n=0;n<4800;n++);
SendLcdCmd(CMD_ENTRY);
EN=0;
}
bit SetPos(uchar x,uchar y)
{
uchar addr;
if(y>3 || x>7) return 0;
switch(y)
{
case 0: addr=0x80+x;
break;
case 1: addr=0x90+x;
break;
case 2: addr=0x88+x;
break;
case 3: addr=0x98+x;
break;
}
Delay();
SendLcdCmd(addr);
EN=0;
return 1;
}
void LcdPrint(uchar *c, uchar len)
{
uchar i;
for(i=0;i<len;i++)
{
Delay();
SendLcdData(c[i]);
}
EN=0;
}
bit LcdPrintLine(uchar *c,uchar len,uchar x,uchar y)
{
uchar i=0,j=x;
bit add=0;
if(!SetPos(x,y)) return 0;
while(i<len)
{
Delay();
SendLcdData(c[i]);
i++;
if(add)
{
j++;
if(j>=8)
{
y++;if(y>=4) y-=4;
j=0;
SetPos(0,y);
}
}
add=!add;
}
EN=0;
return 1;
}
void DrawPic(char *pic)
{
uchar x,y;
uint i=0;
SendLcdCmd(CMD_GRAPH_OFF);
Delay();
for(y=0x80;y<0xa0;y++)
{
SendLcdCmd(y);
Delay();
SendLcdCmd(0x80);
Delay();
for(x=0;x<16;x++)
{
SendLcdData(pic[i]);
Delay();
i++;
}
}
for(y=0x80;y<0xa0;y++)
{
SendLcdCmd(y);
Delay();
SendLcdCmd(0x88);
Delay();
for(x=0;x<16;x++)
{
SendLcdData(pic[i]);
Delay();
i++;
}
}
SendLcdCmd(CMD_GRAPH_ON);
Delay();
}
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -