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

📄 1602zhuzi.txt

📁 小液晶1602驱动程序是一个不错的驱动程序,是经过了本人的实现可行的程序
💻 TXT
字号:
#include <iom8v.h>
#include <macros.h>

/*
#define RS PORTC0
#define RW PORTC1
#define EN PORTC2
#define LCD_DATA 0Xff
*/

#define RS 0
#define RW 1
#define EN 2
#define LCD_DATA 0Xff
#define PORT_DATA PORTD

void LCD_init ();
void LCD_en_write ();
void LCD_write_char(unsigned char com);
void LCD_wait_ready();
void LCD_set_xy(unsigned char x,unsigned char y);
void LCD_write_string (unsigned char X,unsigned char Y,unsigned char *s);
void delay_nus (unsigned int n);
void delay_nms (unsigned int n);


void delay_1nus()
{
 asm("nop");
}

void delay_nus(unsigned int n)
{
 unsigned int i;
 for(i=0;i<n;i++)
 delay_1nus();
}
void delay_1nms()
{
 unsigned int i ;
 for(i=0;i<1140;i++)
 ;
}
void delay_nms (unsigned int n)
{
 unsigned int i;
 for (i=0;i<n;i++)
 delay_1nms();
}

void LCD_wait_ready()   //LCD是否空闲
{
 unsigned int temp;
 DDRD=0X00;//===
 PORTB&=~(1<<RS);
 PORTB|=(1<<EN);
 PORTB|=(1<<RW);
 while((PIND&0x80)==0x80){;}
 PORTB&=~(1<<EN);
 DDRD=0Xff;//===
}

void LCD_en_write ()  //使能EN
{
	PORTB|=0X04;
	delay_nus(1);
	PORTB&=~0X04;
}

void LCD_write_char(unsigned char com)//写指令
 {
 LCD_wait_ready ();
 DDRD=0XFF;//===
 
 PORTB&=~(1<<RS);
 PORTB&=~(1<<RW);
 PORTD&=0x00;//===
 PORTD|=com;//===
 
 PORTB|=(1<<EN); 
 asm("nop");
 PORTB&=~(1<<EN);
 }
 void clear ()   //清屏
 {
 LCD_write_char(0x01);
 }
 void LCD_init()    //LCD初始化
 {
 	delay_nms(15);
 DDRB|=0X07;
 LCD_write_char(0x38);//配置16*2显示,5*7点阵,8位数据
 delay_nms(1);
  LCD_write_char(0x38);//配置16*2显示,5*7点阵,8位数据
 delay_nms(1);
  LCD_write_char(0x08);//关显示
 delay_nms(1);
  LCD_write_char(0x01);//清屏
 delay_nms(2);
 LCD_write_char(0x06);//读写字符后地址指针加1;
 delay_nms(2);//设置延时40us
 LCD_write_char(0x01);//开显示.不显示光标,光标不闪烁
 delay_nms(1);//设置延时40us
 }
 
 void LCD_writedata(unsigned char data)  //写数据
 {
 LCD_wait_ready ();
 DDRD=0XFF;//===
 
 PORTB|=(1<<RS);//写数据指令
 PORTB&=~(1<<RW);
  PORTD&=0x00;//===
 PORTD|=data;//===
 
  PORTB|=(1<<EN); 
 asm("nop");
 PORTB&=~(1<<EN);
 }
 
 void w_character(unsigned char character)
{
LCD_writedata(character);
}


void lcd_set_xy( unsigned char x, unsigned char y ) 
{ 
    unsigned char address; 
    if (y == 0)  
       address = 0x80 + x; 
    else  
        address = 0xc0 + x; 
    LCD_write_char(address);//一定需要检查忙信号,所以为1 
} 


 void display(unsigned char x,unsigned char y,unsigned char char_data)  //显示函数
 {
  	lcd_set_xy(x,y); 
   LCD_writedata(char_data); 
  }
  
 void display_string(unsigned char x,unsigned char y,unsigned char *ptr)//字符串显示
 {
  	  	lcd_set_xy(x,y); 
		 while (*ptr)
		 {
		 LCD_writedata(*ptr);
		 ptr++;
		 }
 }
 
 void main()
 {
 LCD_init();

   display(0,2,'o');
  
   while(1)
   {
   	;
   }
 }

⌨️ 快捷键说明

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