ATMEGA128的1602LCD显示驱动程序

发布者:tau29最新更新时间:2019-10-22 来源: 51hei关键字:ATMEGA128  1602LCD  显示驱动 手机看文章 扫描二维码
随时随地手机看文章

本实验开发板的电源选择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  显示驱动 引用地址:ATMEGA128的1602LCD显示驱动程序

上一篇:基于AVR单片机的多功能智能小车系统设计
下一篇:AVR单片机高精度延时程序汇编语言 可以直接使用

推荐阅读最新更新时间:2024-11-01 18:21

基于Atmega128单片机无人车控制系统电路设计
该方案可广泛应用于短途货运客运、应急救援、恶劣环境下自动作业等领域。智能无人车是一种履带式移动机器人,目前市场上的无人车大多采用单片机对其进行控制,其优点是体积小,成本低,结构简单,但仅仅依靠单片机远不能使无人车在复杂多变的工作环境中进行及时调整,并且极大地限制了其功能的扩展。基于此不足,本设计主要利用PC机与无人车的无线通信,使无人车在PC机无线指令下完成前进、后退、转弯、打击、生命值显示、调速和自动行驶等功能,并通过车载摄像头实时获取无人车所处环境信息,实现了远程监控。在执行任务时,如遭遇敌方车辆干扰通信,无人车在抵御干扰信号同时进行敌我识别,适时作出反击。 无人车系统工作原理为:打开教学无人车电源时,Atmega128单
[单片机]
基于<font color='red'>Atmega128</font>单片机无人车控制系统电路设计
基于ATSHA204的密钥认证系统设计
简介:当前电子系统的设计成本越来越高,PCB抄板却变得容易,Flash中的程序也容易被拷贝出来,整个电子产品系统被克隆的几率变得越来越大。针对这种现象,设计了一种基于Atmel公司ATSHA204的嵌入式密钥认证系统。首先对ATSHA204进行简单的介绍,然后阐述了其中的关键算法SHA-256,并进行了软件测试,最后使用ATmega128平台对SD卡进行读取,验证了整个认证系统。 摘要:当前电子系统的设计成本越来越高,PCB抄板却变得容易,Flash中的程序也容易被拷贝出来,整个电子产品系统被克隆的几率变得越来越大。针对这种现象,设计了一种基于Atmel公司ATSHA204的嵌入式密钥认证系统。首先对ATSHA204进行简单的
[单片机]
基于ATSHA204的密钥认证系统设计
采用ATmega128的无线数据采集设计
电力日益市场化的环境下,电力公司必须提高服务质量以保持竞争力。当前我国的一些地区,配网自动化程度低,人员工作效率低。根据这种需求,设计了无线数传系统.整个无线数据通信系统是基于RS-485串口通信的一点对多点网络结构。数传电台每站点设一部,分别连接主站的数据采集工作站和分站的RTU/FTU等,进行轮询通信。各分站作业数据上报以及数采工作站的控制指令下行传输都通过无线方式完成。 1 设计思想 数据采集单元采用先进的ATmega128嵌入式单片机作为核心部件,利用RS-485通信接口与控制系统通信。测量站主要是将捕捉的现场信号经转换器ADC采样、量化、编码后,变成数字信号传给微处理器,接收遥控指令并发送数据;主控站的主要工作是发
[单片机]
采用<font color='red'>ATmega128</font>的无线数据采集设计
中断应用设计要点
AVR的中断源比较多,尤其是ATmega128,一共有35个外部以及内部中断源。通常情况下,Flash程序存储器空间的最低位置(0x0000-0x0045)定义为复位和中断向量空间。完整的中断向量见第二章表 2-23。在中断向量表中,处于低地址的中断向量所对应的中断拥有高优先级,所以,系统复位RESET拥有最高优先级。 A.中断设计注意点: 1.具备Bootloader功能的AVR,其中断向量区可以在Flash程序存储器空间最低位置和Bootloader区的头部来回迁移,这主要用于配合Bootloader程序的应用。如果不使用Bootloader功能,一般不要中断向量区进行迁移。 2.Flash较小的AVR芯片,其一个中断向
[单片机]
C3065 BCD-七段译码液晶显示驱动器的应用
C3065 BCD-七段译码液晶显示驱动器功耗低微,在25度条件下仅几十微安,工作电压范围为4~18V,采用交流驱动,可直接驱动液晶显示屏.C306的管脚外引线排列和功用如图所示,C306的功能真值表如9.42表所示.                   显示.
[电源管理]
C3065 BCD-七段译码液晶<font color='red'>显示驱动</font>器的应用
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved