⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 rt1602c+x2_5020驱动程序.c

📁 E:RT1602C+X2_5020驱动程序.rar
💻 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 + -