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

📄 lcd_24064.c

📁 大家好
💻 C
字号:
#include "c8051f020.h"
#include <string.h>
//#include "all_code.h"

#define uchar unsigned char
#define uint  unsigned int

#define DATA_IO P5				//数据线接P5

sbit OUT=P1^6;
sbit KEY=P3^7;

//控制线接P3口	数据线接P5口
//sbit CE = P3^1;     	// 读\写使能
//CE直接接地
sbit RD = P3^3;       	// 写 控制
sbit CD = P3^5;       	// 数据\指令 选择 1为指令,0为数据
sbit WR	= P3^7;			// 读 控制	




//函数声明
void 	System_Init		(void);
void  	Port_Init 		(void);
uchar 	Read_State 		(void);
void 	Write_Cmd_Non 	(uchar cmd);
void 	Write_Cmd_Single 	(uchar data1,uchar cmd);
void 	Write_Cmd_Double 	(uchar data1,uchar data2,uchar cmd);
void 	Lcd_Init 		(void);



void Delay(uchar t)
{
	uchar k;
	while(t--)
	for(k=0;k<10;k++);
							}


//配置系统时钟使用外部晶振22.1184MHz
void System_Init(void)
{
	uchar i;
	WDTCN=0xde;						//禁用看门狗
	WDTCN=0xad;
	OSCXCN=0x67;  
	for ( i=0; i<255; i++ ) ;  	
	while(!(OSCXCN & 0x80 ) );		//等待晶体振荡器稳定
	OSCICN=0x88;   					//选择外部时钟源 允许时钟丢失检测 检测到时钟丢失将复位
	CKCON=0x00;  					//T0 12分频
								}


//端口配置
void Port_Init (void)
{	
	XBR0=0x00;						//
	XBR1=0x00;						
	XBR2=0xc0; 						//允许交叉开关 禁止弱上拉 
 		
	P0MDOUT=0xff;					//1 为推挽 0为漏极开路
	P1MDIN=0xff;					//0 配置为模拟输入 1 配置为数字输入
	P1MDOUT=0xff;					//1 为推挽 0为漏极开路
	P2MDOUT=0xff;					//1 为推挽 0为漏极开路		
	P3MDOUT=0xff;					//1 为推挽 0为漏极开路	
	P3IF=0;							//端口3中断标志
	P74OUT=0xff;					//P4~P7设置为推挽方式
													}


//读状态字
uchar Read_State (void)
{	
	uchar r_state;
	DATA_IO=0xff;
	CD=1;
	RD=0;
	WR=1;
	Delay(1);
	r_state=DATA_IO;
	RD=1;
	return (r_state);
							}

//写数据
void Write_Data (uchar W_data)
{
	while( ( Read_State () & 0x03 ) != 0x03 ) ;		//等待数据指令读写状态准备好
	CD=0;
	WR=0;
	RD=1;
	Delay(1);
	DATA_IO=W_data;
	Delay(1);
	WR=1;
	CD=1;
				}

//写命令1--无参数
void Write_Cmd_Non (uchar cmd)
{
	while( ( Read_State () & 0x03 ) != 0x03 ) ;		//等待数据指令读写状态准备好
	CD=1;
	WR=0;
	RD=1;
	Delay(1);
	DATA_IO=cmd;
	Delay(1);
	WR=1;
				}

//写命令2--单参数
void Write_Cmd_Single (uchar data1,uchar cmd)
{
	Write_Data (data1);
	Write_Cmd_Non (cmd);
							}

//写命令3--双参数
void Write_Cmd_Double (uchar data1,uchar data2,uchar cmd)
{
	Write_Data (data1);
	Write_Data (data2);
	Write_Cmd_Non (cmd);				
							}


//LCD初始化
void Lcd_Init (void)
{
	Write_Cmd_Double ( 0x00,0x00,0x40 );      	//设置文本显示区首地址为0x0000  	
  	Write_Cmd_Double ( 0x1e,0x00,0x41 );     	//设置文本显示区宽度为30字节(30*8=240)	
	Write_Cmd_Double ( 0x00,0x08,0x42 );      	//设置图形显示区首地址为0x0800
	Write_Cmd_Double ( 0x1e,0x00,0x43 );     	//设置图形显示区宽度为30字节
		
	Write_Cmd_Non 	 ( 0xa7 );                	//光标形状为8点(列)*N行,N的值为0-7H(参数中低半字节)
	Write_Cmd_Non	 ( 0x80 );                  //显示方式设置(使用内部CGROM,逻辑或合成)
	Write_Cmd_Non	 ( 0x9c );                  //设置显示开关,开文本显示 显示开关(开文本和图形显示方式,禁止光标显示和闪烁)
													}

void Lcd_Clr (void)
{
	uint t;
	Write_Cmd_Double ( 0x00,0x00,0x24 );
	Write_Cmd_Non	 ( 0xb0 );
	for	(t=0;t<0x2000;t++)
	{
		while( ( Read_State () & 0x0c ) != 0x0c ) ;	
		Write_Data (0x00);
														}
	Write_Cmd_Non	 ( 0xb2 );				
	Write_Cmd_Double ( 0x00,0x00,0x24 );
																		}


void Write_Eng(uchar add,uchar sentence[])
{
	uchar i;
	Write_Cmd_Non (0x94);						//应用文本显示 关图形显示 光标显示和光标闪烁
	Write_Cmd_Non (0x84);						//启用CGROM和文本属性

	Write_Cmd_Double ( add,0x00,0x24 );			//置显示地址
	for(i=0;i<strlen(sentence);i++)
	{
		Write_Cmd_Single ( sentence[i]-32,0xc0 );
		
													}

	Write_Cmd_Double ( add,0x08,0x24 );			//置显示地址   为文本属性
	for(i=0;i<strlen(sentence);i++)
	{
		Write_Cmd_Single ( 0x08,0xc0 );			//正显闪烁
												}
															}






void main( void )
{
	System_Init	();
 	Port_Init 	();
	Lcd_Init	(); 
	Lcd_Clr		();
		
	Write_Eng(0 ,"Hello! I'm Elbe! QQ:6036725   ");
	Write_Eng(60,"Hello! I'm Elbe! QQ:6036725   ");
	
	
	while(1);

						}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -