《PIC单片机综合实例.ppt》由会员分享,可在线阅读,更多相关《PIC单片机综合实例.ppt(62页珍藏版)》请在三一办公上搜索。
1、第十三章 综合实例,2023/6/23,机械工业出版社,Page 2,【学习目标】,了解字符式液晶的显示原理;掌握字符式液晶的初始化方法;掌握根据时序图编程程序的方法;掌握LED点阵显示屏电路设计思想;理解汉字显示原理;掌握LED点阵显示屏的编程方法;掌握光耦的用途和控制方法;,2023/6/23,机械工业出版社,Page 3,第十三章 综合实例,2023/6/23,机械工业出版社,Page 4,第十三章 综合实例,2023/6/23,机械工业出版社,Page 5,液晶分类,笔段式液晶字符式液晶图像式液晶汉字图像式液晶彩屏液晶,2023/6/23,机械工业出版社,Page 6,字符式液晶模块,
2、2023/6/23,机械工业出版社,Page 7,16字符2行显示的字符液晶显示屏简介,内置HD44780控制器:可直接产生192种常见字符图形;字符编码与ASCII兼容,并且允许用户自编字符用于显示;只需单一的5V供电即可工作;重量轻:100g;体积小:11mm厚;功耗低:10-15 mw;指令功能强:可组合成各种输入、显示、移位方式以满足不同的要求;接口简单方便:可与8位微处理器或微控制器相联;工作温度宽:-20-70;可靠性高:寿命为50,000小时(25)。,2023/6/23,机械工业出版社,Page 8,硬件连接图,2023/6/23,机械工业出版社,Page 9,引脚信号表,20
3、23/6/23,机械工业出版社,Page 10,寄存器选择功能表,2023/6/23,机械工业出版社,Page 11,信号操作时序图,2023/6/23,机械工业出版社,Page 12,关键信号时间宽度,2023/6/23,机械工业出版社,Page 13,对于时间要求的说明,对于上表中的数据在用软件编写操作时序时必须遵守,否则可能无法完成正确操作。例如当PIC16F877主频为20MHz时,一条指令周期仅为0.2us,即200ns,这样在用程序实现此操作时序时在使能信号E置1后要延时3个指令周期(用C语言可以加入三个NOP函数),保证高电平持续时间大于使能信号脉冲宽度Tw的最小值450ns的要
4、求。,2023/6/23,机械工业出版社,Page 14,例题:求向液晶的数据寄存器写入A,题意分析:题目要求向液晶的数据寄存器写入内容。查前表 可知,RS信号为1,R/W信号为0,根据图中的连接方法可知,RC5应输出1,RC6应输出0。当E信号产生一个脉冲后数据被打入到液晶的数据寄存器中。数据由PORTD提供,E信号由RC7提供。根据时序图可得到以上信号的输出顺序。用C语言描述如下。,2023/6/23,机械工业出版社,Page 15,LCD_CMD_W_Timing()TRISD=0;/PORTD用于输出数据 TRISC5=0;/RC5用于输出RS信号。TRISC6=0;/RC6用于输出R
5、/W信号。TRISC7=0;/RC7用于输出E信号。RC7=1;/E信号初值是0 RC5=1;/RS=1 RC6=0;/R/W=0 PORTD=A;/要打入的数据放到PORTD中 RC7=1;/E信号由低变高,由于每条指令时200ns,已经保证了Tas要求。NOP();NOP();NOP();/三个NOP满足Tw最小时间宽度 RC7=0;/E信号再由高变低,打入数据。由于数据早已经赋值,所以Tdsw肯定满足NOP();NOP();/满足TcycE最小时间长度要求。E由低变高执行至此已经消耗了1200ns(6条指令),2023/6/23,机械工业出版社,Page 16,字符液晶的指令集,对字符液
6、晶的控制命令就是通过的特定信号组合而成,下表列出了某种字符液晶能够识别的几条指令。更多内容请参考教材。,2023/6/23,机械工业出版社,Page 17,指令集的实现,/向LCD写指令void LCD_Write_CMD(unsigned char LCD_CMD)LCD_DATA=LCD_CMD;LCD_CMD_W_Timing();DelayMS(1);,2023/6/23,机械工业出版社,Page 18,向LCD写数据,/向LCD写数据void LCD_Write_Data(unsigned char LCD_CMD)LCD_DATA=LCD_CMD;LCD_DAT_W_Timing(
7、);DelayMS(1);,2023/6/23,机械工业出版社,Page 19,向LCD输出一个字符,/向LCD输出一个字符void LCD_Put_Char(unsigned char LCD_Char)LCD_Write_Data(LCD_Char);,2023/6/23,机械工业出版社,Page 20,字符液晶的初始化,液晶模块正确初始化后,即可接收命令来显示字符。,2023/6/23,机械工业出版社,Page 21,字符显示,字符通过DDRAM(动态显示内存区)来显示,每个字符位都对应一个DDRAM地址。第一行地址:00、01、0F第二行地址:40、41、4F,2023/6/23,机械
8、工业出版社,Page 22,字符液晶能显示常见的数字、字母和英文标点,2023/6/23,机械工业出版社,Page 23,常用函数的实现:Set_Cursor,/设置显示坐标/Row=(0 or 1)/Column=(0 to 15)void LCD_Set_Cursor(unsigned char Row,unsigned char Column)LCD_Write_CMD(DD_RAM_BASE+Row*0 x40+Column);DelayMS(1);,2023/6/23,机械工业出版社,Page 24,向LCD输出字符串,字符串在RAM中,void LCD_Put_String(cha
9、r*Str)unsigned char Str_Temp;while(1)Str_Temp=*Str;if(Str_Temp!=0 x00)LCD_Write_Data(Str_Temp);Str+;else return;,2023/6/23,机械工业出版社,Page 25,第十三章 综合实例,2023/6/23,机械工业出版社,Page 26,2023/6/23,机械工业出版社,Page 27,典型LED点阵显示屏电路设计,LED点阵显示屏的基本显示元件是88LED显示块,如图所示。其原理与数码管类似,由64个LED排成8行8列。同一行的LED阴极连在一起;同一列的LED阳极连在一起。,2
10、023/6/23,机械工业出版社,Page 28,要在88LED显示屏上显示字母E,2023/6/23,机械工业出版社,Page 29,用0代表灭的点,用1代表亮的点,00000000001111000010000000111100001000000010000000111100000000000 x0,0 x3C,0 x20,0 x3C,0 x20,0 x20,0 x3C,0 x0;,2023/6/23,机械工业出版社,Page 30,编程控制88显示屏K1显示字母E的字形,2023/6/23,机械工业出版社,Page 31,题意分析,H0到H7表示行选信号,用PORTD控制。在实际电路中由
11、于LED显示块耗电量比较大,单片机无法直接驱动太多的显示块。所以在实际电路中应该为每个行选信号上加入驱动电路。L0到L7是用来显示每行的字形数据端口,通过PORTB输出。要想显示E的字形,根据扫描法思想,就是先把表示E字形的第一行二进制数送L0到L7,而后仅点亮第1行;依次再把表示E字形的第二行二进制数送L0到L7,而后仅点亮第2行;.。,2023/6/23,机械工业出版社,Page 32,关键代码,const unsigned char ZiXing8=0 x0,0 x3C,0 x20,0 x3C,0 x20,0 x20,0 x3C,0 x0;#define LIE_DIR TRISB/列端
12、口方向位,#define LIE_PORT PORTB/列端口#define HANG_DIR TRISD/行端口方向位,#define HANG_PORT PORTD/行端口for(Hang=0;Hang8;Hang+)LIE_PORT=ZiXingHang;/字形码送列端口显示 HANG_PORT=(unsigned char)1Hang);/指定行 DelayMS(2);/短暂延时造成视觉暂留现象 HANG_PORT=0b11111111;/在送新数据前关闭显示,2023/6/23,机械工业出版社,Page 33,显示汉字的原理,2023/6/23,机械工业出版社,Page 34,“中”
13、的字型码,0 x01,0 x00,0 x01,0 x00,0 x21,0 x08,0 x3F,0 xFC,0 x21,0 x08,0 x21,0 x08,0 x21,0 x08,0 x21,0 x08,0 x21,0 x08,0 x3F,0 xF8,0 x21,0 x08,0 x01,0 x00,0 x01,0 x00,0 x01,0 x00,0 x01,0 x00,0 x01,0 x00;,2023/6/23,机械工业出版社,Page 35,行译码电路:4-16译码器,2023/6/23,机械工业出版社,Page 36,列电路:串联的移位寄存器,2023/6/23,机械工业出版社,Page
14、37,组合后的电路,2023/6/23,机械工业出版社,Page 38,实例:在LED点阵显示屏上显示汉字,题意分析 由于PIC单片机具有硬件的移位输出接口SPI,所以本例中列信号L0:L15由DS、SH_CP和ST_CP控制。DS和SH_CP分别连接到PIC硬件SPI模块的SDO和SCK引脚。ST_CP由RC1控制,出现上升沿时74HC595的移位寄存器内容才会输出到其输出引脚上。CS_N由RC0控制。由此可见C口的控制信号都是输出状态即可。行选择信号H0:H15由DB0:DB3和CS_N控制。DB3:DB0用RD3:RD0控制,所以PORTD应为输出状态。,2023/6/23,机械工业出版
15、社,Page 39,题意分析续,要想显示汉字“中”的字形,根据扫描法思想,把表示“中”字字形码数组的第一和第二个字节依次输出到L0:L15,这可以通过SPI方式顺序发送字形码数组中的前两个字节来实现;而后仅点亮第1行;再把字形码数组的第三和第四个字节通过SPI方式发送到L0:L15,而后仅点亮第2行;.。,2023/6/23,机械工业出版社,Page 40,关键代码,#define CTRL_DIR TRISC/控制字节方向位,#define CTRLBYTE PORTC/控制字节#define SH_CP RC3/shift clcok pluse 移位时钟#define DS RC5/Se
16、rial Data 串行数据#define ST_CP RC1/store clock pluse 锁存脉冲,下降沿锁存#define CS_N RC0/74138片选信号,低电平有效#define LINESEL PORTD/行选择,低4位有效#define LINESEL_DIR TRISD/行选择方向位,2023/6/23,机械工业出版社,Page 41,SPIInit(),void SPIInit()TRISC3=0;/RC3/SCK为输出 TRISC5=0;/RC5/SDO为输出 TRISC1=0;/RC1用来控制74HC595的锁存信号 SSPIF=0;/清空标志位 CKE=0;/
17、上升沿发送数据,为了与74HC595时序匹配 CKP=1;/空闲为高电平 SSPEN=1;/使能MSSP模块 SSPM3=0;SSPM2=0;SSPM1=1;SSPM0=0;/SSPM=0010,工作模式为SPI主控,2023/6/23,机械工业出版社,Page 42,SPISend,void SPISend(unsigned char data)SSPBUF=data;/把要发送的数据放在SSPBUF中 while(SSPIF=0)/SSPIF为0说明未发送完成/循环退出说明发送完毕 SSPIF=0;/SSPIF必须手动清零,2023/6/23,机械工业出版社,Page 43,显示字形的代码
18、,for(Line=0;Line16;Line+)SPISend(ZiXingLine1);/低八位 SPISend(ZiXing(Line1)+1);/高八位 LINESEL=Line;/选择要显示的行 ST_CP=1;/产生上升沿使595芯片输出数据 ST_CP=0;/回到低电平,为下次上升沿做准备 CS_N=0;/使能74LS138芯片输出 DelayMS(2);/延时产生视觉暂留现象 CS_N=1;/关闭74LS138芯片输出,2023/6/23,机械工业出版社,Page 44,第十三章 综合实例,2023/6/23,机械工业出版社,Page 45,电子密码锁控制器:需求分析,不需要钥
19、匙,开锁者输入密码即可控制锁打开,锁的关闭是手动或自动的;开锁者有权利修改自己的密码;为了防止开锁者穷举密码,密码输入错误三次后即报警,5分钟后方能继续使用;为了提示开锁者正确操作,应该用显示设备输出相关提示信息;当开锁者有误操作时应该有声音警告;电池供电;,2023/6/23,机械工业出版社,Page 46,硬件设备需求,为了输入密码,需要设计按键输入电路,为了提高安全性,又考虑到密码锁的空间,一般的系统都是数字密码,这里可以采用44矩阵键盘来实现。为了防止断电后密码丢失,需要把用户密码记录在非易失性存储器中,例如EEPROM中。由于PIC单片机大都内置EEPROM,可以省略外挂EEPROM
20、。为了实现报警和误操作提示,可以采用简单的声音报警。为了降低成本,一般采用简单的5V压电式蜂鸣器来实现声音的播放,这种蜂鸣器驱动电流在10mA左右,用PIC单片机的I/O引脚可以直接驱动。,2023/6/23,机械工业出版社,Page 47,硬件设备需求续,由于提示信息由很多种。为了能让使用者看明白,这里采用字符式液晶来显示,在实际应用中,读者可以购买内置中文字库的液晶来代替字符式液晶。单纯的电子锁的种类很多,但其控制原理都是通过输入信号的导通和断开来实现锁的开关,一般的电子锁都需要10V乃至更高的驱动电压。这样无法用一个I/O引脚直接驱动,需要外加适当的隔离和驱动电路控制。电池供电的系统一般
21、都要求低功耗,本系统对速度要求不高,所以可采用38.768KHz的低主频晶振作为系统主频。,2023/6/23,机械工业出版社,Page 48,硬件设备需求续,需要一片单片机来完成各种设备之间的逻辑控制,由于本书以PIC16F877为例讲解,这里就采用PIC16F877,在具体项目,可根据I/O引脚等特殊需求选择其它款PIC单片机。例如本项目中要求有矩阵键盘输入、字符液晶输出,这样所用引脚大约22个左右(不考虑引脚复用情况下)。为了给将来的升级留出余地,建议选择28脚的单片机。为了适应电池供电,建议采用低功耗型号。为了记录密码,最好有内置EEPROM。为了简化电路设计,最好I/O引脚可以直接驱
22、动蜂鸣器。综上所述,可以选择PIC16F886单片机。,2023/6/23,机械工业出版社,Page 49,硬件设计,密码键盘部分电路的设计;字符液晶部分电路的设计;锁控制部分电路的设计;发声部分电路的设计,2023/6/23,机械工业出版社,Page 50,密码键盘部分电路的设计;,2023/6/23,机械工业出版社,Page 51,字符液晶部分电路的设计,2023/6/23,机械工业出版社,Page 52,锁控制部分电路的设计;,2023/6/23,机械工业出版社,Page 53,发声部分电路的设计,2023/6/23,机械工业出版社,Page 54,软件设计,2023/6/23,机械工业
23、出版社,Page 55,题意分析,程序的主循环应该是等待用户的按键输入。为了简单起见,设定密码为6位数字。使用前文完成的函数GetKeyValue即可获得输入的键值。而后根据键值来决定下一步的动作。输入的按键有五种情况:第一种是0到9之间的数字,应将其按顺序作为密码的一部分并在液晶上显示“*”号;第二种是退格按键,在密码内容中应删除上次输入的数字,显示上也应退一格并删除一个“*”号;第三种是确定键,表示密码输入完毕,进入密码比较流程;当密码匹配时则发出开锁信号,否则显示错误信息并用声音提示,当连续输入三次密码不对,则长时间发声报警。过一段时间后方能继续重试密码;第四种是修改密码键,只有密码输入
24、正确开锁后才有效,其它状态时无效按键,无效时按下应通过声音提示用户输入错误。修改密码过程与输入密码过程类似;第五种是C、D和E键,本系统中未用到这几个键,应提示用户输入错误;,2023/6/23,机械工业出版社,Page 56,题意分析续,为了防止系统掉电,用户的密码应该保存在非易失性存储器中,本例中直接保存在PIC单片机内部的EEPROM中即可,HT-PIC有专用的内部EEPROM读写函数eeprom_read和eeprom_write,很容易实现EEPROM的存取。在系统初始化时需要从EEPROM读取掉电前的用户密码,用于与开锁者输入的密码做比较。密码修改成功后,新密码应该写入EEPROM
25、;,2023/6/23,机械工业出版社,Page 57,题意分析续,本设计中采用字符式液晶作为显示界面,应该通过液晶模块显示每一次操作的提示语,便于用户理解。在发声功能上,警告声音为蜂鸣器发一短声音,报警声音为一长声音即可。,2023/6/23,机械工业出版社,Page 58,关键代码:把旧密码从PIC内置EEPROM读出,for(i=0;i9)/用键盘输入的密码肯定小于9/若读出的某个密码大于9说明密码已经被意外修改过了/加载默认密码 for(i=0;i6;i+)/执行到这里上一层循环的i就不用了/默认密码是123456 strPasswordi=i+1;break;,2023/6/23,机
26、械工业出版社,Page 59,键盘处理代码说明,key=GetKeyValue();/从4*4小键盘获得按键键值 if(key!=NO_KEY)/如果有按键按下 if(key=9)/无符号数肯定大于等于0 if(InputNumbersMAX_PASSWORD_LENGTH)/记录用户密码 userPasswordInputNumbers=key;LCD_Put_Char(*);/显示字形%InputNumbers+;/输入的数字数目加一 else beep();/发出警告声音,2023/6/23,机械工业出版社,Page 60,键盘处理代码说明续,else switch(key)case ENTER:/逐个键值比较,看密码是否匹配,/这是有问题的,因为用户可能没输入6个字母/当然为了保险起见,要求用户必须输入6个数字也是可行的 for(i=0;iMAX_PASSWORD_LENGTH;i+)if(userPasswordi!=strPasswordi)break;if(i=MAX_PASSWORD_LENGTH)/密码匹配/显示:密码正确锁打开 LOCK=OPEN;/开锁,2023/6/23,机械工业出版社,Page 61,作业,编程控制1616LED点阵显示汉字“国”的字形,2023/6/23,机械工业出版社,Page 62,提问时间,