📄 1602_display.c
字号:
#include <aduc834.h>
#include <absacc.h>
#include"..\headers\1602.h"
/*****************************************************************
注意驱动电压应调整如下: 驱动电压Vo :0.71--0.8v
背光电压LED+ :2.37V
/**************************************************************/
extern unsigned char code CGTAB[32];
bit LCD_BUSY;
void LCD_Init()
{
unsigned char data i;
WR_CMD(Mode_2row_5_10); //8位数据接口,5x7点阵,单行显示
for(i=0;i<3;i++) //厂家要求,未明原因
{
LCD_En=1;
LCD_En=0; //下降沿操作
Wait(1000);
}
WR_CMD(Scr_clc); //清屏
WR_CMD(Dis_NoCur); //无光标
// WR_CMD(Mode_Cur_R);
WR_CGRAM(CGTAB,32,0x00);// 建立CGRAM字库
}
/***********短延时子程序*************************/
void Wait(int data length)
{
while (length >=0)
length--;
}
/**********写指令子程序*****************************/
void WR_CMD(unsigned char command)
{ while(CHECK_LCD_BUSY());
LCD_RS = 0; //CODE REGESTER
LCD_RW = 0; //WRITE MODE
DAT_BUS = command;
LCD_En = 1; //下降沿触发使能
LCD_En = 0;
}
/**********写显示数据子程序**********************************/
void WR_DAT(unsigned char dat)
{
while(CHECK_LCD_BUSY());
LCD_RS = 1; //DATA REGESTER
LCD_RW = 0; //WRITE MODE
DAT_BUS = dat; //向总线写数据
LCD_En = 1; //下降沿触发使能
LCD_En = 0;
}
/********建立CGRAM字库**********************************/
void WR_CGRAM(unsigned char *CGTAB,unsigned char counter,unsigned char address)
{
unsigned char data i;
WR_CMD(0x40|address); //设置CGRAM的地址
for(i=0;i<counter;i++)
{
WR_DAT(CGTAB[i]); //自定义字符数据写入CGRAM
}
}
/*****************DDRAM地址指针设置*************************/
void DDRAM_ADDR_SET(unsigned char row,unsigned char column)
{
unsigned char address;
address = column;
if (row==2)
{
address |= 0x40; //修正第二行显示地址40H--67H
}
address |= 0x80 ; //设置DDRAM地址指针命令
WR_CMD(address);
}
/******************BUSY位检测子程序******************************/
unsigned char CHECK_LCD_BUSY()
{
unsigned char temp1;
LCD_RS = 0;
LCD_RW = 1; //读LCD状态
DAT_BUS = 0xFF;
LCD_En = 1;
temp1 = DAT_BUS; //状态值读入
LCD_En = 0;
temp1 &= 0x80; //取最高位,把其他位屏蔽
return temp1;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -