📄 cssuner-1602.c
字号:
/////////////////////////
//自己写的一段代
//51+lcd1602
//code by BearBearBearBear
//2007.10.10
//antoine_kid@126.com
////////////////////////
#include <reg51.H>
#include<intrins.h>
sbit RS = P2^0;
sbit RW = P2^1;
sbit EN = P2^2;
/////////////软件延时/////////
void delay(unsigned int n)
{
unsigned int cc;
while(n-->0)
{
for(cc=10;cc>0;cc--);
}
}
////////////////////////////////
////////////读lcd状态指令//////
void recom( )
{
EN=0;
RS=0;
RW=1;
EN=1;
}
////////////////////////////////
//////////测试是否忙///////////////
void busytest()
{
P1=0xff;
RS=0;
RW=1;
EN=1;
while((P1&0x80)==0x80)
{
EN=0; //这两句protues仿真必须加
EN=1; //
};
EN=0;
}
/////////////////////////////////
////////////写lcd指令不判断是否忙//////
void wrcom(unsigned char n)
{
RS=0;
RW=0;
P1=n;
EN=1;
_nop_();
EN=0;
}
////////////////////////////////
//////////写lcd指令判断是否忙//////
void wrcomn (unsigned char n)
{
busytest();
wrcom(n);
}
/////////////////////////////
////////清屏//////////////
void clrscr()
{
wrcomn(0x01); //清屏
}
/////////////////////////////
///////////初始化lcd///////////
void initlcd()
{
delay(150);
wrcom(0x38);
delay(50);
wrcom(0x38);
delay(50);
wrcom(0x38);
wrcomn(0x38);
wrcomn(0x08); //关显示 不显示光标
wrcomn(0x01); //清屏
wrcomn(0x06); //光标模式
wrcomn(0x0c); //开显示
}
////////////////////////////
//////////设置光标位置/////////
void setpos(unsigned char x,unsigned char y)
{
busytest();
x&=0x0f;
y&=0x03;
if(y==0x00)
wrcomn(x|0x80);
else if(y==0x01)
wrcomn((x+0x40)|0x80);
}
/////////////////////////////////
////////////写数据//////////////
void wrightdata(unsigned char n)
{
busytest();
RS=1;
RW=0;
P1=n;
EN=1;
_nop_();
EN=0;
}
///////////////////////
///////////写字符串数据////////
void wrightstrdata(unsigned char *s,unsigned int length)
{
int x,y;
int YMAX,XMAX[2];
if(length>16)
{
YMAX=2;
XMAX[0]=16;
XMAX[1]=length-16;
}
else
{
YMAX=1;
XMAX[0]=length;
XMAX[1]=0;
}
for(y=0;y<YMAX;y++)
for(x=0;x<XMAX[y];x++)
{
setpos(x,y);
wrightdata(*s);
s++;
}
}
///////////////////////////////
///////////主程序////////////
void main()
{
EN=0;
initlcd();
while(1)
{
clrscr();
wrightstrdata("abcdefghijklmopqrstuvwxyz",26);
delay(3000);
clrscr();
wrightstrdata("1234567890",10);
delay(3000);
clrscr();
wrightstrdata("ABCDEFGHIJKLMNOPRSTUVWXYZ",26);
delay(3000);
}
}
////////////////////////
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -