📄 b_commond.c
字号:
#include<AT89X51.H>
#include<intrins.h>
#define EN P2_0
#define RW P2_1
#define RS P2_2
#define DATA P1
/*
void che_busy(void);
void send_d(unsigned char data_in);
void send_i(unsigned char comm);
unsigned char read_ram(void);
*/
//;================================================
//测忙碌子程序
//;RS=0,RW=1,E=H,D0-D7=状态字
//;================================================
void che_busy(void)
{
unsigned char q;
RS = 0; //CLR RS
RW = 1; //SETB RW
do
{ //JB P0.7,$
P1 = 0xFF; //MOV P0,#0FFH ;测忙碌子程序
EN = 1; //SETB E
q = P1;
EN = 0; //CLR E
}
while(q & 0x80);
}
//;===============================================
//;写数据子程序
//;RS=1,RW=0,E=高脉冲,D0-D7=数据
//;===============================================
void send_d(unsigned char data_in)
{
che_busy(); //LCALL CHK_BUSY ;写数据子程序
RS = 1; //SETB RS
RW = 0; //CLR RW
DATA = data_in; //MOV P0,A
EN = 1; //SETB E
_nop_(); //NOP
_nop_(); //NOP
EN = 0; //CLR E
}
//;===============================================
//;写指令子程序
//;RS=0,RW=0,E=高脉冲,D0-D7=指令码
//;===============================================
void send_i(unsigned char comm)
{
che_busy(); //LCALL CHK_BUSY
RS = 0; //CLR RS
RW = 0; //CLR RW
DATA = comm; //MOV P0,A
EN = 1 ; //SETB E
_nop_(); //NOP
_nop_(); //NOP
EN = 0; //CLR E
}
/*
//;读RAM值
unsigned char read_ram(void)
{
unsigned char temp;
che_busy();
P0 = 0xFF; //MOV P0,#0FFH ;测忙碌子程序
RS = 1; //SETB RS
RW = 1; //SETB RW
EN = 1; //SETB E
_nop_();
_nop_();
temp = DATA;
EN = 0;
return(temp);
}
*/
//;********************初始化**********************
void lcd_ini(void)
{
P1 = 0xff;
P2 = 0xff;
P3 = 0xff;
send_i(0x38); //LGS0: MOV A,#34H ;34H--扩充指令操作
//LCALL SEND_I
send_i(0x08); //MOV A,#30H ;30H--基本指令操作
//LCALL SEND_I
send_i(0x06); //MOV A,#01H ;清除显示
//LCALL SEND_I
send_i(0x01); //MOV A,#06H ;指定在资料写入或读取时,光标的移动方向
//LCALL SEND_I ;DDRAM 的地址计数器(AC)加1
send_i(0x0C); //MOV A,#0CH ;开显示,关光标,不闪烁
//LCALL SEND_I
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -