12864(ICCAVR程序)

发布者:吾道明亮最新更新时间:2017-12-19 来源: eefocus关键字:ICC  AVR程序 手机看文章 扫描二维码
随时随地手机看文章

*=======================================================
20x4字符液晶主程序,编译软件(ICCAVR_6.31)
CPU内部晶振8M
数据线B0~B7接PORTB, E="D7" RW="D6" RS="D5"
========================================================


接线图如下:
_______________           ______________
               |      --1|GND           |
               |      --2|+5V           |
               |      --3|V0            |
               |         |              |
            PD5|--------4|RS            |
            PD6|--------5|RW            |
            PD7|--------6|E             |
 CPU           |         |              |
 ATmmega16L PB0|--------7|D0  LCD20x4   |
            PB1|--------8|D1            |
            PB2|--------9|D2            |
            PB3|-------10|D3            |
            PB4|-------11|D4            |
            PB5|-------12|D5            |
            PB6|-------13|D6            |
            PB7|-------14|D7            |
               |         |              |
               |     --15|+LED          |
               |     --16|-LED          |
_______________|         |______________|
========================================================*/
#include //CPU_ATmmega16L
#define RS_H    asm("sbi 0x12,5")  //RS设为高电平
#define RS_L    asm("cbi 0x12,5")  //RS设为低电平
#define RW_H    asm("sbi 0x12,6")  //RW设为高电平
#define RW_L    asm("cbi 0x12,6")  //RW设为低电平
#define E_H     asm("sbi 0x12,7")  //E设为高电平
#define E_L     asm("cbi 0x12,7")  //E设为低电平

unsigned char str1[]="ll";
unsigned char str2[]="shdfjkewoi";
unsigned char str3[]="1654621";
unsigned char str4[]="我";

//=======================================================
//微秒级延时程序
void delay_us(int time)
{
    do
    {
        time--;
    } 
    while (time > 1);
}
//=======================================================
//毫秒级延时程序
void delay_ms(unsigned int time)
{
    while(time != 0)
    {  
        delay_us(1000);
        time--;
    }
}

//=======================================================
//读取lcd是否内部操作(忙碌)状态
char Lcd_Busy()
{
    char r;
    DDRB = 0x00;       //端口B设为输入方式
    E_L;RS_L;RW_H;     //E=0(致能),RS=0(命令),RW=1(读)
    delay_us(2);       //液晶延时子程序
    E_H;
    delay_us(2);       //液晶延时子程序
    r = PINB & 0x80;   //读取lcd_data第八位
    E_L;
    DDRB="0xff";         //端口B设为输出方式
    return r;          //读取结果返回
}

//=======================================================
//向Lcd发送命令程序
void Lcd_Command(unsigned char Command)
{
    while(Lcd_Busy()); //判断lcd是否内部操作状态
    E_L;RS_L;RW_L;     //E=0(致能),RS=0(命令),RW=0(写)
    delay_us(2);       //液晶延时子程序
    E_H;
    PORTB = Command;   //向Lcd发送命令
    delay_us(2);       //液晶延时子程序
    E_L;
}

//=======================================================
//向lcd写入一个字符程序
void Lcd_Write(unsigned char Data)
{
    while(Lcd_Busy()); //判断lcd是否内部操作状态
    E_L;RS_H;RW_L;     //E=0(致能),RS=1(数据),RW=0(写)
    delay_us(2);       //液晶延时子程序
    E_H;
    PORTB = Data;      //向lcd写入一个字符
    delay_us(2);       //液晶延时子程序
    E_L;
}


/*=======================================================
LCD第1行显示地址1~20(0x80~0x93)
LCD第2行显示地址1~20(0xc0~0xd3)
LCD第3行显示地址1~20(0x94~0xa7)
LCD第4行显示地址1~20(0xd4~0xe7)
=======================================================*/
//初始化LCD_8位接口,4行x20字符的工作方式
void Lcd_Init()
{
    DDRB = 0xff;       //端口B设为输出方式
    DDRD = 0xff;       //端口D设为输出方式
    Lcd_Command(0x38); //
    Lcd_Command(0x38); //
    Lcd_Command(0x38); //
    Lcd_Command(0x38); //
    Lcd_Command(0x08); //令显示器off
    Lcd_Command(0x01); //清除显示器
    Lcd_Command(0x06); //令LCD每接收到1Byte数据后,AC自动加1
    Lcd_Command(0x0C); //令光标,0x0c=不显示,0x0d=显示闪动. 
}

//=======================================================
//写ASCII字符串程序
void asc_tran(unsigned char *asc)
{
    while((*asc) != 0)   //判断字是否结束
    {
        Lcd_Write(*asc); //向lcd写入字符串
        asc++;           //移下一个字符
    }
}

//=======================================================
//测试主LCD主程序
void main()
{
    Lcd_Init(); //初始化LCD
    while(1)
    {
        Lcd_Command(0x83);               //设置显示位址
        asc_tran(str1);      //显示字符串
        Lcd_Command(0x97);               //设置显示位址
        asc_tran(str2);      //显示字符串
        delay_ms(1000);                  //延迟1秒
        Lcd_Command(0x01);               //清除显示器

        Lcd_Command(0x83);               //设置显示位址
        asc_tran(str3);      //显示字符串
        Lcd_Command(0x94);               //设置显示位址
        asc_tran(str4); //显示字符串
        delay_ms(1000);                  //延迟
        Lcd_Command(0x01);             //清除显示器
    }
}


关键字:ICC  AVR程序 引用地址:12864(ICCAVR程序)

上一篇:LCD1602程序下载(AVR)
下一篇:ATmega8自适应波特率的实现(软件包)

推荐阅读最新更新时间:2024-03-16 15:49

LCD12864中文液晶屏显示
单片机源程序如下: /* ***************************************************** */ /* ***************************************************** */ // 工 程 : 51单片机开发板 // 文件名 : LCD12864.c // 处理器 : STC89C52RC // 编译环境 : Keil4 C51 // 系统时钟 : 11.0592MHZ // 版 本 : V1.0 // 生成日期 : 2017-09-20 // 修改日期
[单片机]
LCD<font color='red'>12864</font>中文液晶屏显示
SD卡接口程序(AVR)
SD卡接口程序/******************************************/ /* SD Code for M32L */ /* By pasyong */ /* 2006-4 */ /* Base ICC6.31A */ /************************************************************/ #include iom32v.h #include macros.h #include 1011.h #define uchar unsigned char #define uint uns
[单片机]
12864液晶显示图片-CVAVR程序
#include #include #define rw PORTA.1 #define rs PORTA.0 #define e PORTA.2 #define uchar unsigned char flash unsigned char table1 ={ 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, 0xFF,0x
[单片机]
avr单片机控制AD5161实验程序
/*******************************************  文件:AD5161.C  环境:编译为ICC AVR6.25A,仿真为AVR Studio4.10   硬件:ATMEGA16芯片  功能:驱动开发板上的数字电位器(AD5161采用IIC接口)  /******************************************/  #include  iom16v.h     //包含型号头文件  #include  macros.h     //包含"位"操作头文件  #include  stdio.h     //标准输入输出头文件  #include  AVR_PQ1A.h
[单片机]
AVR单片机I/O寄存器的C语言源程序及剖析详解
I/O寄存器的C语言源程序及剖析   在ICCAVR中访问0x00~0x3f的寄存器空间,可以使用内汇编和预处理宏。一个数据内存地址可以通过加指针类型符号直接访问。 例如,SREG寄存器的地址是0x5f,对它的访问操作: unsigned char c; c=*(volatile unsigned char *)0x5f;//读取SREG寄存器   *(volatile unsigned char *)0x5f|=0x80;//打开全局中断允许位  提示:数据内存地址0x00~0x31指向CPU通用寄存器R0~R31,不能随意修改它们的地址(或者输入错误的地址),否则可能会造成致命的错误。   ICCAVR C在io
[单片机]
AVR128的程序——12864时钟
#include iom128v.h #include macros.h #define uint unsigned int #define uchar unsigned char #define psbset DDRB |= (1 4) #define psbset PORTB |= (1 4) #define psbclr PORTB &=~(1 4) #define rsout DDRB |= (1 5) #define rsset PORTB |=(1 5) #define rsclr PORTB &=~(1 5) #define rwout DDRB |= (1 6) #
[单片机]
基于AVR单片机的万年历程序设计
AVR单片机万年历程序 //***************************FileName:RTC.C************************// //***************************ICCAVRV6.30编译**********************// #include// 寄存器 定义文件 #include//使用到宏 #defineucharunsignedchar//数据类型定义 #defineuintunsignedchar//数据类型定义 #defineSD23030x64//SD2303器件IIC识别码 ucharTable[12]={0x3f,0x06,0x5b,
[单片机]
基于<font color='red'>AVR</font>单片机的万年历<font color='red'>程序</font>设计
12864液晶(AVR_Mega128)的头文件
大家使用时把这段代码保存成.h的头文件,在主程序中包含这个头文件就行 根据你们液晶电路更改下面的端口宏定义即可 //CPU:ATmega128; 时钟频率为16MHz //编译环境为ICCAVR //头文件 #include iom128v.h #include string.h #include avrdef.h //数据端口定义 #define Dat_Port_Write PORTA #define Dat_Port_Read PINA //控制端口及相应的位 #define RS_RW_EN_Control PORTG #define LCM_RS 0 #define LCM
[单片机]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

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

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

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