AVR单片机—(三)、ATMEGA16驱动16*2点阵字符液晶模块—01

发布者:温馨时光最新更新时间:2017-11-21 来源: eefocus关键字:AVR单片机  ATMEGA16  点阵  字符液晶模块 手机看文章 扫描二维码
随时随地手机看文章

三、ATMEGA16驱动16*2点阵字符液晶

三—(01)、ATMEGA16驱动16*2点阵字符液晶

这篇文章只是简单的驱动并让1602显示,并没有用到读数据和读状态的部分,也没有用到读写检测(要是感兴趣的话还是写写这里吧)AVR单片机(学习ing)—(三)、ATMEGA16驱动16*2点阵字符液晶模块—01

1、那就是用什么样的液晶,又该怎么驱动,现在把datasheet的部分图片贴出来,看看,so easy~~的AVR单片机(学习ing)—(三)、ATMEGA16驱动16*2点阵字符液晶模块—01

1)就是它的引脚说明(个人感觉要想具体了解还是在网上搜搜吧~~我这里也就是简单了解~)

AVR单片机(学习ing)—(三)、ATMEGA16驱动16*2点阵字符液晶模块—01

这里也就三个引脚需要注意就是RS、R/W、E,这三个引脚,传输数据的必用引脚,别的就不用详细介绍了吧~~(后面的程序就是根据这三个引脚的时序图来写的!

2)(说实话,我真的不太想详细说,因为好多人对于驱动这个1602来说太简单了~~所以我尽量简洁)基本操作时序

1读状态:输入:RS=L,RW=H,E=H                  输出:D0~D7=状态字

2写指令:输入:RS=L,RW=L,D0~D7=指令码,E=H    输出:无

3读数据:输入:RS=H,RW=H,E=好                 输出:D0~D7=数据

4写数据:输入:RS=H,RW=L,D0~D7=数据,E=高脉冲 输出:无

AVR单片机(学习ing)—(三)、ATMEGA16驱动16*2点阵字符液晶模块—01

AVR单片机(学习ing)—(三)、ATMEGA16驱动16*2点阵字符液晶模块—01

AVR单片机(学习ing)—(三)、ATMEGA16驱动16*2点阵字符液晶模块—01

注意,由于咱们不注重读,所以上面重要看的就是写时序,还有就是时序参数!!!!

(这里我就不用太多解释了吧,但是要注意一点,1602吗,咱就是让它来显示数据的,那些什么读状态啊,还有读数据什么的,暂时是用不到的,所以,这里暂时就不予以介绍了,所以呢,咱就直接用写指令和写数据,仔细看看会发现写指令和写数据就只有一点不一样哦~~~~就是RS为低为写指令;反之~~~)

3)状态字说明

AVR单片机(学习ing)—(三)、ATMEGA16驱动16*2点阵字符液晶模块—01

后面说的读写检测什么的暂时是用不到的,那是因为咱们给它一个延时,不就哦了,不过要是想用那就好好看看datasheet喽~~~~(大实话:状态字还不怎么会用,要是会了,以后回帖~~哈哈)

4)RAM地址映射图

AVR单片机(学习ing)—(三)、ATMEGA16驱动16*2点阵字符液晶模块—01
5)指令说明(这里才是重点~~上面的只要找到datasheet就知道了~~~啊~~烦死了AVR单片机(学习ing)—(三)、ATMEGA16驱动16*2点阵字符液晶模块—01

5.1初始化设置:

5.1.1显示模式设置:

AVR单片机(学习ing)—(三)、ATMEGA16驱动16*2点阵字符液晶模块—01

就是写指令呗0x38

5.1.2显示开关及光标设置

AVR单片机(学习ing)—(三)、ATMEGA16驱动16*2点阵字符液晶模块—01

AVR单片机(学习ing)—(三)、ATMEGA16驱动16*2点阵字符液晶模块—01
这个很简单的,我还看过郭天祥老师的教学视频~~他就是拿这个讲的~~呵呵

5.2数据控制(累死了,真的不想写了,直接上图片吧~~)

AVR单片机(学习ing)—(三)、ATMEGA16驱动16*2点阵字符液晶模块—01

图片里面的读数据和写数据就是那个读时序和写时序,上边都有了,我就不贴了~~

好了我仿真的图片

AVR单片机(学习ing)—(三)、ATMEGA16驱动16*2点阵字符液晶模块—01

AVR单片机(学习ing)—(三)、ATMEGA16驱动16*2点阵字符液晶模块—01

最后就是程序了~~

//------------------------------------------------------------------------------
//LCD1602的显示程序
#include"ioavr.h"
#include"intrinsics.h"
//------------------------------------------------------------------------------
typedef unsigned char uchar;
typedef unsigned int  uint;
//------------------------------------------------------------------------------
//RS、RW、EN引脚输出高低电平的宏定义
#define lcd_rs_1  PORTB|=1
#define lcd_rs_0  PORTB&=~1
#define lcd_rw_1  PORTB|=2
#define lcd_rw_0  PORTB&=~2
#define lcd_en_1  PORTB|=4
#define lcd_en_0  PORTB&=~4
//------------------------------------------------------------------------------
#define data_port PORTA
#define busy  0x80
#define xtal  8
//------------------------------------------------------------------------------
uchar __flash str0[]={"This is a LCD-!"};
uchar __flash str1[]={"Designed by ME"};
//------------------------------------------------------------------------------
//延时1ms函数
void delay_1ms()
{
  uint i;
  for(i=1;i<(uint)(xtal*143-2);i++);
}
//------------------------------------------------------------------------------
//延时nms函数
void delay_nms(uint n)
{
  uint i=0;
  while(i  {
    delay_1ms();
    i++;
  }
}
//------------------------------------------------------------------------------
//LCD写数据函数
void lcd_write_data(uchar dat)
{
  lcd_rs_1;
  lcd_rw_0;
  data_port=dat;
  delay_1ms();
  lcd_en_1;
  delay_1ms();
  lcd_en_0;
}
//------------------------------------------------------------------------------
//LCD写指令函数
void  lcd_write_command(uchar com)
{
  lcd_rs_0;
  lcd_rw_0;
  data_port=com;
  delay_1ms();
  lcd_en_1;
  delay_1ms();
  lcd_en_0;
}
//------------------------------------------------------------------------------
//LCD初始化函数
void lcd_init()
{
  lcd_write_command(0x01);
  delay_1ms();
  lcd_write_command(0x38);
  delay_1ms();
  lcd_write_command(0x0c);
  delay_1ms();
  lcd_write_command(0x06);
  delay_1ms();
}
//------------------------------------------------------------------------------
//LCD显示函数
void lcd_display()
{
  uint num;
  lcd_write_command(0x80);
  for(num=0;num<16;num++)
  {
    lcd_write_data(str0[num]);
    delay_1ms();
  }
  lcd_write_command(0x80+0x40);
  for(num=0;num<16;num++)
  {
    lcd_write_data(str1[num]);
    delay_1ms();
  }
}
//------------------------------------------------------------------------------
//main
void main()
{
  delay_nms(100);
  DDRA=0XFF;
  PORTA=0X00;
  DDRB=0XFF;
  PORTB=0X00;
 
  lcd_init();
  lcd_display();
  while(1);
}


关键字:AVR单片机  ATMEGA16  点阵  字符液晶模块 引用地址:AVR单片机—(三)、ATMEGA16驱动16*2点阵字符液晶模块—01

上一篇:AVR单片机(学习ing)—(四)、ATMEGA16的定时/计数器—01
下一篇:AVR单片机(学习ing)—(二)、ATMEGA16的中断系统—02

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

基于AVR单片机的安全工器具监控系统设计
众所周知,安全是电力企业一个永恒的主题,而安全工器具的好坏,将直接影响着电力企业在生产过程中的人身和设备安全。笔者提出了一种基于AVR单片机的安全工器具监控系统的设计方案,主要是对安全工器具的离就位状态信息、有效使用期限和安全工器具柜内的温湿度状况等进行监控,可以根据实现安全工器具柜内温湿度的自动调节,能够自动记录安全工器具的相关信息。本文首先阐述了系统的总体结构,然后详细论述了系统的硬件设计和软件设计。 1 安全工器具监控系统的总体结构 1.1 系统结构 本文所设计的安全工器具监控系统主要分为下位机数据采集和上位机数据管理两个部分,两者之间通过网络进行通信。 系统首先通过数据采集板对安全工器具柜的相关量进行采集,然后将
[单片机]
基于<font color='red'>AVR单片机</font>的安全工器具监控系统设计
AVR单片机外部中断INT0示例
*AVR单片机外部中断INT0示例程序晶振为1 MHz INT0最好接一个4.7K的上拉电阻,按键对地有效 没有使用延时/通信语句,所以使用内部/外部时钟都可以 每按动INT0按键一次,PD3的电平就翻转一次 本例子没有考虑太多的按键防抖动功能*/ #include mega48.h interrupt void INT0_isr(void) //INT0的中断向量是2,请参考M48数据手册的48页 { PORTD.3=~PORTD.3; //电平取反 EIFR|=1; //清除INT0中断触发标记,防止按键抖动 } void main(voi
[单片机]
led灯闪光程序 avr单片机
#include avr/io.h stat IC void io_init(void) { PORTA = 0xff; DDRA = 0xff; } void mDelay(uint16_t DelayTim) { uint16_t i; for(;DelayTim 0;DelayTim--) { for(i=0;i 40000;i++) {;} for(i=0;i 3900;i++) {;} } } int main(void) { uint8_t i=0; io_init(); while(1) { if(++i =8) i=0; PORTA=~(0x01 i); //改为0x80 i可改变流水灯方向 mDelay(5
[单片机]
基于蓝牙技术的LED点阵屏设计方案
  0 引言   本文设计一种内容更新便捷、可扩展、低价格的点阵LED 文字显示屏。降低成本的途径是①用几乎人人都有的手机的蓝牙数据传输功能进行LED 显示内容的更新,免去专业上位机软件和控制卡的成本,操作也更简单;②单次显示内容在5 ~ 30 个汉字或英文字母,因为显示内容较少,就可实现扩展电路的简单化。   1 系统设计方案    1. 1 系统组成   系统由带蓝牙功能的智能手机和LED 显示屏组成。其中,LED 显示屏由单片机、LED 点阵模块、字库芯片、蓝牙接收模块、5V 开关电源和3.3V 稳压电路组成,如图1 所示。系统工作过程是: 用户通过智能手机的记事本编辑"数据",并经无线蓝牙发送到显示屏上的蓝牙接收模
[电源管理]
基于蓝牙技术的LED<font color='red'>点阵</font>屏设计方案
51单片机复习:8*8led点阵
有两种,一种列为低电压通,行为高电压为通,我们可以依次将每一列接低电压,也就依次点亮 然后利用行的电压来控制点亮,如果有一行电压为低,那一行的Led灯都不会亮 第二种反之,列为高低压则通,行为低电压则通,两者同时符合,则对应的灯点亮 74H595芯片 在我使用的普中51单片机中,其控制行电压,而P0口则控制列电压 其有三个引脚,SER(串行数据输入),SCLK(移位储存器时钟输入),CLK(数据储存器时钟输入) 我是这样理解他们的,SER负责传送数据,每一次只能接受一位,而SCLK上升沿让移位有效,而CLK上升沿让整个数据的传输有效
[单片机]
AVR单片机在LED遥控照明中的应用
摘要:基于AVR单片机设计了一种LED遥控照明系统,给出了红外接收模块和LED驱动模块的设计方法,以及软件程序流程。经测试,该方案可行,具有一定的应用价值。 关键词:PWM;LED照明;AVR 引言 LED照明已经进入了家庭用户,与传统的照明设备(如白炽灯、荧光灯)相比,具有光源单色纯度高、色彩多样、效率高、光强度可调等优点。针对传统照明亮度不易调节、开关位置固定的问题,本文基于AVR单片机设计了一种LED遥控照明系统,提出了LED照明灯的驱动与亮度调节的方法。 1 LED照明灯控制系统原理 系统原理图如图1所示。当红外接收器接收到红外遥控信号时,通过外部中断将AVR单片机从休眠模式中唤醒;AVR单片机开始解析红外信号
[单片机]
<font color='red'>AVR单片机</font>在LED遥控照明中的应用
单片机与控制实验(2)——LED点阵显示屏
一、实验目的和要求   了解LED点阵显示的基本原理和实现方法。掌握点阵汉字库的编码和从标准字库中提取汉字编码的方法。 二、实验设备   单片机测控实验系统   LED点阵显示器实验模块   Keil开发环境   STC-ISP程序下载工具 三、实验内容   了解16*16点阵电路的原理。编写汇编语言程序,编写一行汉字字符(至少三个字)的显示程序,并且能够从左到右(或从右到左)循环显示。 四、实验步骤   1. 掌握点阵式LED显示屏的控制方法;   2. 使用MCS-51汇编语言,使用LED点阵显示器显示出正确的汉字字符及动态效果;   3. 将编译后的程序下载到51单片机,观察LED显示屏的显示结果。 五、实验原
[单片机]
单片机与控制实验(2)——LED<font color='red'>点阵</font>显示屏
利用单片机来控制LED点阵
   引言   单片机自20世纪70年代问世以来,以极其高的性价比受到人们的重视和关注,所以应用很广,发展很快。单片机的优点是体积小、重量轻、抗干扰能力强,对环境要求不高,价格低廉,可靠性高,灵活性好,开发较为容易。广大工程技术人员通过学习有关单片机的知识后,也能依靠自己的力量来开发所希望的单片机系统,并可获得较高的经济效益。正因为如此,在我国,单片机已被广泛地应用在工业自动化控制、自动检测、智能仪表、家用电器等各个方面。在现代工业控制和一些智能化仪器仪表中,越来越多的场所需要用点阵图形显示器显示汉字。汉字显示方式是先根据所需要的汉字提取汉字点阵(如16×16点阵),将点阵文件存入ROM,形成新的汉字编码;而在使用时则需要先根
[单片机]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

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

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

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