📄 1602.c
字号:
#include "1602.h"
#include "bit.h"
//===================================
//液晶读写控制定义
#define E P0_10
#define RW_bit P0_9
#define RS_bit P0_8
#define LCD_data P1_Lowbyte
//========================================================
//延时子程序
void delay_1603(void)
{
unsigned int i,j;
for(i=100;i>0;i--)
for(j=50;j>0;j--)
{
*P_Watchdog_Clear=C_WDTCLR;
}
}
//*************delay_ms********************************
void delay_10us1602(unsigned char x)
{
while(x--)
{
// ClearWatchDog();
*P_Watchdog_Clear=C_WDTCLR;
}
}
void delay_ms1602(unsigned char cnt)
{
unsigned char i;
do {
i = 4;
do {
delay_10us1602(39);
} while(--i);
} while(--cnt);
}
void LCDE(int t) //IOB8 1111 1110
{
E=t;
}
void RW(int tt) //IOB10 1111 1011
{
RW_bit=tt;
}
void RS(int ttt) //IOB9 1111 1101
{
RS_bit=ttt;
}
void send(unsigned char dataLCD) //数据操作 //IOA高8位
{
LCD_data=dataLCD;
}
void wr_com(unsigned char comm)//********写控制字符程序 E=1 RS=0 RW=0**********//
{
LCDE(0);
RS(0); //********RS寄存器选择输入端,当RS=0;当进行写模块操作,指向指令寄存器。
RW(0); //********当RS=1,无论是读操作还是写操作,都是指向数据寄存器。
LCDE(1);
send(comm);
RS(0);
RW(0);
LCDE(0);
}
void wr_data(unsigned char dat)//*****当前位置写字符子程序:E=1 RS=1 RW=0
{
LCDE(0);
RS(0); //********RS寄存器选择输入端,当RS=0;当进行写模块操作,指向指令寄存器。
RW(0); //********当RS=1,无论是读操作还是写操作,都是指向数据寄存器。
RS(1);
RW(0);
LCDE(1);
send(dat);
LCDE(0);
RS(0);
RW(0);
}
unsigned int rd_bf()//*****忙状态检查*******//
{
unsigned char i;
//P0=0xff;
LCDE(0);
RS(0);
RW(0);
RS(0);
RW(1);
LCDE(1);
i=LCD_data;
LCDE(0);
// while(i){i=P1_7;}
// delay_ms1602(10);
return(i);
}
void init_LCD()//**********初始化程序,必须按照产品的资料介绍的过程进行********//
{
wr_com(0x38); //*****显示模式设置必须三次,不用检测忙信号
delay_ms1602(5);
wr_com(0x38);
delay_ms1602(5);
wr_com(0x38);
delay_ms1602(5);
//rd_bf();
//delay5ms();
wr_com(0x01); ///***清屏****
delay_ms1602(5);
rd_bf();
delay_ms1602(5);
wr_com(0x06); ///****光标移动设置***
delay_ms1602(5);
rd_bf();
delay_ms1602(1);
wr_com(0x38); ////***显示模式设置****
delay_ms1602(1);
rd_bf();
delay_ms1602(1);
wr_com(0x0c); /////***显示开*** 如果要开光标,设为0x0f
delay_ms1602(1);
rd_bf();
delay_ms1602(1);
wr_com(0x40); //set cgram address
delay_ms1602(1);
// rd_bf();
}
//---------------------------------------
//名称:显示子程序
//功能:在指定地方显示字符
//入口:a 是指向要显示的数组
// addr是要显示的地址
// c 为数组长度
//返回:无
void display_1602(unsigned char addr, unsigned char *a, unsigned char c)
{
unsigned char i;
wr_com(addr);
for(i=0;i<c;i++)
{
rd_bf();
wr_data(a[i]);
// delay_10us1602(100);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -