ATMEGA128的1602LCD显示驱动程序

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  显示驱动 编辑:什么鱼 引用地址:http://news.eeworld.com.cn/mcu/ic477947.html 本网站转载的所有的文章、图片、音频视频文件等资料的版权归版权所有人所有,本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如果本网所选内容的文章作者及编辑认为其作品不宜公开自由传播,或不应无偿使用,请及时通过电子邮件或电话通知我们,以迅速采取适当措施,避免给双方造成不必要的经济损失。

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

关注eeworld公众号 快捷获取更多信息
关注eeworld公众号
快捷获取更多信息
关注eeworld服务号 享受更多官方福利
关注eeworld服务号
享受更多官方福利

推荐阅读

Atmega32A驱动LCD1602显示屏
void LCD1602_WriteCmd(uchar cmd);void LCD1602_CursorPosition(uchar x,uchar y);//将液晶的坐标移动到指定的位置void LCD1602_WriteChar(uchar x,uchar y,uchar ucData);//在指定的位置上显示一个字符串;void LCD1602_WriteString(uchar x,uchar y,uchar *Str);//在液晶上显示字符串#endif
发表于 2019-11-11
Atmega32A驱动LCD1602显示屏
ATMEGA16L实现时间和温度的循环显示程序分享
//ICC-AVR application builder : 2/13 20:52:33/******************************************************************************** 版权:     ** 单片机:   ATMAGE16L* 晶振:     外部8MHz* 编译器:   ICC 7.22** 文件名:   main.c* 作者:     木子工作室* 版本:     1.0* 完成日期: * 功能描述: 在12M晶振下,
发表于 2019-11-09
基于ATmega128单片机的红外控制电机系统源码
单片机源程序如下:#include "Main.h"SIGNAL(SIG_OVERFLOW0) //中断每1秒发一个数{                TCNT0 = 200;         TIMSK &= ~_BV(TOIE0);  //TIMSK中TOIE0置0        if(++g_bCount>1)        {     
发表于 2019-11-09
AVR stdio写的ATMEGA16控制步进电机正反转和速度
AVR stdio写的ATMEGA16控制步进电机正反转和速度,供大家免费参阅和批评适合初学者,总共七个按键  三个按键控制三个速度正转,三个按键控制三个速度反转,一个按键控制停止。本程序控制步进电机是和步进电机驱动器相连接的,所以脉冲只有一路,如果想直接连步进电机只需要稍加改动即可。 主程序预览:#define F_CPU 800000UL#include <avr/io.h>#include <util/delay.h>#define INT8U unsigned int#define INT16U unsigned intconst INT8U FFW[]={0x01
发表于 2019-11-09
AVR stdio写的ATMEGA16控制步进电机正反转和速度
atmega16与24l01按键主程序
#include<avr/io.h>#include<avr/delay.h>#include"NRF24L01.h"//#define Open_TX#define Open_RXtypedef unsigned char  uint8;                   /* defined for unsigned 8-bits integer variable     无符号8位整型变量 &n
发表于 2019-11-08
ATmega8+PT100热敏电阻+AD824S proteus仿真与源程序
pt100热敏电阻+AD824S放大并由ATmega8单片机主控的测温系统仿真原理图如下ATmega8单片机源程序如下:/*****************************************************This program was produced by theCodeWizardAVR V2.03.4 StandardAutomatic Program Generator?Copyright 1998-2008 Pavel Haiduc, HP InfoTech s.r.l.Project : Version : Date    
发表于 2019-11-08
ATmega8+PT100热敏电阻+AD824S proteus仿真与源程序
小广播
何立民专栏 单片机及嵌入式宝典

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

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