📄 rt1602c+x2_5020驱动程序.c
字号:
//单片机RT1602_C语言程序__RT1602C+X2_5020驱动程序
//2006年4月8951_LCD_1602_Q_D_MCU适用
//AT89C54_Ver1.00
//KS0070(44780) 16x2 字符液晶屏驱动演示程序总线方式
//DB0=P1.0 DB1=P1.1 DB2=P1.2 DB3=P1.3 DB4=P1.4 DB5=P1.5
//DB6=P1.6 DB7=P1.7 R/W=P2.0 RS=P2.1 E=P2.7
//[注]:AT89C51的晶振频率为12MHz
#include <REGX51.H>
#include <stdio.h>
#include <absacc.h>
#include <intrins.h>
#include <SS89BIN.h>
sbit E_E=P3^3; //片选,下降沿触发
sbit R_S=P3^4; //H数据寄存器,L指令寄存器
sbit R_W=P3^5; //H读数据,L写数据
sbit X25_cs=P1^1; //片选接口
sbit X25_sk=P1^0; //时钟接口
sbit X25_si=P1^2; //数据输入接口
sbit X25_so=P1^3; //数据输出接口
void Write_Byte(unsigned char IData)
{unsigned char i;
for(i=0;i<8;i++)
{X25_cs=0;
_nop_();
X25_sk=0;
IData<<=1;
_nop_();
X25_si=CY;
_nop_();
X25_sk=1;
_nop_();
}
}
unsigned char Read_Byte(unsigned char Adress)
{unsigned char count,i;
Write_Byte(0x03);
Write_Byte(Adress);
for(i=0;i<8;i++)
{X25_sk=1;
count<<=1;
X25_sk=0;
if(X25_so) count++;
}
X25_cs=1;
return(count);
}
void WREN(void)
{Write_Byte(0x06);
_nop_();
X25_cs=1;
}
unsigned char WriteInData(unsigned char Address,unsigned char DataByte)
{unsigned char mark;
WREN();
Write_Byte(0x02);
Write_Byte(Address);
Write_Byte(DataByte);
_nop_();
X25_cs=1;
mark=Read_Byte(Address);
if(DataByte==mark) return(0); //返回正确
if(mark!=DataByte) return(1); //返回错误
}
void TIME(int nt) //延时函数
{long int it=0;
for(it=0;it<nt*1000;it++);
return;
}
void DELAY(void) //判断液晶显示器是否忙的子程序
{P1=0xFF;
R_S=0;R_W=1;E_E=0;
_nop_();
E_E=1;
while(P1_7); //如果P1.7为高电平表示忙就循环等待
return;
}
void WR1602C(char mun,char rs) //写入控制命令的子程序
{P1=mun; //将代码送到P1口
R_S=rs; //1数据寄存器,0指令寄存器
R_W=0;E_E=0; //执行显示命令
DELAY(); //判断液晶模块是否忙
E_E=1; //显示完成,程序停车
return;
}
void main(void)
{ unsigned char flag; //读写正确错误标志
unsigned char dat; //从X25020中读出的数据
P3_1=0;P3_2=1;TIME(3); //指示灯闪烁
P3_1=1;P3_2=0;TIME(3);
P3_1=0;P3_2=1;TIME(3);
WR1602C(B0000_0001,0); //清屏并光标复位
WR1602C(B0011_1000,0); //设置显示模式:8位2行5x7点阵
WR1602C(B0000_1111,0); //显示器开,光标开,光标允许闪烁
WR1602C(B0000_0110,0); //文字不动,光标自动右移
WR1602C(B1110_1000,0); //写入显示起始地址(第一行第一个位置)
WR1602C(B0100_0001,1); //字母A的代码
WR1602C(B0100_0010,1);
WR1602C(B0100_0011,1);
TIME(5);
flag=WriteInData(0x00,25); //写数据
dat=Read_Byte(0x00); //读数据
START:
WR1602C(B1110_1000,0); //写入显示起始地址(第一行第一个位置)
WR1602C(0x4E,1);WR1602C(0x6F,1); //第二排从头开始显示No1:
WR1602C(0x31,1);WR1602C(0x3A,1);
WR1602C(dat/10+48,1); //显示读数的十位
WR1602C(dat%10+48,1); //显示读数的个位
WR1602C(0x20,1); //显示
WR1602C(0x20,1); //显示
TIME(5);
goto START;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -