使用AVR单片机驱动RT1601 LCD显示芯片

发布者:创意火舞最新更新时间:2017-01-08 来源: eefocus关键字:AVR单片机  驱动RT1601  LCD显示 手机看文章 扫描二维码
随时随地手机看文章

研究了一下,如何用ATmega 16单片机,来驱动字符型液晶显示芯片,现把研究心得写出来:
我手里的这个RT1601液晶显示模块,使用的是S6A0069显示芯片。
各个引脚简单说明一下:

控制和数据引脚配置如下:
-------------------------------
PORTD_0 - RS
PORTD_1 - R/W
PORTD_2 - E
PORTA     - DATA BUS
------------------------------
LCD.h

 

 1#ifndef _LCD_H_
 2#define _LCD_H_
 3/*****************************************
 4RS  - PORTD_0
 5R/W - PORTD_1
 6E   - PORTD_2
 7DB     - PORTA
 8******************************************/
 9void LCD_Set_RS(void);
10void LCD_Clear_RS(void);
11void LCD_Set_RW(void);
12void LCD_Clear_RW(void);
13void LCD_Set_E(void);
14void LCD_Clear_E(void);
15void LCD_CheckBF(void);
16// Write Command
17void LCD_Write_Cmd(unsigned char byCmd);
18// Write Data
19void LCD_Write_Data(unsigned char byData);
20void LCD_Delay_5ms(void);
21void LCD_Delay_500ms(void);
22void LCD_PortInit(void);
23
24// Application Interface
25void LCD_Init(void);
26void LCD_Display(char* pstrText);
27
28#endif
29

LCD.c
这里是液晶驱动的实现部分,对外开放两个接口:LCD_Init, LCD_Display。(我这个模块,是两行显示的,共16个字符)

  1#include "LCD.h"
  2#include 
  3#include 
  4
  5/*****************************************
  6RS  - PORTD_0
  7R/W - PORTD_1
  8E   - PORTD_2
  9DB     - PORTA
 10******************************************/
 11
 12
 13void LCD_Set_RS(void)
 14{
 15    PORTD |= (1 << 0);
 16
 17    return;
 18}
 19
 20void LCD_Clear_RS(void)
 21{
 22    PORTD &= ~(1 << 0);
 23
 24    return;
 25}
 26
 27void LCD_Set_RW(void)
 28{
 29    PORTD |= (1 << 1);
 30
 31    return;
 32}
 33
 34void LCD_Clear_RW(void)
 35{
 36    PORTD &= ~(1 << 1);
 37
 38    return;
 39}
 40
 41void LCD_Set_E(void)
 42{
 43    PORTD |= (1 << 2);
 44
 45    return;
 46}
 47
 48void LCD_Clear_E(void)
 49{
 50    PORTD &= ~(1 << 2);
 51
 52    return;
 53}
 54
 55void LCD_CheckBF(void)
 56{    
 57    DDRA = 0x00;    // Input
 58
 59    LCD_Clear_RS();
 60    LCD_Set_RW();
 61    LCD_Set_E();
 62    while (PINA & 0x80)
 63    {
 64        ;
 65    }
 66    LCD_Clear_E();
 67
 68    DDRA = 0xFF;    // Output
 69
 70    return;
 71}
 72
 73// Write Command
 74void LCD_Write_Cmd(unsigned char byCmd)
 75{
 76    LCD_CheckBF();
 77
 78    LCD_Clear_RS();
 79    LCD_Clear_RW();
 80    LCD_Set_E();
 81    PORTA = byCmd;
 82    LCD_Clear_E();
 83
 84    return;
 85}
 86
 87// Write Data
 88void LCD_Write_Data(unsigned char byData)
 89{
 90    LCD_CheckBF();
 91
 92    LCD_Set_RS();
 93    LCD_Clear_RW();
 94    LCD_Set_E();
 95    PORTA = byData;
 96    LCD_Clear_E();
 97
 98    return;
 99}
100
101void LCD_Delay_5ms(void)
102{
103    unsigned int i = 5552;
104    while (i--)
105    {
106        ;
107    }
108
109    return;
110}
111
112void LCD_Delay_500ms(void)
113{
114    unsigned char i = 5;
115    unsigned char j = 0;
116
117    while (i--)
118    {
119        j = 7269;
120        while (j--)
121        {
122            ;
123        }
124    }
125
126    return;
127}
128
129// Port Init
130void LCD_PortInit(void)
131{
132    PORTD = 0x00; 
133    DDRD = 0xFF;           // Output
134    DDRA = 0xFF;
135
136    return;
137}
138
139// LCD Init
140void LCD_Init(void)
141{
142    LCD_PortInit();
143
144    LCD_Delay_500ms();
145
146    LCD_Write_Cmd(0x38);    // Function Set. 8bit data length, 2-line, 5*8 font
147    LCD_Delay_5ms();
148    LCD_Write_Cmd(0x0C);    // Display ON/OFF Control. Display ON, Cursor OFF, Blink OFF
149    LCD_Delay_5ms();
150    LCD_Write_Cmd(0x01);    // Display Clear.
151    LCD_Delay_5ms();
152    LCD_Write_Cmd(0x06);    // Entry Mode Set. Increment mode, Entire shift off
153
154    return;
155}
156
157void LCD_Display(char* pstrText)
158{
159    unsigned char i = 0;
160
161    LCD_Write_Cmd(0x80 | 0x00);        // 1 Line Position
162    while (*pstrText != 0x00)
163    {
164        if (i == 8)
165        {
166            LCD_Write_Cmd(0x80 | 0x40);    // 2 Line Position
167        }        
168
169        LCD_Write_Data(*(pstrText++));
170        i++;
171    }
172
173    return;
174}
175
176

client端调用如下:

 1//ICC-AVR application builder : 2008-6-4 8:41:19
 2// Target : M16
 3// Crystal: 4.0000Mhz
 4#include 
 5#include 
 6#include "LCD.h" 
 7
 8void main(void)
 9{
10    LCD_Init();    
11    LCD_Display("RT1601Demo by WF");
12
13    while (1)
14    {
15        ;
16    }
17
18    return;
19}

 好了,就这些,有关该芯片的详细资料,请查看 S6A0069资料。


关键字:AVR单片机  驱动RT1601  LCD显示 引用地址:使用AVR单片机驱动RT1601 LCD显示芯片

上一篇:avr复习笔记--iic读写多个24cxxx
下一篇:AVR单片机中的EEPROM

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

基于DM642的TFT-LCD显示设计
数字信号处理是利用数值计算的方式对信号进行加工的理论和技术,数字信号处理器(DSP)主要是用于完成各种实时数字信息的微处理器,其强大、快速的运算能力尤其适 用于图形图像处理方面。相比于其他微处理器,DSP主要具有以下特点: 1)一个指令周期内能够完成一次乘法和一次加法; 2)以及快速的中断处理和硬件I/O支持; 3)程序和数据空间分开,可以同时访问指令和数据; 4)片内具有快速RAM,能够通过独立的数据总线在两边进行同时访问; 5)可以并行执行多个操作; 6)支持流水线操作,使得取址、译码和执行等操作可以重叠执行。 TFT(Thin Film Transistor)LCD即薄膜场效应晶体显示器,是有源矩阵类型液晶显
[嵌入式]
基于DM642的TFT-<font color='red'>LCD显示</font>设计
AVR单片机对数码管数据P0口与P2口的控制设计
//数码管数据P0口,数码管控制P2口 #include #include #include #include #include #define code PROGMEM #define uchar unsigned char #define uint unsigned int code const ucharLED_7[16] = {0x28, 0x7E, 0xA2, 0x62, 0x74, 0x61, 0x21, 0x7A, 0x20, 0x60,0xff};//common of + code const uchar posi ti on[8] = {0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0x
[单片机]
<font color='red'>AVR单片机</font>对数码管数据P0口与P2口的控制设计
avr单片机的adc应用
1.数模转换的基础知识   数模转换器(ADC)基本上是一个比例上的问题,即由ADC产生的数字值跟输入模拟量与转换器量程的比值有关的。转换关系如下:            Vin/Vfullscale=X/(2N-1)  其中X是数字输出,N是数字输出的位数(ADC的位数),Vin是模拟输入量的值,Vfullscale是模拟输入量的最大值。   数模转换的转换精度计算:            Vresolution=Vfullscale/((2N-1) 2.AVR微控器的ADC介绍   AVR微控器的ADC具有两个ADC寄存器:ADC控制与状态寄存器ADCSR控制ADC的运行;ADC多路复用选择器ADMUX,控制8个
[单片机]
Ubuntu上AVR单片机开发环境设置
操作系统:ubuntu 13.04(32 bits) AVR单片机:ATmega644pa 首先要明确,我们在Ubuntu(或者Linux)上开发AVR单片机应包括两大部分: 程序编译、程序下载。 环境布置: 程序编译使用Linux下的编译器 avr-gcc,通过以下指令安装: sudo apt-get install gcc-avr #这是avr的交叉编译器 sudo apt-get install avr-libc #这是编译要用的库 另外还有一个工具,目前感觉没什么用,先记下来 sudo apt-get install gdb-avr #gdb反向调试工具,反汇编 程序的下载使用avrdud
[单片机]
怎样设计一个基于AVR单片机的SPI串行外设接口?
1、AVR单片机的SPI接口 SPI(SerialPeripheralINTERFACE---串行外设接口)总线系统是一种同步串行外设接口,允许MCU与各种外围设备以串行方式进行通信、数据交换,广泛应用于各种工业控制领域。基于此标准,SPI系统可以直接于各个厂家生产的多种标准外围器件直接接口。SPI接口通常包含有4根线:串行时钟(SCK)、主机输入/从机输出数据线(MISO)、主机输出/从机输入数据线(MOSI)和低电平有效的从机选择线SS。在从机选择线SS使能的前提下,主机的SCK脉冲将在数据线上传输主/从机的串行数据。主/从机的典型连接图如图(1)所示: 图(1)主/从机的连接图 串行外设接口SPI允许ATmega16
[单片机]
怎样设计一个基于<font color='red'>AVR单片机</font>的SPI串行外设接口?
自制AVR单片机解锁器
用AVR单片机的2MHz的无源石英晶体和6反相器74HC04,加上几个1/4W色环电阻就可以做成矩形波发生器。下图是74HC04的引脚分布图。   如上下图所示。74HC04的14脚为电源引脚,接正5V直流电源,第7脚接5V直流电源负极。在本设计中利用74HC04的头三个反相器构成矩形波发生器。   下图解锁器电路原理图。   下图中,标号为U1A的74HC04的第1个反相器输入输出端并联上一个1MQ的1/4W电阻和一个2M的2脚石英晶体。2个22pF的瓷片电容C1和C2用来微调石英晶体的频率。U1C是输出反相器,为了保证波形比较完整,在输出端接一个2K欧姆的上拉电阻。   如果碰到AVR单片机自己锁死的情况。只要
[模拟电子]
自制<font color='red'>AVR单片机</font>解锁器
基于AVR单片机的智能烤烟控制仪
    烤烟是云南省农业生产的主要经济作物之一,近年来,由于推广了优质烟栽培技术,使烤烟生产有了很大发展,但烟叶的烘烤仍然是一个薄弱环节。为了解决烟叶烘烤技术难于掌握的问题,设计了烤烟智能控制仪,他使难于控制的烟叶烘烤过程变得简单。本文从软、硬件方面详细介绍智能控制仪的组成和工作原理。 1 烟叶烘烤的基本要求   影响烟叶质量的因素有很多方面,除了有标准的烤房之外,烟叶烘烤过程中的温度、湿度控制十分重要。云南省烟草研究所研究得出优质烟叶的一般烘烤方法。其温度时间、湿度时间关系如图1和图2所示。   从图1和图2中可以看出,在烟叶烘烤的整个过程中,一定的时刻对应一个确定的温度、湿度值。图1和图2中的一定时间的温度、湿
[单片机]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

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

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

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