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

📄 lcd_12864.h

📁 ID卡读卡器源程序 用Mega32通过U2270B读取H4001RFID卡号的范例
💻 H
字号:
/******************************************************************************************************************
程序名:      LCD头文件
功能概述:
			 LCD头文件  适用于ST7920主控芯片的128*64LCD
引脚连接:	 DB0---DB7=PORTB
			 RS-------=PD4
			 RW-------=PD5
			 EN-------=PD6	 	 
			 PSB------=VCC
			 VO-------=GND
MCU类型:     ATmega16
晶振频率:    7.3728MHZ
版本:	     V0.1
编程:        于军峰
编译日期:    2007-05-01
******************************************************************************************************************/
#ifndef _LCD_H
#define _LCD_H
#define uchar unsigned char 
#define uint  unsigned int
#define ulong unsigned long
//*****************************************************************************************************************
#define RS_0 PORTD&=~(1<<PD4)
#define RS_1 PORTD|= (1<<PD4)
#define RW_0 PORTD&=~(1<<PD5)
#define RW_1 PORTD|= (1<<PD5)
#define EN_0 PORTD&=~(1<<PD6)
#define EN_1 PORTD|= (1<<PD6)
#define DATA_OUT    PORTB
#define BUSY_CHECK  PINB7
//*****************************************************************************************************************

//*****************************************************************************************************************
void check_busy(void);
void write_com(uchar cmdcode);
void write_data(uchar Dispdata);
void lcd_reset(void);
void han_zi_display(uchar *s);
void delay_ms(uint m);
void delay_3_us(uint n);       //N us延时函数
//***********************************************显示字符串********************************************************
void han_zi_display(uchar *s)
{ 
	while(*s>0)
	{  
		write_data(*s);
		s++;
	}
}
//***********************************************检查忙位**********************************************************
void check_busy(void)
{  
	
	RS_0;
	delay_3_us(100);
	RW_1;
	delay_3_us(170);
	DATA_OUT=0xff;
	EN_1;
	while((BUSY_CHECK&0x80)!=0);
	EN_0;
}
//****************************************************写命令到LCD**************************************************
void write_com(uchar cmdcode)
{
	check_busy();
	RS_0;
	RW_0;
	EN_1;
	DATA_OUT=cmdcode;
	delay_3_us(1);
	EN_0;
	delay_3_us(1);
}
//****************************************************写数据到LCD**************************************************
void write_data(uchar Dispdata)
{
	check_busy();
	RS_1;
	RW_0;
	EN_1;
	DATA_OUT=Dispdata;
	delay_3_us(1);
	EN_0;
	delay_3_us(1);
}
//****************************************************初始化LCD屏**************************************************
void lcd_reset(void)
{  
	delay_ms(60);
	write_com(0x30);
	delay_3_us(200);		//选择基本指令集
	write_com(0x30);		//选择8bit数据流
	delay_3_us(200);
	write_com(0x0c);		//开显示(无游标、不反白)
	delay_3_us(200);
	write_com(0x01);       //清除显示,并且设定地址指针为00H
	delay_3_us(200);
	write_com(0x06);       //指定在资料的读取及写入时,设定游标的移动方向及指定显示的移位
	delay_3_us(200);
} 
//*****************************************************************************************************************
//***********************************************延时子程序********************************************************
//************************************** N-us延时,最小3us,最大65.6MS  ********************************************

//适用机型    :用于AVR系列单片机延时处理,7.3728MHZ晶振下
//变量定义类型:unsigned int
//最小延时时间:即N=0时为3us;  
//增量:		  1us
//最大延时时间:3us+(65535*1us)=65538us
//例如:	i=0为3us;i=1为4us;i=2为5us..........................

//延时间间=3us+N
void delay_3_us(uint n)       //N us延时函数
{
	for(;n>0;n--)					//延时基数为3us加上 n
	{
		asm("nop");
		asm("nop");
	}											
}
//注意:N为UINT
//*****************************************************************************************************************
//****************************************** N-ms延时,最小1ms,最大65.5s  *****************************************
//适用机型    :用于AVR系列单片机延时处理,7.3728MHZ晶振下
//变量定义类型:unsigned int
//最小延时时间:即m=1时为1ms;  m不能为0,否则延时时间增长不成比例(注意:m=0时,延时=6.24us的区别)

//增量:		1ms
//最大延时时间:65535*1ms=65.535s
//例如:	m=1/1ms;m=2/2ms..........................
//延时间间=m*1ms 
void delay_ms (unsigned int m)						//Nms延时
{
	uint n;
	extern uchar kk;
	for(;m>0;m--)
		for(n=1229;n>0;n--)
		{
			WDR();									//喂狗
		}
}
//unsigned int m不能为空,如1ms就写delay_ms(1);依次类推
//*****************************************************************************************************************
#endif
//**************************************************Program End****************************************************

⌨️ 快捷键说明

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