📄 1602lib.c
字号:
#include "1602lib.h"
static void WriteCmd(uchar tempdata);
static void WriteDdr(uchar tempdata);
static void CheckBusy(void);
static void LCD_Delay(uint N);
void LCD_Delay(uint N)
{
uint i;
for(i=0;i<N;i++)
i=i;
}
void WriteCmd(uchar tempdata) /*写命令*/
{
DB0_DB7 = tempdata;
RS = 0;
RW = 0;
E = 0;
nop;
E = 1;
nop;
CheckBusy();
}
void WriteDdr(uchar tempdata) /*写数据*/
{
DB0_DB7 = tempdata;
RS = 1;
nop;
RW = 0;
E = 0;
nop;
E = 1;
nop;
CheckBusy();
}
void CheckBusy(void) /*查询忙状态*/
{
uchar tmp;
DB0_DB7 = 0xff;
RW = 1;
RS = 0;
E = 0;
nop;
E = 1;
do
{
nop;
tmp = DB0_DB7;
}while((tmp&0X80) == 0X80);
RW = 0;
}
void LCD_init() /*LCD初始化*/
{
RS = 0;
RW = 0;
E = 1;
WriteCmd(0x38);
LCD_Delay(1000);
WriteCmd(0x38);
LCD_Delay(1000);
WriteCmd(0x38);
WriteCmd(0x0f);
WriteCmd(0x06);
WriteCmd(0x01);
}
void DisplayOneChar(uchar X,uchar Y,uchar dat) /*在指定位置显示一个字符函数*/
{
Y&= 0X1;
X&= 0XF; /*限制X不能大于15,Y不能大于1*/
if(Y)X|= 0x40; /*当要显示第二行时地址码+0x40*/
X|=0X80; /*算出指令码*/
WriteCmd(X); /*这里部检测忙信号,发送地址码*/
WriteDdr(dat);
}
void DisplayString(uchar X,uchar Y,uchar *str) /*在指定位置显示字符串函数*/
{
uchar len = 0;
Y&= 0x1;
X&= 0xF; /*限制X不能大于15,Y不能大于1*/
while(len<= 15)
{
if(X<= 0XF) /*X坐标应小于0xF*/
{
DisplayOneChar(X,Y,str[len]); /*显示单个字符*/
len++;
X++;
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -