收藏 分销(赏)

AVR单片机的步进电机.doc

上传人:二*** 文档编号:4515766 上传时间:2024-09-26 格式:DOC 页数:25 大小:810KB
下载 相关 举报
AVR单片机的步进电机.doc_第1页
第1页 / 共25页
本文档共25页,全文阅读请下载到手机保存,查看更方便
资源描述
. . . . 学 生 毕 业 论 文 基于AVR单片机的步进电机控制 学生: 王振军 入学时间: 2007年9月 专业名称:计算机控制技术 班级: 07级计算机控制技术 指导教师: 虎强 职称: 21 / 25 基于AVR单片机的步进电机控制 摘 要 本文介绍了步进电动机的发展,国的现状和步进电动机未来的发展前景。设计了一种新型的主要由AVR单片机和L298驱动器构成的电机调速控制器。详细介绍了本调速控制系统的工作原理、光电编码器接口电路、驱动接口电路和相应的各种控制软件设计。绘制了原理图和PCB板图,撰写了程序源代码。这期间主要使用protel99软件绘制原理图和制板。最后通过硬件的调试验证程序代码的实际功能,完成对控制器的设计。实验结果表明,设计的调速控制器具有良好的工作性能。 关键词AVR单片机 步进电动机 控制器 Based on MCU of Stepping Motor control AbstractIntroduction step enter electric motor of development history, and local present condition and step enter electric motor future of application foreground.And elaborated a step to enter electric motor to turn soon, angle, turn Ju of control principle.This text elaborated a kind of step enter electrical engineering controller of design project, and drew principle diagram and PCB plank diagram, composed a procedure source a code.Realization to step enter the electric motor turn soon, angle of control, and completion real object of creation.This period main usage the protel 99 se the software draw principle diagram and make plank, usage proteus 7.1 softwares carry on an imitate of procedure code true with the theories of the function verification.The end experiment certificate procedure a code through an adjust of hardware of actual function, completion design controller. Key wordsAVR MCUStepper MotorController 目 录 第一章、绪论1 1.1步进电机发展1 1.2步进电机的应用前景1 1.3设计容1 第二章、系统工作原理2 2.1步进电动机控制系统2 2.2 控制单元2 第三章、Atmega16单片机3 3.1 Atmega16主要功能4 3.2 Atmega16引脚功能5 第四章、硬件系统设计6 4.1 步进电动机的控制原理6 4.2 L298芯片简介6 4.3 控制电机6 4.4 LCD液晶显示与电路7 第五章、软件实现9 5.1 主程序流程图9 5.2主程序编程9 5.2.1 主程序代码10 5.2.2 液晶显示汉字14 毕业设计总结18 致 19 参考文献20 第一章、绪论 1.1步进电机发展 步进电机又称电动机或阶跃电动机,国外一般称为 Step motor或Stepping motor 等。步进电机的机理是基于最基本的电磁铁作用, 20世纪60年代后期,随着永磁性材料的发展,各种实用性步进电动机应运而生,而半导体技术的发展则推进了步进电动机在众多领域的应用。在近30年间,步进电动机迅速地发展并成熟起来。从发展趋向来讲,步进电动机已经能与直流电动机、异步电动机,以与同步电动机并列,从而成为电动机的一种基本类型。我国步进电动机的研究与制造起始于本世纪50年代后期。自80年代中期以来,由于对步进电动机精确模型做了大量研究工作,各种混合式步进电动机与驱动器作为产品广泛利用。 1.2步进电机的应用前景 目前,随着电子技术、控制技术以与电动机的发展和变化,传统电机分类间的界面越来越模糊。步进电机必然会成为机电一体化元件组件的必然趋势。由于步进电机具有控制方便、体积小等特点,所以在数控系统、自动生产线、自动化仪表、绘图机和计算机外围设备中得到广泛应用。微电子学的迅速发展和微型计算机的普与与应用,为步进电动机的应用开辟了广阔前景,使得以往用硬件电路构成的庞大复杂的控制器得以用软件实现,既降低了硬件成本又提高了控制的灵活性,可靠性与多功能性。市场上有很多现成的步进电机控制机构,但价格都偏高。应用SGS公司推出的L298芯片可方便的组成步进电机驱动器,并结合Atmega16L单片机可以构成很好的步进电机控制系统[1][2]。 1.3设计容 在各类机电系统中,随着社会的快速发展,步进电机已广泛运用于工业控制、日常生活领域的各个方面。因此设计一种新的步进电机控制器,它具有调速精度高、响应速度快和耗损低等特点。 本设计由AVR单片机、L298 驱动器与液晶显示构成的步进电机控制器。 本设计具有扩展功能: 具有通信能力,可接收其他数据设备发来的命令,或将结果传送到其他数据设备,可具备与上位机的通信能力,控制更给直观、简便。 第二章、系统工作原理 步进电动机是一种将电脉冲信号转换成角位移或线位移的机电元件。步进电动机的输入量是脉冲序列,输出量则为相应的增量位移或步进运动。正常运动情况下,它每转一周具有固定的步数;做连续步进运动时,其旋转转速与输入脉冲的频率保持严格的对应关系,不受电压波动和负载变化的影响。由于步进电动机能直接接受数字量的控制,所以特别适宜采用微机进行控制。 2.1步进电动机控制系统 步进电动机本体、步进电动机驱动电路和控制单元构成步进电动机系统不可分割的三大部分。系统框图见下图2-1: 图2-1步进电动机系统框图 步进电机是数字控制电机,它将脉冲信号转变成角位移,即给一个脉冲信号,步进电机就转动一个角度,因此非常适合于单片机控制。步进电机可分为反应式步进电机(简称VR)、永磁式步进电机(简称PM)和混合式步进电机(简称HB)。 步进电机区别于其他控制电机的最大特点是,它是通过输入脉冲信号来进行控制的,即电机的总转动角度由输入脉冲数决定,而电机的转速由脉冲信号频率决定。 步进电机的驱动电路根据控制信号工作,控制信号由单片机产生。其基本原理作用如下: (1)控制换相顺序 通电换相这一过程称为脉冲分配。例如:三相步进电机的三拍工作方式,其各相通电顺序为A-B-C-D,通电控制脉冲必须严格按照这一顺序分别控制A,B,C,D相的通断。 (2)控制步进电机的转向 如果给定工作方式正序换相通电,步进电机正转,如果按反序通电换相,则电机就反转。 (3)控制步进电机的速度 如果给步进电机发一个控制脉冲,它就转一步,再发一个脉冲,它会再转一步。两个脉冲的间隔越短,步进电机就转得越快。调整单片机发出的脉冲频率,就可以对步进电机进行调速。 因此选用AVR单片机控制步进电机具有优势性。 2.2 控制单元 控制单元 、驱动电路为控制系统的核心部分。 控制单元是整个系统最核心的部分,是系统的指挥中心。用于协调各部分的运行,主要负责接收通信端口或输入电路送来的信息,并对其进行识别、译码,并做出相应的动作,发出控制信号用以控制步进电动机。控制单元实质上是具有处理能力的微处理器芯片,本文选用由ATEML公司生产的Atmega16单片机[3]。 2.3驱动电路 步进电动机不能直接接到工频交流或直流电源上工作,而必须使用专用的步进电动机驱动器,如图2-2所示,它由脉冲发生控制单元、功率驱动单元、保护单元等组成。驱动单元与步进电动机直接耦合,也可理解成步进电动机微机控制器的功率接口。 驱动电路是负责将控制单元送来的微电流信号进行放大用以驱动步进电动机运转,驱动电路实质上是功率放大器。常见的驱动电路:单电压型功放电路、高低压切换型功放电路、斩波恒流功放电路等再就是采用专用的集成芯片。本文采用L298芯片,由这种芯片构成的驱动电路具有控制方便、精度高、并且不需要外围扩展。控制原理图2-2如下: 图2-2 控制原理图 第三章、Atmega16单片机 3.1 Atmega16主要功能 AVR单片机主要有ATtiny、AT90和ATmega三种系列,其结构和基本原理都相类似。本次设计所用到的Atmega16L芯片,在这里作为电机控制的核心部件。它是一种具有40引脚的高性能、低功耗的8位微处理器。其功能特性如下[4]: (1) 8位CPU。 (2) 先进的RISC结构: 131条指令–大多数指令执行时间为单个时钟周期。 32个8位通用工作寄存器。 全静态工作。 (3) 非易失性数据和程序存储器: 16K 字节的系统可编程Flash,擦写寿命可达到10,000 次以上。具有独立锁定位的可选Boot代码区,通过片上Boot程序实现系统编程。 (4) 可通过JTAG接口实现对FLASH、EEPROM的编程。 (5) 32个可编程的I/O引线,40引脚PDIP封装。 (6) 两个具有独立预分频器和比较器功能的8位定时器/ 计数器,一个具有预分频器、比较功能和捕捉功能的16位定时器/ 计数器。 (7) 片/ 片外中断源。 (8) 具有一个10位的AD转换器,能对来自端口A的8位单端输入电压进行采样。 (9) 工作电压:2.7-5.5V。速度等级:0-8MHz。 AVR单片机的主要特点如下: 1.片集成可擦写10000次以上的Flash程序存储器。由于AVR采用16位的指令,所以一个程序存储器的存储单元为16位,AVR的数据存储器还是以8个Bit(位)为一个单元,因此AVR还是属于8位单片机。 2.高度(LOCK)。可多次擦写的FLASH具有多重密码保护锁死(LOCK)功能,因此可低成本高速度地完成产品商品化,并且可多次更改程序(产品升级)而不必浪费1C或电路板,大大提高了产品的质量与竞争力。 3.超功能精简指令。具有32个通用作寄存器(相当于8051中的32个累加器),克服了单一累加器数据处理造成的瓶须现象,128~4K字节SRAM可灵活使用指令计算,并可用功能很强的C语言编程,易学、易写、易移植。 4.程序写入器件可以并行写入(用编程器写入),也可使用串行在线编程(ISP)方法下载写入,也就是说不必将单片机芯片从系统上拆下,拿到万用编程器上烧写,而可直接在电路板上进行程序的修改、烧写等操作,方便产品升级,尤其是采用SMD封装,更利于产品微型化。 3.2 Atmega16引脚功能 Atmega16L双列直插式(PDIP)引脚如图3-1: 图3-1 Atmega16L(PDIP)图 引脚功能简述如下: A/VCC: 模拟/数字电源; AREF: A/D转换参考电压; XTAL1/2:晶振; RESET: 复位; AREF: A/D转换参考电压; PA~PD: 双向I/O口; TXD: USART输出引脚; RXD: USART输入引脚; OC1A: PWM波形输出端; 综合以上所述,正因为ATMEGA16单片机的先进性,本设计选用该型号的单片机。 第四章、硬件系统设计 经过对控制器原理、ATmega16等的总体了解和掌握以与对各种元器件和电路图的分析和比较后,现在就进入硬件电路的设计。在本章里,主要设计液晶模块的连接和显示方式、控制电路中所用到的各种芯片和元器件的原理和一些功能,并画出总的控制原理图。 4.1 步进电动机的控制原理 步进电机是一种将电脉冲信号变为相应的直流位移的数字/模拟变换器。每当电机绕组接收一个脉冲时,转子就转过一个相应的角度(步距)。 步进电机的角位移量和输入脉冲的个数严格成正比。在时间上与输入脉冲同步,因而只要控制输入脉冲的数量、频率和电机绕组的相序,即可获得所需要的转速和转动方向。 4.2 L298芯片简介 L298芯片是一种高压、大电流双全桥式驱动器,其设计是为接受标准TTL逻辑电平信号和驱动电感负载的,例如继电器、圆筒形线圈、直流电机和步进电机,具有两抑制输入来使器件不受输入信号影响。每桥的三级管的射极是连接在一起的,相应外接线端可用来连接外设传感电阻。可安置另一输入电源,使逻辑能在低压下工作。L298芯片是具有15个引出脚的多瓦数直插封闭的集成芯片。这里使用半步工作方式和两相激励的基本步距工作方式。L298的控制和引脚如图4-1[5][6]。 图4-1 L298引制脚控 4.3 控制电机 通过不同的连接可以驱动两相步进电动和驱动四相步进电机(可承受的最高电压为45V,每相电流可达2A)。单片机(简称mcu)发出时钟信号、正反转信号、工作模式信号、复位信号、使能信号与控制信号。CW/CCW控制电机的转向,取1和取0时转向相反。CLOCK为步进脉冲信号输入端,在每一个脉冲的下降沿,电机产生一步步进。HALF/FULL为半步或基本步距模式设置,为1时是半步模式,为0时是基本步距。CONTORL斩波控制,当为0时,控制INH1和INH2;当为1时控制ABCD。ENABLE使能输入,当为0时,INH1、INH2、A,B,C和D都为0。RESET输入,当为0时,脉冲分配器回到初状态(HOME)。L297通过控制L298双H集成电路,来驱动步进电机。电路中,L298的15引脚上的两个电阻用来调节斩波器电路的参考电压。该电压通过管脚13、14所反馈的电位的大小比较,来确定是否进行斩波控制,以达到控制电机绕组电流峰值、保护步进电机的目的。 综上所述:步进电机的转速取决于CLOCK的脉冲频率,角位移取决于CLOCK的脉冲个数,转矩大小则取决于参考电压Vref的大小。总的控制如图4-2所示。 图4-2 系统总的控制原理图 4.4 LCD液晶显示与电路 单片机与液晶显示模块之间的连接方式分为直接访问方式和为间接控制方式两种。如图4-1,其中左为单片机,右为液晶显示模块。 HD61202与其兼容液晶显示控制器是一种带有驱动输出的图形液晶显示控制器,而在小规模点阵液晶显示模块上使用液晶显示驱动器组成液晶显示驱动控制系统是非常有益的,这将使液晶显示模块的硬件电路简单化,从而降低模块的成本,同时也提高了对软件功能的要求。许多显示功能如光标、字符库、闪烁都需要由软件编制而成。HD61203和HD61202就是这类液晶显示驱动控制器套件。之所以称它们为套件是因为HD61203和HD61202必须配套使用,通常有12864和19264两种规格。其特点如下: 1.藏64*64=4096位显示RAM,RAM中每位数据对应LCD屏上的一个点的亮、暗状态。 2.HD61202与其兼容控制器是列驱动器,具有64路列驱动输出。 3.HD61202与其兼容控制驱动器读、写时序与68系列微处理妻相符,因此它可直接与68系列微处理器借口相联。 4.HD61202与其兼容控制器的占空比为1/32~1/64。 图4-3 间接控制方式电路图 间接控制方式是单片机通过自身的或系统中的并行接口与液晶显示模块连接。单片机通过对这些接口的操作,以达到对液晶显示模块的控制。这种方式的特点就是电路简单,控制时序由软件实现,可以实现高速单片机与液晶显示模块的接口。电路图如图4-3所示。在图中以 P1口作为数据口,P3.4为CSA,P3.3为CSB,P3.2为使能端,P3.1为R/W和P3.0为D/I信号。电位器用于显示对比度的调节。 第五章、软件实现 5.1 主程序流程图 在本章里,先介绍C语言开发的优势,然后介绍LCD的显示原理、模块的软件特性等,接下来便是最主要的整个程序的设计。下图式整个系统的软件流程,如图5-1,图5-2,图5-3所示。 图5-1主程序流程图 图5-2速度控制程序 图5-3中断程序 5.2主程序编程 C语言是一种编译型的结构化程序设计语言,具有简单的语法结构和强大的处理功能,具有运行速度快、编译效率高,移植性好和可读性强等多种优点,可以实现对系统便件的直接操作。用C语言来编写目标系统软件,可以大大缩短开发周期,且明显地增加软件的可读性,便于改进和扩充,从而开发出大规模、高性能的应用系统。其优势如下[7][8]: 1、省去了人工分配单片机资源的工作,在汇编语言中要为每一个子程序分配单片机的资源。在使用C语言后,只要在代码中申明一下变量的类型,编译器就会自动分配相关资源,根本不需要人工干预,从而有效地避免了人工分配单片机资源的差错。 2、汇编语言的可移植性很差,而C语言只要将一些与硬件相关的代码作适当的修改,就可以方便地移植到其它种类的单片机上。 3、C语言提供auto、static、flash等存储类型,针对单片机的程序存储空间、数据存储空间与EEPROM空间自动为变量合理地分配空间,而且C语言提供复杂的数据类型,极增强了程序处理能力和灵活性。C编译器能够自动实现中断服务程序的现场保护和恢复,并且提供常用的标准函数库,供用户使用。并且C编译器能自动生成一些硬件的初始化代码。 4、对于一些复杂系统的开发,可以通过移植(或C编译器提供)的实时操作系统来实现。 正由于C语言在系统开发中的优势,这次设计的所有程序设计都将采用C语言编写,且通过ICCAVR编译器操作AVR的硬件资源。 5.2.1 主程序代码 //***************************head.h*****************************// #ifndef _HEAD_H #define _HEAD_H #include<avr/io.h> #include<util/delay.h> #include<avr/interrupt.h> #include<avr/signal.h> #include<math.h> #define TOP OCR1A #define PWMCONREG1 TCCR1A #define PWMCONREG2 TCCR1B #define PWM_IO DDRD|=_BV(PD5) #define L298_DIR PORTD #define L298_OUT DDRD|=0xfc #define RESET 0X40 #define S_CONTROL L298_DIR|=CONTROL #define C_CONTROL L298_DIR&=~CONTROL #define ADC_OUT DDRA //ADC模数转换寄存器宏 #define ADCWAYREG ADMUX #define ADCCONREG ADCSRA #define ADCIOSFR SFIOR #define ADCDATL ADCL #define ADCDATH ADCH #define ADCDAT ADC #define AD_EN ADEN #define AD_SC ADSC #define MODE1 1 //半步工作 #define MODE2 2 //基本步距 #define HALFMODESTR "HALF STEP MODE?" //工作方式字符串宏 #define NORMALSTR "NORMAL MODE?" //***********************head.h*********************************// //****************************PWM.c*******************************// #include"head.h" void PWM(unsigned pps) //脉冲控制函数 { counter=0; vn=0; topfix=1000000/pps; n1=((10000-topfix)/STEP+2)*(2*N) ; if(n<2*n1) { display_str(0,0,"error! ") ; return ;} n2=n-n1; TOP=10000; PWMCONREG1=0X41; //设置PWM模式 PWM_IO ; //置 PWM口为输出(PD5) SEI; //使能全局中断 OPEN_CMP1A; //使能输出比较匹配A中断 PWMCONREG2=0X11; //设置PWM模式 while(1) { if(((key_value=key())=='4')&&!ky) {PWMCONREG2=0; CLI; return ;} else if(counter<n1) {display_str(0,0,"move up...! ") ;} else if(counter==n) display_str(0,0,"stop...! ") ; else if(counter>n2) {display_str(0,0,"move down...! ") ; } else display_str(0,0,"isopluse...!") ; adcdisplay(); } } //************************PWM.c********************************// //***************************L298.c*******************************// #include"head.h" void double_half_mode1(void) //半步工作方式 { HALF; S_CONTROL; } void double_full_mode2(void) //两相激磁基本步距 { FULL; S_CONTROL; } //on-off mode模式执行子函数 void L297_1(unsigned char mode ,char direction,unsigned pps) { ky=0; n=0xffffffff; L298_OUT; S_RESET; switch(mode) //L298工作模式选择 { case 1: double_half_mode1(); break; case 2: double_full_mode2(); break; default : display_str(0,0,"mode error!"); } switch(direction) //正反方向选择 { case '+': CW; break; case '-': CCW; break; default : display_str(0,0,"direction error!"); } PWM(pps); display_str(0,0," Stop! "); } // dot-place mode 模式执行子函数 void L297_2(unsigned char mode ,char direction,unsigned pps) { ky=1; L298_OUT; S_RESET; switch(mode) //L298工作模式选择 { case 1: double_half_mode1(); break; case 2: double_full_mode2(); break; default : display_str(0,0,"mode error!"); } switch(direction) //正反方向选择 { case '+': CW; break; case '-': CCW; break; default : display_str(0,0,"direction error!"); } n=n*2; PWM(pps); //调用PWM函数 } //************************L298.c**********************************// //****************************main.c******************************// #include"head.h" void set_fre(void) //频率设定子函数 { clear(); //清屏 display_str(0,0,"1000pps"); while(1) { do { key_value=key(); if(key_value=='4') return ; }while(!key_value) ; if(key_value=='2') { ch=(ch+1>=58)?'1':(ch+1) ; fre=(fre+1000>=10000)?1000:(fre+1000); } else if(key_value=='3') { ch=(ch-1<=48)?'9':(ch-1) ; fre=(fre-1000<=0)?9000:(fre-1000) ; } display_char(0,0,ch); } } 5.2.2液晶显示汉字 LCD本身不发光只是调节光的亮度,目前市面上的LCD显示器都是利用液晶的扭曲一向列效应制成,这是一种电场效应,夹在两片导电玻璃电极间的液晶经过一定处理,它部的分子呈直角扭曲,当线性偏振光透过其偏振面便会旋转一个直角。当在玻璃电极上加上电压后,在电场作用下,液晶的扭曲结构消失,偏振光便可以直接通过。当去掉电场后液晶分子又恢复取扭曲结构。把这样的液晶置于两个偏振片之间,改变偏振片相对位置就可以得到白底黑子或黑底白字的显示形式。 1、LCD模块的说明 本设计采用的LCD是精电蓬远显示技术公司生产的MGLS系列图形液晶显示模块,其藏KS0108B/HD61202控制器。KS0108B与其兼容控制驱动器( HD61202 )的指令系统比较简单,一共只有7条指令,从作用上可分为两类。第一条指令和第二条指令为显示状态设置类;其余指令为数据读/写操作指令。下面是各个指令的功能: 表5-1读状态指令 R/W RS DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0 1 0 BUSY 0 ON/OFF REST 0 0 0 0 状态字是计算机了解HD61202与其兼容控制驱动器当前状态,或是HD61202与其兼容控制驱动器向计算机提供其部状态的唯一的信息渠道。状态字为一字节,其中仅有3位有效位,它们是: BUSY表示当前HD61202接口控制电路运行状态。BUSY=1表示HD61202正在处理计算机发来的指令或数据。此时接口电路被封锁,不能接受除读状态字以外的任何操作。BUSY=0表示HD61202接口电路已处于“准备好”状态,等待计算机的访问。 ON/OFF表示当前的显示状态。ON/OFF=1表示关显示状态;ON/OFF=0表示开显示状态。 RESET表示当前HD61202的工作状态,即反映RST端的电平状态。当RST为低电平状态时,HD61202处于复位工作状态,RESET=1;当RST为高电平状态时,HD61202为正常工作状态,RESET=0。 在指令设置和数据读写时要注意状态字中的BUSY标志。只有在BUSY=0时,计算机对HD61202的操作才能有效,因此计算机在每次对HD61202操作之前,都要读出状态字以判断BUSY是不为“0”。若不为“0”,则计算机需要等待,直至BUSY=0为止。 表5-2 显示开关指令 R/W RS DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0 0 0 0 0 1 1 1 1 1 1/0 该指令设置显示开/关触发器的状态,由此控制显示数据锁存器的工作方式,从而控制显示屏上的显示状态。D位为显示开/关控制位。当D=1为开显示设置,显示数据锁存器正常工作,显示屏上呈现所需的显示效果。此时在状态字中ON/OFF=0;当D=0为关显示设置,显示数据锁存器被置零,显示屏呈不显示状态,但显示存储器并没有被破坏,在状态字中ON/OFF=1。 表5-3显示起始行设置指令 R/W RS DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0 0 0 1 1 显示起始行( 0-63 ) 该指令设置了显示起始行寄存器的容。HD61202有64行显示的管理能力,该指令中L5~L0为显示起始行的地址,取值在0~3FH( 1~64行)围,它规定了显示屏上最顶一行所对应的显示存储器的行地址。如果定时间隔地,等间距地修改( 如加1或减1)显示起始行寄存器的容,则显示屏将呈现显示容向上或向下平滑滚动的显示效果。 表5-4页面地址设置指令 R/W RS DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0 0 0 1 0 1 1 1 该指令设置了页面地址——X地址寄存器的容。HD61202将显示存储器分成8页,指令代码中P2-P0就是要确定当前所要选择的页面地址,取值围为0-7H,代表第1-8页。该指令规定了以后的读/写操作将在哪一个页面上进行。 表5-5列地址设置指令 R/W RS DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0 0 0 0 1 显示列地址( 0~63 ) 该指令设置了Y地址计数器的容,C5~C0=0~3FH( 1~64 )代表了某一页面上的某一个单元地址,随后的一次读或写数据将在这个单元上进行。Y地址计数器具有自动加1功能,在每上次读/写数据后它将自动加1,所以在连续进行读/写数据时,Y地址计数器不必每次都设置一次。 页面地址的设置和列地址的设置将显示存储器单元唯一的确定下来,为后来的显示数据的读/写作了地址的选通。 表5-6写数据指令 R/W RS DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0 0 1 写  数   据 该操作将8位数据写入先前已确定的显示存储器的单元。操作完成后列地址计数器自动加1。 表5-7读数据指令 R/W RS DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0 1 1    读  显  示  数  据 该操作将HD61202接口部的输出寄存器容读出,然后列地址计数器自动加一。必须注意的是,进行读操作之前,必须有一次空读操作,紧接着再读才会读出所要读的单元中的数据。 2、LCD的简单编程 void lcd_send(unsigned char temp) { LCD_DAR&=0X0F; //清高四位 LCD_DAR|=(temp&0XF0); //发送高四位 temp<<=4; e_h2l(); //产生下降沿 _delay_us(4); LCD_DAR&=0X0F; LCD_DAR|=temp; //发送低四位 e_h2l(); } void lcd_(unsigned char comm) { RS_L; //选择指令寄存器 _delay_us(20); lcd_send(comm); } void lcd_data(unsigned char dat) { RS_H; _delay_us(20); lcd_send(dat); } 毕业设计总结 当毕业论文写到这里的时候,为期一学期的毕业设计基本要画上句号了,四个月的时间可以说长也可以说短,但这一百多天的时间里,在老师的耐心指导下,自己可谓有了一个全新的提高。与同组人的通力配合下,毕业设计也较顺利圆满地完成了。 一开始拿到这个课题确实也是一头的雾水,不知道该如何的下手,也就在毕业设计的开始阶段,老师为我们指出了此课题的大概方向和需要查阅的相关书籍以与在后面会遇到的主要问题,当时可谓受益颇多。接下来便是查阅相关的文献资料,我用了两周左右的时间对C语言重新学习了一遍,这也为后面的实际编程打了下了基础。结合本次的设计,我也需了解控制芯片ATmega16L的相关知识,特别是它的智力指令系统,而之前我们只学习过51系列单片机,所以对于这一部分也是相当的重要。AVR单片机是一种全新配置的精简指令集单片机。它吸取了PIC和8051单片机的优点,符合了目前单片机的应用趋势。其程序可以多次更改而不必浪费单片机和电路板,而且其程序采用C语言编程,具有汇编语言编程所不可比拟的优势。在学习了相关于本次设计的知识后,我便开始了实际的设计部分,在这个过程中确实也遇到了相当的问题和困难,比如控制器件的选择,软件编程等等。 实践是检验真理的唯一标准,经过几年的理论学习而这次在即将走向工作岗位的时候能将理论与实践相结合的机会来锻炼自己可谓是难得的一次提高,感在此次设计过程中给与我极
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传
相似文档                                   自信AI助手自信AI助手

当前位置:首页 > 学术论文 > 其他

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2025 宁波自信网络信息技术有限公司  版权所有

客服电话:4009-655-100  投诉/维权电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服