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

📄 1602._h

📁 AVR单片机(Atmega16)的PS2键盘驱动程序
💻 _H
字号:
 #include <iom16v.h>
 #include <macros.h>
 #include <delay.h>
 
 /********************************************
 液晶 LCD1602  4条数据线(D4~D7)
 编译器:ICC-AVR v6.31A 日期: 2007-4-7 下午
 目标芯片 : ATmega16
 时钟: 8.0000Mhz
 下面是AVR与LCD连接信息
 PA2 ->RS
 PA3 ->EN
 地  ->RW
 PA4 ->D4
 PA5 ->D5
 PA6 ->D6
 PA7 ->D7
 *********************************************/
 
 #define uchar unsigned char
 
 #define C_On_B_On   0x0F  //光标开,闪烁
 #define C_On_B_Off  0x0E  //光标开,不闪烁
 #define C_Off_B_On  0x0D  //光标关,闪烁
 #define C_Off_B_Off 0x0C  //光标关,不闪烁  
 
 #define EN_PORT PORTA
 #define EN_DDR  DDRA
 #define RS_PORT PORTA
 #define RS_DDR  DDRA
 
 #define DATA_OUT PORTA
 #define DATA_DDR  DDRA
 #define DATA_IN  PINA
 
 #define LCD_EN  (1<<PA3)
 #define LCD_RS  (1<<PA2)  
 #define LCD_DATA ((1<<PA4)|(1<<PA5)|(1<<PA6)|(1<<PA7)) 
 
 #define Set_RS_0 RS_PORT&=~LCD_RS   
 #define Set_RS_1 RS_PORT|=LCD_RS
 #define Set_EN_0 EN_PORT&=~LCD_EN
 #define Set_EN_1 EN_PORT|=LCD_EN
 
 /*****************************
  功能:EN下降沿写指令及数据
  *****************************/
 void LCD_Write(void)
 {Set_EN_1;
  delay_1us();
  Set_EN_0;    
 }
 /*****************************
  功能:写指令
 *****************************/
 void LCD_WriteC(uchar cmd)
 {delay_nus(20);
  Set_RS_0;
  DATA_OUT&=0x0F;   // 清高四位 
  DATA_OUT|=cmd&0xF0; //写高四位
  LCD_Write();
  cmd=cmd<<4;
  DATA_OUT&=0x0F;   // 清高四位 
  DATA_OUT|=cmd&0xF0; //写低四位
  LCD_Write();
 }
 /****************************
  功能:写数据
 ****************************/ 
 void LCD_WriteD(uchar data)
 {delay_nus(20);
  Set_RS_1;
  DATA_OUT&=0x0F;   // 清高四位 
  DATA_OUT|=data&0xF0; //写高四位
  LCD_Write();
  data=data<<4;
  DATA_OUT&=0x0F;   // 清高四位 
  DATA_OUT|=data&0xF0; //写低四位
  LCD_Write();
 }
 /*************************************
  功能:设置位置坐标 
  LCD第一行显示寄存器地址:0x80-0x8F
  LCD第一行显示寄存器地址:0xC0-0xCF
  输入:X:0-15,y:1-2
 **************************************/
 void LCD_SetXY(uchar x,uchar y)  
 {uchar add;
  y++;
  x=x%16;y=y%2;
  if(y==0)     add=0x80+x;
  else		   add=0xC0+x;
  LCD_WriteC(add);
 } 
 /************************************
  功能:在(x,y)处显示字符
 *************************************/
 void LCD_Write_Char(uchar x,uchar y,uchar i)
 {LCD_SetXY(x,y);
  LCD_WriteD(i);
 }
 /***********************************
  功能:在(x,y)处开始显示字符串
 ************************************/
 void LCD_Write_String(uchar x,uchar y, uchar *s)
 {LCD_SetXY(x,y);
  while(*s){
  	LCD_WriteD(*s);
	s++;}
 }
 /************************************
  功能:LCD初始化
 *************************************/ 
 void LCD_Init(void)
 {DATA_DDR|=LCD_DATA;  //数据口方向:输出
  RS_DDR|=LCD_RS;     //RS口方向:输出
  EN_DDR|=LCD_EN;     //EN口方向:输出
  LCD_WriteC(0x28);  //4位总线接口,两行显示
  LCD_Write();       // !! 此处需要一个下降沿!!!!!! 
  LCD_WriteC(0x28);  //!!! 此处需要两个0x28!!!!!!!!
  LCD_WriteC(C_Off_B_Off);  //开显示,设置光标与闪烁开关  
  LCD_WriteC(0x01);  //清屏
  delay_nms(2);    //指令执行时间:1.64ms
  LCD_SetXY(0,1);
 }  

⌨️ 快捷键说明

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