串行通信和LCD.doc_第1页
串行通信和LCD.doc_第2页
串行通信和LCD.doc_第3页
串行通信和LCD.doc_第4页
串行通信和LCD.doc_第5页
已阅读5页,还剩12页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第七章 UART原理及应用程序设计引言:随着单片机系统的广泛应用和计算机网络技术的普及,单片机的通信功能越来越显得重要。通信有并行和串行两种方式,在单片机系统以及现代单片机测控系统中,信息的交换多采用串行通信方式,单片机通过内部的串行通信口与外部设备进行数据交换,在数据采集和信息处理等众多场合都有着重要应用。本章学习重点1、了解通信的两种常见方式并理解其工作原理2、理解并熟练掌握51单片机串行口的四种工作方式和波特率的设置3、能够对串口通信进行简单应用7.1 并行与串行通信的基本概念1.并行通信并行通信通常是讲数据字节的各位用多条数据线同时进行传送,每一位数据都需要一条传输线,如图7.1.1所示,8位数据总线的通信系统,一次传送8位数据,将需要8条数据线。此外,还需要一条信号线和若干控制信号线,这种方式只适用于短距离的数据传输,如比较老式的打印机就是通过并口方式与计算机连接,现在都用传输速度非常快的USB2.0接口通信了。由于并口通信用的比较少,因此我们这里仅做简单介绍,大家有一个宏观的认识就可以了。图7.1.1 并行通信方式并行通信控制简单、传输速度快;由于传输线较多,长距离传送时成本高且接收方的各位同时接收存在困难。 2.串行通信方式串行通信是将数据字节分成一位一位的形式在一条传输线上逐个地传送。此时只需要一条数据线,外加一条公共信号地线和若干控制信号线。因为一次只能传送一位,所以对于一个字节的数据,至少要分8位才能传送完毕,如图7.1.2所示。图7.1.2 串行通信方式串行通信的过程是:发送时,要把并行数据变成串行数据发送到线路上去,接收时,要把串行信号再变成并行数据,这样才能被计算机及其他设备处理。串行通信的特点:传输线少,长距离传送时成本低,且可以利用电话网等现成的设备,但数据的传送控制比并行通信复杂。 串行通信又有两种方式:异步串行通信和同步串行通信。3.异步串行通信异步通信是指通信的发送与接收设备使用各自的时钟控制数据的发送和接收过程。为使双方的收发协调,要求发送和接收设备的时钟尽可能一致。如图7.1.3所示。7.1.3 异步串行通信异步通信是以字符(构成的帧)为单位进行传输,字符与字符之间的间隙(时间间隔)是任意的,但每个字符中的各位是以固定的时间传送的,即字符之间不一定有“位间隔”的整数倍的关系,但同一字符内的各位之间的距离均为“位间隔”的整数倍。异步通信一帧字符信息由4部分组成:起始位、数据位、奇偶校验位和停止位,如图7.1.4所示。有的字符信息也有带空闲位形式,即在字符之间有空闲字符。图7.1.4 异步串行通信数据格式异步通信的特点:不要求收发双方时钟的严格一致,实现容易,设备开销较小,但每个字符要附加23位用于起止位,各帧之间还有间隔,因此传输效率不高。在单片机与单片机之间,单片机与计算机之间通信时,通常采用异步串行通信方式。此种通信方式也是我们本章讲解的重点。4.同步串行通信方式在异步通信中,每个字符要用起始位和停止位作为字符开始和结束的标志,占用了时间,所以在数据块传递时,为了提高速度,常去掉这些标志,采用同步传送。由于数据块传递开始要用同步字符来指示,同时要求由时钟来实现发送端与接收端之间的同步,故硬件较复杂。单片机很少采用这种通信方式,在此我们不再详述。5.串行通信的数据传送方向一般情况下,串行数据传送是在两个通信端进行的。数据的传送方向有三种:单工通信、半双工通信和全双工通信。(1)单工:单工是指数据传输仅能沿一个方向,不能实现反向传输。(2)半双工:半双工是指数据传输可以沿两个方向,但需要分时进行。(3)全双工:全双工是指数据可以同时进行双向传输。 三种制式示意图如下图7.1.5所示。单工 半双工 全双工图7.1.5 串行通信三种制式示意图7.2串行通信口的控制在MCS51系列单片机的特殊功能寄存器中,有4个与串行通信有关,分别为SCON、PCON、IE和IP。其中,SCON和PCON直接控制串行口的中作方式。一、串行控制寄存器SCON串行控制寄存器SCON用于设置串行口的工作方式、监视串行口工作状态、发送与接收的状态控制等。它是一个既可字节寻址又可位寻址的特殊功能寄存器,字节地址位98H。SCON的格式见表71.表71 串行口控制寄存器SCON的格式SM0SM1SM2RENTB8RB8TIRI9F9E9D9C9B9A9998(1)SM0、SM1:串行口工作方式选择位,可选择4种工作方式。表72列出了这四种工作方式。表72 串行口的四种工作方式SM0 SM1工作方式功能说明0 00同步移位寄存器方式(用于扩展I/O口),波特率fosc/12 0 1110位异步收发(8位数据),波特率可变(由定时器T1设置) 1 0211位异步收发(9位数据),波特率为fosc/64或fosc/32 1 1311位异步收发(9位数据),波特率可变(由定时器T1设置)(2)SM2:多机通信控制位,主要用于方式2和方式3。SM2=1,允许多机通信;SM2=0,禁止多机通信。在方式0时,SM2必须是0。在方式1时,若SM2=1,则只有接收到有效停止位时,RI才置1。(3)REN:允许串行接收位。由软件置REN=1,则启动串行口接收数据;若软件置REN=0,则禁止接收。(4)TB8:在方式2或方式3中,是发送数据的第九位,可以用软件规定其作用。可以用作数据的奇偶校验位,或在多机通信中,作为地址帧/数据帧的标志位。在方式0和方式1中,该位未用。(5)RB8:在方式2或方式3中,是接收到数据的第九位,作为奇偶校验位或地址帧/数据帧的标志位。在方式1时,若SM2=0,则RB8是接收到的停止位。(6)TI:发送中断标志位。串行口在工作方式0时,串行发送第八位数据结束时,TI由硬件自动置“1”,向CPU发送中断请求,在CPU响应中断后,必须用软件清零;在其他几种工作方式中,该位在停止位开始发送前自动置“1”,向CPU发送中断请求,在CPU响应中断后,也必须用软件清零。(7)RI接收中断标志位。在方式0时,当串行接收第8位数据结束时,或在其它方式,串行接收停止位的中间时,由内部硬件使RI置1,向CPU发中断申请,在CPU响应中断后,也必须在中断服务程序中,用软件将其清0,以准备开始接收下一帧数据。在系统复位时,SCON的所有位均被清0.二、电源控制寄存器PCON电源控制寄存器PCON只有第七位SMOD与串行口有关,PCON的格式见表7-3.表7-3 电源控制寄存器PCON的格式SMODGF1GF0PDIDLD7D3D2D1D0SMOD位波特率选择位。在方式1、2和3中起作用。若SMOD=0,波特率不变;若SMOD=1,波特率加倍。当系统复位时,SMOD=0.控制字的其余各位与串行口无关。三、串口的四种工作方式1.方式0方式0时,串行口为同步移位寄存器的输入输出方式。主要用于扩展并行输入或输出口。这种方式不适合用于两个MCS51单片机之间的串行通信。方式0以8位数据位一帧,不设起始位和停止位,先发送或接收最低位。波特率是固定的fosc/12。(1) 数据发送发送过程中,当CPU执行一条将数据写入发送缓冲器SBUF的指令时,产生一个正脉冲,串行口开始即把SBUF中的8位数据以fosc/12的固定波特率从RXD引脚串行输出,低位在先,TXD引脚输出同步移位脉冲,发送完8位数据置“1”中断标志位TI。时序图如图7.2.1所示。 图7.2.1 方式0发送时序(2) 方式0接收方式0接收时,REN位串行口允许接收控制位,REN=0,禁止接收;REN=1,允许接收接收。当向CPU串行口的SCON寄存器写入控制字时,产生一个正脉冲,串行口即开始接收数据。引脚RXD为数据输入端,TXD为移位脉冲信号输出断,接收器也以fosc/12的固定频率采样RXD引脚的数据信息,当接收器收到8位数据时置“1”中断标志RI。表示一帧数据接收完毕,可进行下一帧数据的接收。时序图如图7.2.2所示。图7.2.2 方式0接收时序2.方式1当SM0SM1=01时,串行通信口工作于方式1.此时可发送或接收的一帧信息共10位,1位起始位(高电平“0”)、8位数据位(D0D7)和一位停止位(低电平“1”)(1)数据发送发送数据时,只要用指令将数据写入发送缓冲SBUF时,发送控制器在移位脉冲(由定时器T1产生的信号经16或32分频得到)的控制下,先从TXD引脚输出一个起始位,然后再逐位将8位数据从TXD短送出,当最后一位数据发送完毕,发送控制器马上将SCON的TI位置“1”,向CPU发出中断请求,同时从TXD端输出停止位(高电平)。(2)数据接收在REN=1时,方式1允许接收。串行口开始采样RXD引脚,当采样到“1”至“0”的负跳变信号时,确认是开始位0,就开始启动接收,将输入的8位数据逐位移入内部的输入移位寄存器。如果接收不到起始位,则重新检测RXD引脚上是否有负跳变信号。当一帧数据接收完毕后,必须同时满足一下2个条件,这帧数据接收才真正有效RI=0,即无中断请求,或者在上一帧数据接收完成时,RI=1发出的中断请求已被响应,SBUF中的数据已被取走,“SBUF”已空。SM2=0若这两个条件不能同时满足,接收到的数据不装入SBUF,该帧数据将丢弃通常我们在做单片机与单片机串口通信、单片机与计算机串口通信、计算机与计算机串口通信时,基本都选择方式1,因此这种方式大家务必要完全掌握。3.方式2串行口工作于方式2时,每帧数据均为11位,即1位起始位0,8位数据位,1位可编程的第9位数据和1位停止位。其中第九位数据位可作为奇偶校验位,也可作为多机通信的数据、地址位。(1)数据发送发送前,先根据通信协议由软件设置TB8(第9位数据)。然后将要发送的数据写入SBUF,即可启动发送过程。串口能自动将TB8取走,并装入到第9位数据位的位置,再逐一发送出去。发送一帧信息后,则将TI置“1”。(2)数据接收在方式2时,需要先设置SCON中的REN=1,串行通信口才允许接收数据,然后当RXD端检测到有负跳变时,即说明外部设备发来了数据的起始位,开始接收此帧数据的其余数据。当一帧数据接收完毕以后,必须同时满足以下2个条件,这帧数据接收才真正有效。 RI=0,意味着接收缓冲器为空。SM2=0。当上述两个条件满足时,接收到的数据送入SBUF,第9位数据送入RB8,并由硬件自动置为1.若不满足这两个条件,接收的信息将被丢弃。4.方式3当SM0SM1=11时,串行通信口工作于方式3.方式3与方式2一样,传送的一帧数据都是11位的,工作原理相同。两者的区别仅在于波特率不同。三、波特率的计算在串行通信中,收发双方对发送或接收数据的速率要有约定。通过软件可对单片机串行口编程为四种工作方式,其中方式0和方式2的波特率是固定的,而方式1和方式3的波特率是可变的,由定时器T1的溢出率来决定。 串行口的四种工作方式对应三种波特率。由于输入的移位时钟的来源不同,所以,各种方式的波特率计算公式也不相同。方式0的波特率 = fosc/12方式2的波特率 =(2SMOD/64) fosc 方式1的波特率 =(2SMOD/32)(T1溢出率)方式3的波特率 =(2SMOD/32)(T1溢出率)T1溢出率=Fosc/12*【256-TH1】7.3 串口通信应用程序设计串行口工作之前,应对其进行初始化,主要是设置产生波特率的定时器1、串行口控制和中断控制。具体步骤如下: 确定T1的工作方式(编程TMOD寄存器); 确定串行口控制(编程SCON和PCON寄存器); 计算T1的初值,装载TH1、TL1; 启动T1(编程TCON中的TR1位);串行口在中断方式工作时,要进行中断设置(编程IE、IP寄存器)。因为方式1是最常见也是我们最常用的一种串口工作方式,下面我们将按照上面的步骤以及根据前面所讲方式1的特点来设计常见的用方式1接收和发送数据的两个应用程序,以便加深对串行通信的理解。实例1:EX7_1 单片机向计算机发送数据#include /包含单片机寄存器的头文件unsigned char code Tab =0xFE,0xFD,0xFB,0xF7,0xEF,0xDF,0xBF,0x7F;FB F7 EF DF BF 7F FE FDFE FD FB F7 EF DF BF 7F/流水灯控制码,该数组被定义为全局变量void Send(unsigned char dat) SBUF=dat; /将待发数据写入发送缓冲器 while(TI=0)/若发送中断没有置1(正在发送),就等待 ;/空操作 TI=0;/用软件将TI清零void delay(void) unsigned char m,n; for(m=0;m200;m+) for(n=0;n250;n+) ;void main(void) unsigned char i; TMOD=0x20; /TMOD=0010 0000B,定时器T1工作于方式2 SCON=0x40; /SCON=0100 0000B,串口工作方式1 PCON=0x00; /PCON=0000 0000B,波特率9600 TH1=0xfd; /根据规定给定时器T1赋初值 TL1=0xfd; /根据规定给定时器T1赋初值 TR1=1; /启动定时器T1 while(1) for(i=0;i8;i+) /模拟检测数据 Send(Tabi); /发送数据i delay(); /150ms发送一次数据 程序解析:因为一个程序的执行时从主函数开始的,所以我们也直接进入主函数从主函数讲起。进入主函数后,首先是对定时器T1和串行口控制寄存器的初始化,这部分按照前面所讲的初始化步骤做就可以。本程序中我们使定时器T1工作于方式2,串行口工作于方式1,波特率设为9600。初始化完成后即进入while循环,反复调用send子函数。这个程序共有两个子程序,一个时发送子函数一个时延时子函数,延时函数我们在这里不再赘述,重点看发送子函数。进入发送程序后,先把数据写入发送缓冲器SBUF,然后方式1数据发送的步骤将数据发送给计算机,当最后一位数据发送完毕,发送控制寄存器马上将SCON的TI位置“1”,置“1”后即跳过while循环(不再执行空操作),最后还需用软件将TI置0,等待下一组数据的发送。注:本程序需用到串口调试助手才能观察到应有现象,串口调试助手已在程序文件夹中 实例2:EX7_2 单片机接收计算机送出的数据#include /包含单片机寄存器的头文件sbit duan=P16;/定义数码管的段选使能控制端sbit wei=P17;/定义数码管的位选使能控制端unsigned char Receive(void) unsigned char dat; while(RI=0) /只要接收中断标志位RI没有被置1 ; /等待,直至接收完毕(RI=1) RI=0; /为了接收下一帧数据,需将RI清0 dat=SBUF; /将接收缓冲器中的数据存于dat return dat;void main(void)wei=0;/将数码管的位选关闭,防止发送数据把数码管也点亮duan=0;/将数码管的段选关闭,防止发送数据把数码管也点亮TMOD=0x20; /定时器T1工作于方式2 SCON=0x50; /SCON=0101 0000B,串口工作方式1,允许接收(REN=1)PCON=0x00; /PCON=0000 0000B,波特率9600TH1=0xfd; /根据规定给定时器T1赋初值TL1=0xfd; /根据规定给定时器T1赋初值 TR1=1; /启动定时器T1 REN=1; /允许接收 while(1) P0=Receive(); /将接收到的数据送P1口显示 程序解析:这个程序的功能是由计算机向单片机发送数据到单片机的P0口来点亮LED灯,发送不同的数据会出现不同的现象。依然是首先进入主程序,因为本实验板的LED和数码管是共用P0口的,所以一进来先把数码管的段选和位选关闭,以免影响观察效果。接着进行初始化设置,使定时器T1工作在方式2,串口工作于方式1且允许接收(即令REN=1),波特率设为9600(即PCON=0x00),和上个程序一样依然按照初始化的步骤来做。然后进入主程序的while循环,不断扫描接收程序,当接收程序收到数据后即赋给P0口。再看接收子程序,因为初始化时已令REN=1,所以可以接收数据,串行口开始采样RXD引脚,当采样到起始位(即由“1”跳变到“0”)时,就开始接收数据,直到这一帧数据接收完毕时中断标志位RI被置“1”,然后为了接收下一帧数据需用软件将RI置0。将接收缓冲器中的数据存于dat,返回值dat赋给P0口。第八章 通用型液晶工作原理及应用程序设计引言:普通的LED数码管只能用来显示数字,如果要显示英文、汉字或图像,则必须使用液晶显示器。液晶显示器的英文名称是Liquid Crystal Display,简称LCD。液晶显示器作为显示器件具有体积小、重量轻、功耗低等优点,所以LCD日渐成为各种便携式电子产品的理想显示器,如电子表、计算器上的显示器等。本章学习目标1.掌握常用1602液晶的操作方法2.学会简单的液晶应用程序设计8.1 通用1602液晶的操作方法一、液晶概述液晶显示的原理是利用液晶的物理特性,通过电压对显示区域进行控制,只要输入所需的控制电压,就可以显示出字符。LCD能够显示字符的关键在于其控制器,目前大部分点阵型LCD都使用日立公司的HD44780集成电路作为控制器。HD44780是集驱动器与控制器于一体,专用于字符显示的液晶显示控制驱动电路,其原理较为复杂,但应用却非常简单,我们本章重在将其应用。各种型号的液晶通常是按照显示字符的行数或液晶点阵的行、列数来命名的。比如:1602的意思是每行显示16个字符,一共可以显示两行;类似的命名还有0801,0802,1601等,这类液晶通常是字符型液晶,即只能显示ASCII码字符,如数字、大小写字母、各种符号等。12232型液晶属于图形型液晶,它的意思是液晶由122列、32行组成,即共有122*32个点来显示各种图形,我们可以通过程序控制这122*32个点中的任一个点显示或不显示。类似的命名还有12864,19264,192128,320240等,根据客户需求,厂家可以设计出任意数组合的的点阵液晶。二、液晶相关预备知识1.接口信号说明1602型液晶接口信号说明如下表8.1.1所示。表8.1.1 1602液晶接口信号说明2.基本操作时序读状态 输入:RS=L, R/=H, E=H 输出:D0D7状态字。读数据 输入:RS=H, R/=H, E=H 输出:无写指令 输入:RS=L, R/=L, D0D7=指令码,E=高脉冲 输出:D0D7=数据写数据 输入:RS=L, R/=L, D0D7=数据, E=高脉冲 输出:无 3.1602型LCD显示字符的过程要用1602型LCD显示字符必须解决3个问题:(1)待显字符ASCII标准码的产生;(2)液晶显示模式的设置;(3)字符显示位置的指定(1)字符ASCII标准码的产生常用字符的标准ASCII码无需人工产生,在程序中定义字符常量或字符串常量时,C语言在编译后会自动产生其标准ASCII码。只要将生成的标准ASCII码通过单片机的I/O口送入数据显示用存储器,内部控制线路就会自动将字符传送到显示器上。(2)液晶显示模式设置要让液晶显示字符,必须对有无光标、光标的移动方向、光标是否闪烁及字符的移动方向等进行设置,才能获得所需的显示效果。1602液晶显示模式设置是通过控制指令对内部的控制器控制而实现的,常用的控制指令见表8.1.2.表 8.1.2 1602液晶显示模式控制指令表指令名称指令功能指令的二进制代码D7D6D5D4D3D2D1D0显示模式设置设置位16*2显示,5*7点阵,8位数据接口00111000显示开/关及光标设置D=1开显示;D=0关显示C=1显示光标;C=0不显示光标B=1光标闪烁;B=0光标不显示00001DCB输入模式设置N=1地址指针加1,光标加1N=0地址指针减1,光标减1S=1当写一个字符时,整屏显示左移(N=1)或右移(N=0),以得到光标不移动而屏幕移动的效果S=0当写一个字符时整屏显示不移动000001NS整屏移动整屏左移,同时光标跟随移动00011000整屏右移,同时光标跟随移动00011100其他设置显示清屏:1.数据指针清0 2.所有显示清000000001显示回车:数据指针清000000010例如,要将显示模式设置位为“16*2显示,5*7点阵,8位数据接口”只要将液晶模块写二进制代码00111000B,即16进制代码38H就可以了。如果要求液晶开显示、有光标且光标闪烁,那么根据显示开/关及光标设置指令,只要将D=1,C=1和B=1,也就时是向液晶模块写入二进制代码00001111B就可以实现了。(3)字符显示位置的指定1602型LCD内部地址如图81所示。1602型液晶字符显示位置的确定方法规定为:“80H+地址码(000FH,404FH)”。例如要将某字符显示在第2行第6列,则确定地址的指令代码应为80H+45H。其中,当我们向图中的00-0F、40-4F地址中的任一处写入显示数据时,液晶都可以立即显示出来,当写入到10-27或50-67地址时,必须通过移屏指令将他们移入可显示区域方能正常显示出来。图81 1602型LCD内部地址4.液晶的状态字说明注:原则上每次对控制器进行读写操作之前,都必须进行读写检测,确保STA7为0.实际上,由于单片机的操作速度慢于液晶控制器的反应速度,因此可以不进行读写检测,或只进行简短延时即可。8.2 1602型液晶应用程序设计在开始应用程序设计之前,我们先来总结一下1602型LCD驱动程序的设计步骤。对LCD显示模式进行初始化设置,包括使液晶的显示清0、数据指针清0,光标显示/不显示、光标闪烁/不闪烁、地址指针的移动方向等。1. 写地址,即赋予所要显示的第一个字符首地址2. 写数据3. 自动显示接下来我们就按照以上步骤设计相应的程序 EX 8_1 实现在1602液晶第一行显示“WELCOME TO:”,第二行显示“WWW.SYE8.COM” #includeunsigned char code table=WELCOME TO:;unsigned char code table1=WWW.SYE8.COM;sbit lcden=P34;/液晶使能端sbit lcdrs=P35;/液晶数据命令选择端sbit lcdrw=P36;/液晶读写选择端sbit duan=P16;/申明U1锁存器的锁存端sbit wei=P17;/申明U2锁存器的锁存端unsigned char num;void Delay(unsigned int z)/延时子函数unsigned int x,y;for(x=z;x0;x-)for(y=110;y0;y-);void Write_command(unsigned char com)lcdrs=0;/根据规定,RS和R/W同时为低电平时,可以写入指令lcdrw=0;lcden=0;/E置低电平,根据写操作时序,写指令时E为高脉冲,即让E从0到1发送正跳变,所以应先置0P0=com;/将指令或地址送入数据口P0Delay(5);/延时5ms给硬件一个反应时间lcden=1;/E置高电平,产生正跳变Delay(5);/延时5ms给硬件一个反应时间lcden=0;/当E由高电平跳变成低电平时,LCD开始执行命令void Write_data(unsigned char shuju)lcdrs=1;/RS为高电平,R/W为低电平时,可以写入数据lcdrw=0;lcden=0;/E置低电平,根据写操作时序,写指令时E为高脉冲,即让E从0到1发送正跳变,所以应先置0P0=shuju;/将数据送入P0口,即将数据写入LCDDelay(5);/延时5ms给硬件一个反应时间lcden=1;/E置高电平,产生正跳变Delay(5);/延时5ms给硬件一个反应时间lcden=0;/当E由高电平跳变成低电平时,LCD开始执行命令void Initiate()duan=0;wei=0;Write_command(0x38);/设置16X2显示,5X7点阵,8位数据接口Write_command(0x0c);/设置开显示,不显示光标Write_command(0x06);/写一个字符后地址指针加01Write_command(0x01);/显示清零,数据指针清零void Main()Initiate();/调用初始化函数Write_command(0x80);/将数据指针定位到第一行第一个字处for(num=0;num11;num+)/采用循环方式将WELCOME TO:显示到液晶屏的第一行Write_data(tablenum);Delay(5);Write_command(0x80+0x40);/转到第二行时需要重新定位数据指针for(num=0;num12;num+)/采用循环方式将WWW.SYE8.COM显示到液晶屏的第二行Write_data(table1num);Delay(5);while(1);/程序终止于此处程序解析:按照程序执行的步骤,我们从主函数开始讲起。进入主函数后首先进行液晶的初始化,初始化完成之后赋予所要显示的第一个字符首地址(即Write_command(0x80))。本列中写命令操作和写数据操作都写成了独立的函数,这样方便调用。整个程序的设计都是按照本节开头讲的步骤来进行的。EX 8_2 实现第一二行从右侧分别移入“Hello everyone!”和“Welcome to here!” 并停留在屏上#includeunsigned char code table=Hello everyone!;unsigned char code table1=Welcome to here!;sbit lcden=P34;/液晶使能端sbit lcdrs=P35;/液晶数据命令选择端sbit lcdrw=P36;/液晶读写选择端sbit duan=P16;/申明U1锁存器的锁存端sbit wei=P17;/申明U2锁存器的锁存端unsigned char num;void Delay(unsigned

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论