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

📄 1602driver.c

📁 LPC2148控制tea5767收音模块的收音机的完整源程序
💻 C
字号:
/****************************************Copyright (c)**************************************************
**                               Guangzou ZLG-MCU Development Co.,LTD.
**                                      graduate school
**                                 http://www.zlgmcu.com
**
**--------------File Info-------------------------------------------------------------------------------
** File name:			main.c
** Last modified Date:  2004-09-16
** Last Version:		1.0
** Descriptions:		The main() function example template
**
**------------------------------------------------------------------------------------------------------
** Created by:			Chenmingji
** Created date:		2004-09-16
** Version:				1.0
** Descriptions:		The original version
**
**------------------------------------------------------------------------------------------------------
** 	rs	<-->	p0.2
** 	rw	<-->	p0.3
** 	e	<-->	p0.4
** 	d0-d7<-->	p1.16-p1.23
********************************************************************************************************/
#include "config.h"
//#include "1602driver.h"
/***************************/
/***  管脚定义及宏定义 *****/
/***************************/
#define rs 1<<4
#define set_rs() IO0SET=rs;
#define clr_rs() IO0CLR=rs;

#define rw 1<<5
#define set_rw() IO0SET=rw;
#define clr_rw() IO0CLR=rw;

#define en 1<<6
#define set_e() IO0SET=en;
#define clr_e() IO0CLR=en;

#define d  0xff<<16
#define dd 0xff00ffff

/**************************/
/******  函数声明 *********/
/**************************/
void delay_ms(uint8 time);
void read_state(void);
void write_command(uint8 command);
void write_data(uint8 data);
void goto_xy(uint8 x,uint8 y);
uint8 strlen(uint8 *str);
/**************************/
void lcd_init(void);							//液晶初始化
void display_clear(void);						//清屏
void display_a_char(uint8 x,uint8 y, uint8 it); //在第x列y行显示一个字符
void display_string(uint8 x,uint8 y,uint8 *str);//在第x列y行显示一个字符串
void display_num(uint8 x,uint8 y,float num);    //在第x列y行显示数字,范围:10.0-999.9
void save_cgram(uint8 *cg,uint8 n);				//将字模写进cgram里,cg指向字模地址,n代表字模所存cgram的位置
void display_cgram(uint8 x,uint8 y,uint8 n);	//在第x列y行显示第n个位置所存的字模

/*****字符串定义*********/
/*uint8 string[]="string";
uint8 cg1[]={0x08,0x0f,0x12,0x0f,0x0a,0x1f,0x02,0x02};
uint8 cg2[]={0x0f,0x09,0x0f,0x09,0x0f,0x09,0x11,0x00};
uint8 cg3[]={0x1f,0x11,0x11,0x1f,0x11,0x11,0x1f,0x00};*/

/***************************/
/****** 函数定义 ***********/
/***************************/
/******延时函数*******/
void delay_ms(uint8 time)
{
	uint16 i;
	for(;time>0;time--)
		for(i=200;i>0;i--);//for(i=3680;i>0;i--);
}

/******读状态********/
void read_state(void)
{
/*	uint8 state;
	
	IO1DIR=IO1DIR&dd;
	clr_rs();
	set_rw();
	clr_e();
	
	state=(IO1PIN&d)>>16;
	
	set_e();
	clr_e();
	while(state&0x08);
*/	
	
	delay_ms(100);
}
/******写命令********/
void write_command(uint8 command)
{
	read_state();
	IO1DIR=IO1DIR|d;
	clr_rs();
	clr_rw();
	clr_e();
	
	IO1CLR=d;
	IO1SET=command<<16;
	
	set_e();
	clr_e();
}
/******写数据*******/
void write_data(uint8 data)
{
	read_state();
	IO1DIR=IO1DIR|d;
	set_rs();
	clr_rw();
	clr_e();
	
	IO1CLR=d;
	IO1SET=data<<16;
	
	set_e();
	clr_e();
}
/*****定位********/
void goto_xy(uint8 x,uint8 y)
{
	uint8 xx,yy;
	uint8 address;
	xx=x&0x0f;
	yy=y&0x01;
	if(yy)
		address=0xc0+xx;
	else
		address=0x80+xx;
	write_command(address);
}
/***计算字符串长度***/
uint8 strlen(uint8 *str)
{
	uint8 i;
	i=0;
	while(*str++)
	{
		i++;
	}
return i;
}

/***********************************************/
/*****初始化********/
void lcd_init(void)
{
	PINSEL0=PINSEL0&0xffffc0ff;
	PINSEL2=PINSEL2&(~0x08);
	IO0DIR=IO0DIR|rs
				 |rw
				 |en;
				 
	IO1DIR=IO1DIR|d;
	
	
	delay_ms(100);
	
	write_command(0x38);
	write_command(0x38);
	write_command(0x38);
	
	write_command(0x38);
	write_command(0x08);
	write_command(0x01);
	write_command(0x06);
	write_command(0x0c);
	
	write_command(0x01);
	delay_ms(100);

}
/*****清屏*****/
void display_clear(void)
{
	write_command(0x01);
}

/*****显示一个字符****/
void display_a_char(uint8 x,uint8 y, uint8 it)
{
	goto_xy(x,y);
	write_data(it);
}
/*****显示字符串*****/
void display_string(uint8 x,uint8 y,uint8 *str)
{
	uint8 i,tmp;
	i=strlen(str);
	tmp=i+x;
	if (tmp>16)
	{
		for(;x<16;x++)
		{
			display_a_char(x,y,*str++);
		}
		x=0;
		y=y+1;
		goto_xy(x,y);
		delay_ms(100);
		for(;tmp>16;tmp--)
		{
			display_a_char(x,y,*str++);
			x++;
		}
	}
	else
	{
		for(;i>0;i--)
		{
			display_a_char(x,y,*str++);
			x++;
		}
	}
}
/*****显示数字******/
void display_num(uint8 x,uint8 y,float num)
{
	uint8 tmp1,tmp2,tmp3,tmp4,tmp5;
	uint16 tmp;
	tmp=(uint16)(num*10);
		tmp1=tmp/1000;
		tmp2=(tmp/100)%10;
		tmp3=(tmp/10)%10;
		tmp4='.';
		tmp5=tmp%10;
		if(tmp1!=0)
		{
		    display_a_char(x,y,tmp1+'0');
	    	display_a_char(x+1,y,tmp2+'0');
		    
		}
		if(tmp2!=0)
	    	display_a_char(x+1,y,tmp2+'0');
	    display_a_char(x+2,y,tmp3+'0');
	    display_a_char(x+3,y,tmp4);
	    display_a_char(x+4,y,tmp5+'0');
}
/******将字模写进cgram****/
void save_cgram(uint8 *cg,uint8 n)
{
	uint8 i,nn,command;
	nn=n&(0x07);
	command=0x40+(nn)*(0x08);
	write_command(command);
	delay_ms(100);
	for(i=0;i<7;i++)
	{
		write_data(cg[i]);
		delay_ms(100);
	}	
	delay_ms(100);
}
/******从cgram读出字符****/
void display_cgram(uint8 x,uint8 y,uint8 n)
{
	goto_xy(x,y);
	delay_ms(100);
	write_data(n);
	delay_ms(100);

}

/***************************/
/***************************/
/***************************/
/*int main (void)
{
	lcd_init();
	save_cgram(cg1,0);
	save_cgram(cg2,1);
	save_cgram(cg3,2);
	display_cgram(1,1,0);
	display_cgram(2,1,1);
	display_cgram(3,1,2);
    return 0;
}*/
/*********************************************************************************************************
**                            End Of File
********************************************************************************************************/

⌨️ 快捷键说明

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