《实验设备及字符液晶编程技术.ppt》由会员分享,可在线阅读,更多相关《实验设备及字符液晶编程技术.ppt(40页珍藏版)》请在三一办公上搜索。
1、实验箱的总体介绍,TD2410K-1,实验箱介绍,由多个独立的功能电路模块组成,可以自由组合出多个实验项目综合了目前市场的多种最新技术(非接触智能IC卡技术、语音录放技术、usb技术等等各模块之间用拨码开关连通,ON表示接通,硬件结构框图,模块位置图,显示器接口及程序,LCD显示器,字符液晶编程技术,字符液晶接口字符液晶常用函数字符液晶程序设计循环结构程序设计应用实训,LCD1602概述,显示汉字、字符、数字等让产品更具有交互性,1602引脚,字符液晶接口说明,时序,字符液晶特性,液晶显示器有8位数据操作模式和四位数据操作模式,在四位数据操作模式下采用DB4DB7作数据线,DB0DB3不用。可
2、与4位或者8位MPU接口,接口由使能信号E控制,标志位BF为模块内部工作状态标志,MPU访问模块时,首先应判断状态标志位BF;,与MCU接口(8位模式),与AVR MCU接口(4位模式),CAVR液晶编程介绍一,1.声明与LCD通信端口#asm.equ _lcd_port=0 x18#endasm2.加入 lcd.h#include,在使用液晶显示器之前,要设定I/O接口地址和包含lcd.h 头文件。,CAVR液晶编程介绍二,3.与lcd连线方式LCD AVR PortRS(pin4)-bit 0RD(pin 5)-bit 1EN(pin 6)-bit 2DB4(pin 11)-bit 4DB
3、5(pin 12)-bit 5DB6(pin 13)-bit 6DB7(pin 14)-bit 7,CAVR液晶编程介绍三,4.LCD低级函数,void _lcd_ready(void)液晶内部操作忙判断,void _lcd_write_data(unsigned char data)向LCD写一个字节数据,unsigned char lcd_read_byte(unsigned char addr)向LCD读一个字节数据,CAVR液晶编程介绍四,5.LCD高级函数,void lcd_init(unsigned char lcd_columns)初始化液晶列数,光标位于0行0列,void lc
4、d_clear(void)LCD清屏,光标位于0行0列,void lcd_gotoxy(unsigned char x,unsigned char y)设定显示坐标X列Y行,void lcd_putchar(char c)当前位置显示字符C,void lcd_puts(char*str)当前位置显示字符串,void lcd_putsf(char flash*str)显示Flash中字符串,CAVR液晶编程练习一,#include#include#asm.equ _lcd_port=0 x18;PORTB#endasm/定义变量_lcd_port为PORTB,此处为汇编宏命令#include c
5、har*sss=“AVR”;Char flash*aaa=“16”;void main(void)lcd_init(16);/16列数据 l cd_gotoxy(2,0);lcd_putsf(“Hello”);/直接显示字符串只能使用lcd_putsf函数lcd_puts(“sss);lcd_putsf(“aaa);while(1);,字符串String of Char,定义 字符串是用一对双引号括起来的字符序列,这些字符可以是一般的可显示字符,也可以是某些特殊的控制字符;字符串只能用字符数组来处理,没有字符串变量。字符串在内存中存放时,系统将自动在字符串的末尾添加一个字符串的结束标记0(空字
6、符),碰到第一个0就认为字符串处理结束。,字符数组 Array of Char,定义 char str20;/字符串保存在SRAM中char flash string=“SZPT”;/字符串保留在FLASH中初始化 逐个为数组中各元素指定初值字符。char flash str4=w,e,l,l;对一个字符数组指定一个字符串初值。char str=good morning;char str=good morning;,AVR 存储器,AVR具有两个主要的存储器器空间:数据存储器空间和程序存储器空间。ATmega16:16KB的Flash,存放程序指令代码。SRAM数据存储器:32个通用寄存器、6
7、4个I/O存储器、1024Byte内部数据SRAM。EEPROM数据存储器:512B,保存数据。,字符串 String of Char,用字符串给字符数组初始化 char st8=welcome;等价于char st8=w,e,l,c,o,m,e,0;注意:这里的st不是一个字符串变量,而是字符数组的名字,代表字符数组在内存中的起始地址,是一个常量,那么这个赋值表达式是指将字符串中的每一个字符依次赋给以st开始的地址单元。字符串的长度 定义 char ch=Good;则数组ch的元素个数是5,而不是4,也就是说,字符串的长度是双引号中所包括的字符个数加1。,指针和指针变量的概念,内存中每个字节
8、有一个编号-地址,程序中:int i;char k;,i,k,编译或函数调用时为其分配内存单元,变量是对程序中数据存储空间的抽象,指针:一个变量的地址指针变量:专门存放变量地址的变量叫指针变量,2000,指针,指针变量,变量的内容,变量的地址,指针与指针变量,指针与指针变量,指针变量的定义,一、基本术语地址:字节的编号直接引用:通过变量名访问内存单元间接引用:通过变量地址访问内存单元指针:就是地址指针变量:存放指针的变量二、指针变量的定义数据类型*指针变量,*指针变量2;,指针变量定义举例,例如:int*p1,*p2;char*p;,基类型,指针变量的标志,指针变量名,指针变量的使用,指针变量
9、必须先赋值,再使用 main()int i=10;int*p;*p=i;printf(“%d”,*p);,“*”取内容运算符表示:指针变量所指存储单元(地址)的内容,将变量的值送入指针变量指向的存储单元中,指针变量的使用,main()int*p1,*p2,a,b;a=10;b=100;P1=,“&”取地址运算符将变量在内存的地址保存在指针变量中,字符串的指针和指向字符串的指针变量,在语言中,既可以用字符数组表示字符串,也可用字符指针变量来表示。字符串在内存中的起始地址称为字符串的指针。可以定义一个字符指针变量指向一个字符串。,/*定义一:定义并初始化字符指针变量string:用串常量“I lo
10、ve Beijing.”的地址给string赋初值*/char*string=”I love Beijing.”;,/*定义二:先定义字符指针变量string,再用字符串常量“I love Beijing.”给string赋初值*/char*string;string=I love Beijing.;,使用时,系统首先输出string指向的第一个字符,然后使string自动加(指向的地址加1)使之指向下一个字符;重复上述过程,直至遇到字符串结束标志。,字符指针变量与字符数组之比较,虽然用字符指针变量和字符数组都能实现字符串的存储和处理,但二者是有区别的,不能混为一谈。(1)存储内容不同。字符指
11、针变量中存储的是字符串的首地址,而字符数组中存储的是字符串本身(数组的每个元素存放一个字符)。(2)赋值方式不同。对字符指针变量,可采用下面的赋值语句赋值:char*pointer;pointer=This is a example.;而字符数组,虽然可以在定义时初始化,但不能用赋值语句整体赋值。下面的用法是非法的:char char_array20;char_array=This is a example.;/*非法用法*/(3)指针变量的值是可以改变的,字符指针变量也不例外;而数组名代表数组的起始地址,是一个常量,而常量是不能被改变的。,#include#include#asm.equ _
12、lcd_port=0 x18;PORTB#endasm#include void main(void)unsigned char i=0;PORTB=0 x00;DDRB=0 x00;lcd_init(8);/8列数据while(1)lcd_gotoxy(0,0);lcd_putsf(Shenzhen);lcd_gotoxy(0,1);lcd_putsf(sec=);lcd_gotoxy(5,1);lcd_putchar(i+)+0 x30);delay_ms(1000);,?实现功能,LCD显示屏上的显示位置,DDRAM地址与LCD显示屏上的显示位置的对应关系如下:两行显示:,利用CodeW
13、izardAVR生成LCD控制程序代码框架,设置与LCD通信的端口。生成相应代码为:#asm.equ _lcd_port=0 x18#endasm,设置字符液晶每行显示的字符个数。生成相应代码为:lcd_init(8);,字符液晶显示控制的实战演练LCD Display Design,设计内容1:在字符液晶的第一行最左端起显示“Hi,AVR”。(LCD1.c)相关的程序语句:1.#include/包含lcd.h头文件2.#asm/宏汇编命令,.equ _lcd_port=0 x18/定义lcd的I/O端口变量:_lcd_port指向PORTB#endasm3.lcd_init(16);/lcd
14、初始化为2行16列显示方式4.lcd_gotoxy(0,0);/光标定位在lcd的0行0列5.lcd_putsf(“Hi,AVR”);/在光标处显示flash中的字符串6.lcd_puts(string1);/光标处显示保存在SRAM中的字符串变量string1的内容7.lcd_putsf(string2);/光标处显示保存在flash中的字符串变量string1r的内容,课堂练习一,液晶显示编程设计内容一:在字符液晶的第一行最左端起显示“Hi,AVR”液晶显示编程设计内容二:在字符液晶第二行的每隔1秒循环显示数字09。,课堂练习二,液晶显示编程设计内容三:在字符液晶第二行的最左边每隔1秒循环显示时钟的秒数数字059。,提示:1.秒数数字059是数字量,不能直接显示,需将其转换为ASCII码。,?思考:如何将34中的“3”和“4”分别取出?,课堂练习三,液晶显示编程设计内容四:(能力扩展)编程将设计内容1的字符串“Hi,AVR”显示方式改为从字符液晶第一行的左边滚动到右边。,课堂练习四,在LCD上显示时间“10:30”,每次按下按键1,则显示的小时数加1;每次按下按键5,则显示的小时数减1。每次按下按键9,则显示的分钟数加1;每次按下按键13,则显示的分钟数减1。(singlekey2.c),LCD字符发生器,