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

📄 jhdavrok.c

📁 JHD529液晶的驱动程序,AVR单片机中使用GCC-AVRStudio
💻 C
字号:
#include <avr/io.h>
//#include <intrins.h>
#include <string.h>
/*
//本程序为ST7920驱动
sbit RST = P2^0;//RESET
sbit EN  = P2^1;//E
sbit RW  = P2^2;//R/W
sbit RS  = P2^3;//RS
#define  DATA   P0
*/
#define JHD_IO PORTA
#define JHD_PIN PINA
#define JHD_IODDR DDRA

#define JHD_Ctrl PORTC
#define JHD_RST PC0
#define JHD_EN PC1
#define JHD_RW PC2
#define JHD_RS PC3

/*
#define clr_LCD12864_RST LCD12864_Ctrl &= ~_BV(LCD12864_RST);
#define set_LCD12864_RST LCD12864_Ctrl |= _BV(LCD12864_RST);
#define clr_LCD12864_EN  LCD12864_Ctrl &= ~_BV(LCD12864_EN);
#define set_LCD12864_EN  LCD12864_Ctrl |= _BV(LCD12864_EN);
#define clr_LCD12864_RW  LCD12864_Ctrl &= ~_BV(LCD12864_RW);
#define set_LCD12864_RW  LCD12864_Ctrl |= _BV(LCD12864_RW);
#define clr_LCD12864_DIN LCD12864_Ctrl &= ~_BV(LCD12864_DIN);
#define set_LCD12864_DIN LCD12864_Ctrl |= _BV(LCD12864_DIN);
*/
#define clr_RST JHD_Ctrl &= ~_BV(JHD_RST);
#define set_RST JHD_Ctrl |= _BV(JHD_RST);
#define clr_EN  JHD_Ctrl &= ~_BV(JHD_EN);
#define set_EN  JHD_Ctrl |= _BV(JHD_EN);
#define clr_RW  JHD_Ctrl &= ~_BV(JHD_RW);
#define set_RW  JHD_Ctrl |= _BV(JHD_RW);
#define clr_RS  JHD_Ctrl &= ~_BV(JHD_RS);
#define set_RS  JHD_Ctrl |= _BV(JHD_RS);

unsigned char LCD_addr[4][8]=
{
{0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87},
{0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97},
{0x88,0x89,0x8a,0x8b,0x8c,0x8d,0x8e,0x8f},
{0x98,0x99,0x9a,0x9b,0x9c,0x9d,0x9e,0x9f}
};


void InitLcd(void);
void WriteData(unsigned char ch);
void WriteCmd(unsigned char ch);
void ShowASC(unsigned char x,unsigned char *p);
void ShowChinese(unsigned char x,unsigned char *p);
void ShowStr(unsigned char x,unsigned char y,unsigned char *p);
void ShowChar(unsigned char x,unsigned char y,unsigned char ch);
unsigned char ReadRAM(unsigned char x,unsigned char y);
void ClrDGRAM(void);
void PaintPoint(unsigned char x,unsigned  char y);


int main()
{
	 unsigned int i;
	 DDRA=0xff;
	 PORTA=0xff;
	DDRC=0xff;
	 PORTC=0xff;
	 InitLcd();		  
	// ClrDGRAM();
	
	  
     while(1)
	 {	 	 
	 	
	 	//PaintPoint(1,1); 
		ShowStr(0,2,"江西师范大学物理与通信电子学院");
		 for(i=0;i<60000;i++);		  
	 }
}

void InitLcd(void)
{     
     clr_RST;
    // wait_5ms();
	 set_RST;
	 //wait_5ms();
	 //wait_5ms();
	 WriteCmd(0x30);	//功能设定,8位接口,基本指令集
	 //WriteCmd(0x34);	//功能设定,8位接口,基本指令集
	 WriteCmd(0x0c);   //开显示
	 WriteCmd(0x01);   //清屏
     WriteCmd(0x02);   //进入设定点
	
	// WriteCmd(0x80);
}
void LCDBusy(void)
{	
	JHD_IODDR=0x00;//输入法
	while(1)
	{
		
		clr_RS;
		set_RW;
		set_EN;		
		if(!(JHD_PIN & 0x80))break; 
		clr_EN;
	}
	JHD_IODDR=0xff;
}

void WriteData(unsigned char ch)
{
     LCDBusy();
     //EN = 0;
     set_RS;  	//写数据
     clr_RW;
    // _nop_();
     set_EN;
     JHD_IO = ch;
	 //_nop_();
     clr_EN;
     clr_RS;
}
/*
unsigned char Readdata(unsigned char ch)
{
	
}	 */

void WriteCmd(unsigned char ch)
{
     LCDBusy();
     //EN = 0;
     clr_RS;
     clr_RW;
  //   _nop_();
     set_EN;
     JHD_IO = ch;
//	 _nop_();
     clr_EN;
}
/*
void ShowChar(unsigned char x,unsigned char y,unsigned char ch)
{
	if((x%2)==0)
	{
	  WriteCmd(LCD_addr[y][x/2]);
	  
	} else
		{
			ReadRAM((x+1)/2,y);
		//	WriteCmd(LCD_addr[y][x/2]);
		}
	 WriteData(ch); 
}  
*/
/*
void ShowASC(unsigned char x,unsigned char *p)
{
	unsigned char i;
	i=strlen(p);
	while(i--)
	{
		WriteCmd(0x90+x);
		WriteData(*p);
		p++;
	//	x++;
		//WriteCmd(0x90+x);
		WriteData(*p);
		p++;
		x++;	
	}
}
void ShowChinese(unsigned char x,unsigned char *p)
{
	unsigned char i;
	i=strlen(p);
	i/=2;
	while(i--)
	{	 		
	 	WriteCmd(0x80+x);
	 	WriteData(*p);
	 	p++;
	 	WriteData(*p);
	 	p++;
		x++;		

	}
}	 */
void ShowStr(unsigned char x,unsigned char y,unsigned char *p)
{
	unsigned char i;
	i=strlen(p);
	i/=2;
	while(i--)
	{	
		if(x>=8)
		{
			y++;
			x=0;
		}
		if(y>=4)break;
		WriteCmd(LCD_addr[y][x]);
		WriteData(*p);
		p++;
		WriteData(*p);
		p++; 
		x++;
				
	}
}
void ClrDGRAM(void)
{

         unsigned char i,j;
        
         
         for(i=0;i<64;i++)  
         {		 WriteCmd(0x34);
                 WriteCmd(0x80|i);
                 WriteCmd(0x80);  
                 for(j=0;j<16;j++)    
                 {   
				 	 //WriteCmd(0x34);                  
                     WriteData(0);
                     WriteData(0); 
					 WriteCmd(0x36);
                 }
         }
		 WriteCmd(0x36);
		 WriteCmd(0x30);
}
void PaintPoint(unsigned char x,unsigned char y)
{
		//WriteCmd(0x01);
		WriteCmd(0x34);
		//WriteCmd(0x36);
		WriteCmd(0x80+x);
		WriteCmd(0x80+y);
		WriteData(1);
		WriteData(0);
		WriteCmd(0x36);

		WriteCmd(0x30);
}

⌨️ 快捷键说明

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