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

📄 text1.c

📁 用于单片机驱动LCD1602显示
💻 C
字号:
#include <reg51.h> 
#include <absacc.h> 
#include <stdio.h>
#define LCD_EN_PORT     PORTC 
#define LCD_RW_PORT     PORTC 
#define LCD_RS_PORT     PORTC 
#define LCD_DATA_PORT   PORTA 
#define LCD_DATA_DDR    DDRA 
#define LCD_DATA_PIN    PINA 

//LCD的 r/w 脚直接接 GND 
#define LCD_EN          0x80    //portd7         out 
#define LCD_RS          0x40    //portc6         out 
#define LCD_DATA        0xF0    //porta 4/5/6/7    out 

/*-------------------------------------------------------------------------------------------------- 
Public function prototypes 
--------------------------------------------------------------------------------------------------*/ 
void LCD_init          (void); 
void LCD_en_write      (void); 
void LCD_write_char    (unsigned command,unsigned ddata); 
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 LCD_init(void)        //液晶初始化 
{ 
delay_nms(15); 
DDRA |= LCD_DATA;    // 数据为输出 
DDRC |= LCD_RS | LCD_EN;   //置位RS.EN 

LCD_write_char(0x28,0);   //4位显示 
LCD_write_char(0x0c,0);   //显示开 
LCD_write_char(0x01,0);   //清屏 

delay_nms(60); 
} 

void LCD_write_string(unsigned char X,unsigned char Y,unsigned char *s) 
{ 
LCD_set_xy( X, Y ); //写地址 
    
while (*s) { 
     LCD_write_char( 0, *s ); 
    s ++; 
} 
} 
   
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, 0 ); 
} 

void LCD_en_write(void)   //液晶使能 
{ 
   LCD_EN_PORT |= LCD_EN; 
   delay_nus(1); 
   LCD_EN_PORT &= ~LCD_EN; 
} 
void LCD_write_char(unsigned command,unsigned ddata)// 写数据 
{ 
unsigned command_temp,data_temp; 

command_temp = command; 
data_temp = ddata; 
delay_nus(16); 

if(command == 0) { 
    LCD_RS_PORT |= LCD_RS;   //RS=1 
    LCD_DATA_PORT &= 0X0f; 
    LCD_DATA_PORT |= data_temp & 0xf0;   //写高四位 
    
    LCD_en_write(); 
    
    data_temp = data_temp << 4;   
    LCD_DATA_PORT &= 0X0f; 
    LCD_DATA_PORT |= data_temp & 0xF0;    //写低四位 
    
    LCD_en_write(); 
} 
else { 
    LCD_RS_PORT &= ~LCD_RS;    //RS=0 
    LCD_DATA_PORT &= 0X0f; 
    LCD_DATA_PORT |= command_temp & 0xF0; //写高四位 
    
    LCD_en_write(); 
    
    command_temp = command_temp << 4; 
    LCD_DATA_PORT &= 0x0F; 
    LCD_DATA_PORT |= command_temp & 0xF0;   //写低四位 
    
    LCD_en_write(); 
   } 
} 



int main(void) 
{ 

LCD_init(); 

LCD_write_string(0,0,"Hello,AVR WORLD!!!"); 
LCD_write_string(0,1,"hitro@tom.com"); 

while(1); 

} 
    /*----------------------------------------------------------------------- 
延时函数 
系统时钟:8M 
-----------------------------------------------------------------------*/ 
void delay_1us(void)                  //1us延时函数 
   { 
    asm("nop"); 
   } 

void delay_nus(unsigned int n)        //N us延时函数 
   { 
    unsigned int i=0; 
    for (i=0;i<n;i++) 
    delay_1us(); 
   } 
   
void delay_1ms(void)                  //1ms延时函数 
   { 
    unsigned int i; 
    for (i=0;i<1356;i++); 
   } 
   
void delay_nms(unsigned int n)        //N ms延时函数 
   { 
    unsigned int i=0; 
    for (i=0;i<n;i++) 
    delay_1ms(); 
   } 

⌨️ 快捷键说明

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