×
单片机 > 单片机程序设计 > 详情

ATMEGA128的1602LCD显示驱动程序

发布时间:2020-08-25 发布时间:
|

本实验开发板的电源选择5V。

单片机源程序:

//ATMEGA128的1602型LCD显示驱动程序

//编译环境 ICCAVR 7.16A

//系统时钟7.3728MHZ,设置熔丝位为外部高频石英晶体振荡,启动时间4.1ms

//忠兴电子元件店编辑

//日期:2010.01.14


//***********************************************************************

//                        包含文件

//***********************************************************************


#include

#include

#include

#include


#define uchar unsigned char

#define uint  unsigned int


#define RS_CLR        PORTF &= ~(1 << PF1)                 //RS置低

#define RS_SET        PORTF |= (1 << PF1)                  //RS置高


#define RW_CLR        PORTF &= ~(1 << PF2)                 //RW置低

#define RW_SET        PORTF |= (1 << PF2)                  //RW置高


#define EN_CLR        PORTF &= ~(1 << PF3)                 //E置低

#define EN_SET        PORTF |= (1 << PF3)                  //E置高


#define Data_IO                PORTA                //液晶数据口

#define Data_DDR        DDRA                 //数据口方向寄存器

#define D_LE0                PORTD &= ~(1 << PD4) //数码管段控制位为0,锁存端口数据

#define D_LE1           PORTD |= (1 << PD4)  //数码管段控制位为1,锁存器输出与端口一致

#define W_LE0                PORTD &= ~(1 << PD5) //数码管位控制位为0

#define W_LE1           PORTD |= (1 << PD5)  //数码管位控制位为1


//*************************************************************************

//                        初始化子程序

//*************************************************************************

void system_init()

{


        Data_IO = 0xFF;                                        //电平设置

        Data_DDR = 0xFF;                                        //方向输出

        PORTF = 0xFF;                       //电平设置

        DDRF = 0xFF;                        //方向输出

    PORTD=0xFF;

        DDRD=0xFF;

        D_LE1;                             //关掉数码管,以免显示乱码                  

    W_LE1;                     

    Data_IO=0xFF;                      //关数码管            

    W_LE0;

}


//***********************************************************************

//        显示屏命令写入函数

//***********************************************************************



void LCD_write_com(unsigned char com)

{       

        RS_CLR;

        RW_CLR;

        EN_SET;

        Data_IO = com;

        delay_nms(5);

        EN_CLR;

}

//***********************************************************************

//        显示屏数据写入函数

//***********************************************************************


void LCD_write_data(unsigned char data)

{

        RS_SET;

        RW_CLR;

        EN_SET;

        Data_IO = data;

        delay_nms(5);

        EN_CLR;

}

//***********************************************************************

//        显示屏清空显示

//***********************************************************************


void LCD_clear(void)

{

        LCD_write_com(0x01);

        delay_nms(5);

}

//***********************************************************************

//        显示屏字符串写入函数

//***********************************************************************


void LCD_write_str(unsigned char x,unsigned char y,unsigned char *s)

{

       

    if (y == 0)

    {

            LCD_write_com(0x80 + x);

    }

    else

    {

            LCD_write_com(0xC0 + x);

    }


    while (*s)

    {

            LCD_write_data( *s);

            s ++;

    }

}

//***********************************************************************

//        显示屏单字符写入函数

//***********************************************************************


void LCD_write_char(unsigned char x,unsigned char y,unsigned char data)

{

       

    if (y == 0)

    {

            LCD_write_com(0x80 + x);

    }

    else

    {

            LCD_write_com(0xC0 + x);

    }


    LCD_write_data( data);  

}

//***********************************************************************

//        显示屏初始化函数

//***********************************************************************


void LCD_init(void)

{

        DDRA = 0xFF;                                        //I/O口方向设置

        DDRA |= (1 << PA5) | (1 << PA6) | (1 << PA7);

        LCD_write_com(0x38);                                //显示模式设置

        delay_nms(5);

        LCD_write_com(0x08);                                //显示关闭

        delay_nms(5);

    LCD_write_com(0x01);                                //显示清屏

        delay_nms(5);

    LCD_write_com(0x06);                                //显示光标移动设置

        delay_nms(5);

        LCD_write_com(0x0C);                                //显示开及光标设置

    delay_nms(5);

}


//*************************************************************************

//                        主程序

//*************************************************************************

void main(void)

{


        unsigned char i;

        unsigned char *p;

        system_init();                                //系统初始化,设置IO口属性

        delay_nms(100);                                //延时100ms

        LCD_init();                                   //液晶参数初始化设置


while (1)

   {

                i = 1;

                p = "zhongxingdianzi";                     //字符串输出显示




…………



关键字:ATMEGA128  1602LCD  显示驱动 

『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多