资源描述
单片机应用技术项目化教程第十章项目六-单片机控制字符液晶显示单片机应用技术项目化教程指针的应用优点:C语言的灵魂,是C语言的重要特征。利用指针可以直接快速的处理内存中的各种数据结构的数据,特别是数组、字符串和内存的动态分配。它为函数间各类数据的传递提供了简捷便利的方法。指针使C语言简洁、紧凑、高效。缺点:指针使用上的灵活性容易导致指针滥用而可能使程序失控。单片机应用技术项目化教程变量的指针unsignedchara=1;unsignedcharb=2;unsingedintc=3;unsignedlongd=4;STC89C52的RAM地址片内0 x000 xFF片外0 x000 xFF变量取地址:&a,&b,&c,&d内存地址内存地址存储的数据存储的数据0 x070 x07d d0 x060 x06d d0 x050 x05d d0 x040 x04d d0 x030 x03c c0 x020 x02c c0 x010 x01b b0 x000 x00a a单片机应用技术项目化教程指针变量的声明和初始化特别区分:1、在C语言中,一种说法是地址等同于指针,变量的地址就是变量的指针。2、指针变量简称指针,通常所说的指针都是指针变量。区分方法:&a一律称之为取地址。只要说指针,就是指指针变量。p=&a通常的说法是指针指向了a这个变量。*和&互为逆运算,x=*p;方法1:unsignedchara;unsignedchar*p=&a;方法2:unsignedchara;unsignedchar*p;p=&a;单片机应用技术项目化教程指针变量重点区分1、普通变量VS指针变量unsignedchara;a=1;.a=2;unsignedchar*p;p=&a;.p=&b;是说明p指向的变量是unsignedchar类型。2、定义指针变量*pVS取值运算*punsignedchar*p;仅仅是说明p是个指针变量,*不具备任何其他的运算功能。unsignedchara=1;unsignedcharb=2;unsignedchar*p;p=&a;b=*p;计算完毕,b的值是1。*指针的简单实例*单片机应用技术项目化教程指向数组元素的指针unsignedcharnumber10=0,1,2,3,4,5,6,7,8,9;unsignedchar*p;unsignedchar*q;p=&number0;q=&number9;1、比较运算2、指针和整数之间的加减运算3、两个指针变量在一定条件下的减法运算特别注意:数组名字代表了数组元素的首地址。p=&number0;等价于p=number;pi等价于*(p+i)单片机应用技术项目化教程字符数组和字符指针整型常量:1、2、3、100浮点型常量:3.14、0.56、-4.8字符型常量:a、b、1字符串常量:a、abc、1234、1234abcd直接常量与符号常量constunsignedintBAUD=9600;unsignedcharcodeLedChar=.;#defineBAUD9600单片机应用技术项目化教程字符数组和字符指针普通字符:aAunsignedcharx=a;转义字符:如右所示字符串常量:“a”1234welcometowww.kingst.org程序实例字符串、字符数组、常量数组字符形式字符形式含义含义n换行t横向跳格(相当于Tab)v竖向跳格b退格r光标移到行首反斜杠字符单引号字符”双引号字符f走纸换页0空值单片机应用技术项目化教程LCD1602原理LCD(LiquidCrystalDisplay):液晶显示器的缩写,一种被动式的显示器,即液晶本身并不发光,而是经液晶经过处理后能改变光线通过方向的特性,而达到白底黑字或黑底白字显示的目的。液晶显示器具有功耗低、抗干扰能力强等优点,广泛用在仪器仪表和控制系统中。单片机应用技术项目化教程LCD显示器的分类按排列形状分:字段型、点阵字符型和点阵图形。(1)字段型广泛用于电子表、数字仪表、计算器中。(2)点阵字符型显示字母、数字、符号。它是由57或54点阵组成,广泛应用在单片机应用系统中。(3)点阵图形型笔记本电脑和彩色电视等设备中。单片机应用技术项目化教程1602LCD液晶简介1602液晶也叫1602字符型液晶它是一种专门用来显示字母、数字、符号等的点阵型液晶模块它有若干个5X7或者5X11等点阵字符位组成,每个点阵字符位都可以显示一个字符。每位之间有一个点距的间隔每行之间也有也有间隔起到了字符间距和行间距的作用,正因为如此所以他不能显示图形(用自定义CGRAM,显示效果也不好)1602LCD是指显示的内容为16X2,即可以显示两行,每行16个字符液晶模块(显示字符和数字)。目前市面上字符液晶绝大多数是基于HD44780液晶芯片的,控制原理是完全相同的,因此基于HD44780写的控制程序可以很方便地应用于市面上大部分的字符型液晶。单片机应用技术项目化教程LCD1602实物图单片机应用技术项目化教程1602LCD的特性+5V电压,对比度可调内含复位电路提供各种控制命令,如:清屏、字符闪烁、光标闪烁、显示移位等多种功能有80字节显示数据存储器DDRAM内建有160个5X7点阵的字型的字符发生器CGROM8个可由用户自定义的5X7的字符发生器单片机应用技术项目化教程引脚及功能简介单片机应用技术项目化教程LCD1602内部结构3个部分:LCD控制器、LCD驱动器、LCD显示装置单片机应用技术项目化教程LCD1602液晶接口单片机应用技术项目化教程HD44780工作原理HD44780内置了DDRAM(显示数据存储RAM),CGROM(字符存储ROM)和CGRAM(用户自定义RAM)。DDRAM就是显示数据RAM,用来寄存待显示的字符代码。共80个字节,其地址和屏幕的对应关系如下表:单片机应用技术项目化教程第二行也一样用前16个地址。对应如下:DDRAM地址与显示位置的对应关系我们往DDRAM里的00H地址处送一个数据,譬如0 x31(数字1的代码)并不能显示1出来。这是令初学者很容易出错的地方,原因就是如果你要想在DDRAM的00H地址处显示数据,则必须将00H加上80H,即0X80+0 x00,若要在DDRAM的01H处显示数据,则必须将01H加上80H即0X80+0 x01。依次类推。单片机应用技术项目化教程1602液晶模块内部的字符发生存储器(CGROM)已经存储了160个不同的点阵字符图形,如下表所示,这些字符有:阿拉伯数字、英文字母的大小写、常用的符号、和日文假名等,每一个字符都有一个固定的代码,比如大写的英文字母“A”的代码是01000001B(41H),显示时模块把地址41H中的点阵字符图形显示出来,我们就能看到字母“A”单片机应用技术项目化教程对DDRAM的内容和地址操作,HD44780的指令集及其设置说明,共有11条指令:基本操作时序:读状态输入:RS=L,RW=H,E=H输出:DB0DB7=状态字写指令输入:RS=L,RW=L,E=下降沿脉冲,DB0DB7=指令码输出:无读数据输入:RS=H,RW=H,E=H输出:DB0DB7=数据写数据输入:RS=H,RW=L,E=下降沿脉冲,DB0DB7=数据输出:无单片机应用技术项目化教程清屏指令功能:清除液晶显示器,即将DDRAM的内容全部填入“空白”的字符码20H;光标归位,即将光标撤回液晶显示屏的左上方;将地址计数器(AC)的值设为0。单片机应用技术项目化教程光标归位指令功能:把光标撤回到显示器的左上方;把地址计数器(AC)的值设置为0;保持DDRAM的内容不变单片机应用技术项目化教程输入模式设置指令输入模式设置指令功能:设定每次写入功能:设定每次写入1位数据后光标的移位方向,位数据后光标的移位方向,并且设定每次写入的一个字符是否移动。并且设定每次写入的一个字符是否移动。参数设定的情况如下所示:参数设定的情况如下所示:位名位名设置设置I/D0=写入新数据后光标左移写入新数据后光标左移1=写写入新数据后光标右移入新数据后光标右移S0=写入新数据后显示屏不移动写入新数据后显示屏不移动1=写入新数据后显示屏整体右移写入新数据后显示屏整体右移1个字个字单片机应用技术项目化教程显示开关控制指令功能:控制显示器开/关、光标显示/关闭以及光标是否闪烁。参数设定的情况如下:位名设置D0=显示功能关1=显示功能开C0=无光标1=有光标B0=光标不闪烁1=光标闪烁单片机应用技术项目化教程设定显示屏或光标移动方向指令功能:使光标移位或使整个显示屏幕移位。参数设定的情况如下:S/CR/L设定情况00光标左移1格,且AC值减101光标右移1格,且AC值加110显示器上字符全部左移一格,但光标不动11显示器上字符全部右移一格,但光标不动单片机应用技术项目化教程功能设定指令(非常重要的指令)功能:设定数据总线位数、显示的行数及字型。参数设定的情况如下:位名设置DL0=数据总线为4位1=数据总线为8位N0=显示1行1=显示2行F0=57点阵/每字符1=510点阵/每字符单片机应用技术项目化教程设定CGRAM地址指令功能:设定下一个要存入数据的CGRAM的地址。单片机应用技术项目化教程读取忙信号或AC地址指令功能:读取忙碌信号BF的内容,BF=1表示液晶显示器忙,暂时无法接收单片机送来的数据或指令;当BF=0时,液晶显示器可以接收单片机送来的数据或指令;读取地址计数器(AC)的内容。单片机应用技术项目化教程数据写入DDRAM或CGRAM指令功能:将字符码写入DDRAM,以使液晶显示屏显示出相对应的字符;将用户自己设计的图形存入CGRAM。单片机应用技术项目化教程从CGRAM或DDRAM读出数据的指令功能:读取DDRAM或CGRAM中的内容。基本操作时序:读状态输入:RS=L,RW=H,E=H输出:DB0DB7=状态字写指令输入:RS=L,RW=L,E=下降沿脉冲,DB0DB7=指令码输出:无读数据输入:RS=H,RW=H,E=H输出:DB0DB7=数据写数据输入:RS=H,RW=L,E=下降沿脉冲,DB0DB7=数据输出:无单片机应用技术项目化教程读状态输入:RS=0,RW=1,E=1读数据输入:RS=1,RW=1,E=1单片机应用技术项目化教程写指令输入:RS=0,RW=0,E=下降沿脉冲,DB0DB7=指令码写数据输入:RS=1,RW=0,E=下降沿脉冲,DB0DB7=数据单片机应用技术项目化教程时序参数单片机应用技术项目化教程LCD1602与单片机连接的参考电路单片机应用技术项目化教程LCD1602静态显示程序设计bitlcd_busy()bitresult;LCD_RS=0;LCD_RW=1;LCD_EN=1;delayNOP();result=(bit)(P0&0 x80);LCD_EN=0;return(result);这个函数的作这个函数的作用是检查用是检查LCD是否是否处于忙碌状态,如处于忙碌状态,如果返回值是果返回值是1则表则表示处于忙状态,需示处于忙状态,需要等待,返回值为要等待,返回值为0则表示则表示LCD处于空处于空闲状态,可写指令闲状态,可写指令或者数据。或者数据。单片机应用技术项目化教程voidlcd_wcmd(unsignedcharcmd)while(lcd_busy();LCD_RS=0;LCD_RW=0;LCD_EN=0;_nop_();_nop_();LCD_data=cmd;delayNOP();LCD_EN=1;delayNOP();LCD_EN=0;这个函数的作这个函数的作用是写指令到用是写指令到LCD,cmd是待写的指令,是待写的指令,待写的指令在正确的待写的指令在正确的时序下输入时序下输入D0D7单片机应用技术项目化教程voidlcd_wdat(unsignedchardat)while(lcd_busy();LCD_RS=1;LCD_RW=0;LCD_EN=0;LCD_data=dat;delayNOP();LCD_EN=1;delayNOP();LCD_EN=0;这个函数是写这个函数是写显示数据到显示数据到LCD,与,与上一个函数很相似,上一个函数很相似,只是时序不同,所以只是时序不同,所以一个是写指令,一个一个是写指令,一个是写数据。是写数据。单片机应用技术项目化教程voidlcd_init()delay(15);lcd_wcmd(0 x38);/16*2显示,5*7点阵,8位数据delay(5);lcd_wcmd(0 x38);delay(5);lcd_wcmd(0 x38);delay(5);lcd_wcmd(0 x0c);/显示开,关光标delay(5);lcd_wcmd(0 x06);/移动光标delay(5);lcd_wcmd(0 x01);/清除LCD的显示内容delay(5);这个这个函数的作函数的作用是对用是对LCD进行进行初始化设初始化设置,在置,在main函数函数中需要首中需要首先对先对LCD进行初始进行初始化才能正化才能正确的操作确的操作LCD单片机应用技术项目化教程voidlcd_pos(unsignedcharpos)lcd_wcmd(pos|0 x80);/数据指针=80+地址变量这个函数是设定显示的位置,其中pos即为预设定的位置。单片机应用技术项目化教程voidmain(void)unsignedcharm=0;P0=0 xFF;/置P0口lcd_init();/初始化LCDlcd_pos(0);/设置显示位置为第一行的第1个字符while(diap_1m!=0)lcd_wdat(diap_1m);/显示字符m+;lcd_pos(0 x40);/设置显示位置为第二行第1个字符m=0;while(diap_2m!=0)lcd_wdat(diap_2m);/显示字符m+;while(1)
展开阅读全文