PIC单片机综合实例.ppt

上传人:本田雅阁 文档编号:2126195 上传时间:2019-02-19 格式:PPT 页数:62 大小:3.13MB
返回 下载 相关 举报
PIC单片机综合实例.ppt_第1页
第1页 / 共62页
PIC单片机综合实例.ppt_第2页
第2页 / 共62页
PIC单片机综合实例.ppt_第3页
第3页 / 共62页
亲,该文档总共62页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《PIC单片机综合实例.ppt》由会员分享,可在线阅读,更多相关《PIC单片机综合实例.ppt(62页珍藏版)》请在三一文库上搜索。

1、第十三章 综合实例,2019/2/19,机械工业出版社,Page 2,【学习目标】,了解字符式液晶的显示原理; 掌握字符式液晶的初始化方法; 掌握根据时序图编程程序的方法; 掌握LED点阵显示屏电路设计思想; 理解汉字显示原理; 掌握LED点阵显示屏的编程方法; 掌握光耦的用途和控制方法;,2019/2/19,机械工业出版社,Page 3,第十三章 综合实例,2019/2/19,机械工业出版社,Page 4,第十三章 综合实例,2019/2/19,机械工业出版社,Page 5,液晶分类,笔段式液晶 字符式液晶 图像式液晶 汉字图像式液晶 彩屏液晶,2019/2/19,机械工业出版社,Page

2、6,字符式液晶模块,2019/2/19,机械工业出版社,Page 7,16字符2行显示的字符液晶显示屏简介,内置HD44780控制器:可直接产生192种常见字符图形; 字符编码与ASCII兼容,并且允许用户自编字符用于显示; 只需单一的5V供电即可工作; 重量轻:100g; 体积小:11mm厚; 功耗低:10 - 15 mw; 指令功能强:可组合成各种输入、显示、移位方式以满足不同的要求; 接口简单方便:可与8位微处理器或微控制器相联; 工作温度宽:-20 - 70; 可靠性高:寿命为50,000小时(25)。,2019/2/19,机械工业出版社,Page 8,硬件连接图,2019/2/19,

3、机械工业出版社,Page 9,引脚信号表,2019/2/19,机械工业出版社,Page 10,寄存器选择功能表,2019/2/19,机械工业出版社,Page 11,信号操作时序图,2019/2/19,机械工业出版社,Page 12,关键信号时间宽度,2019/2/19,机械工业出版社,Page 13,对于时间要求的说明,对于上表中的数据在用软件编写操作时序时必须遵守,否则可能无法完成正确操作。例如当PIC16F877主频为20MHz时,一条指令周期仅为0.2us,即200ns,这样在用程序实现此操作时序时在使能信号E置1后要延时3个指令周期(用C语言可以加入三个NOP函数),保证高电平持续时间

4、大于使能信号脉冲宽度Tw的最小值450ns的要求。,2019/2/19,机械工业出版社,Page 14,例题:求向液晶的数据寄存器写入A,题意分析: 题目要求向液晶的数据寄存器写入内容。查前表 可知,RS信号为1,R/W信号为0,根据图中的连接方法可知,RC5应输出1,RC6应输出0。当E信号产生一个脉冲后数据被打入到液晶的数据寄存器中。数据由PORTD提供,E信号由RC7提供。 根据时序图可得到以上信号的输出顺序。用C语言描述如下。,2019/2/19,机械工业出版社,Page 15,LCD_CMD_W_Timing () TRISD=0; /PORTD用于输出数据 TRISC5=0; /R

5、C5用于输出RS信号。 TRISC6=0; /RC6用于输出R/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最小

6、时间长度要求。E由低变高执行至此已经消耗了1200ns(6条指令) ,2019/2/19,机械工业出版社,Page 16,字符液晶的指令集,对字符液晶的控制命令就是通过的特定信号组合而成,下表列出了某种字符液晶能够识别的几条指令。更多内容请参考教材。,2019/2/19,机械工业出版社,Page 17,指令集的实现,/向LCD写指令 void LCD_Write_CMD( unsigned char LCD_CMD) LCD_DATA= LCD_CMD; LCD_CMD_W_Timing () ; DelayMS(1) ; ,2019/2/19,机械工业出版社,Page 18,向LCD写数据,

7、/向LCD写数据 void LCD_Write_Data( unsigned char LCD_CMD) LCD_DATA= LCD_CMD; LCD_DAT_W_Timing() ; DelayMS(1) ; ,2019/2/19,机械工业出版社,Page 19,向LCD输出一个字符,/向LCD输出一个字符 void LCD_Put_Char(unsigned char LCD_Char) LCD_Write_Data(LCD_Char) ; ,2019/2/19,机械工业出版社,Page 20,字符液晶的初始化,液晶模块正确初始化后,即可接收命令来显示字符。,2019/2/19,机械工业出

8、版社,Page 21,字符显示,字符通过DDRAM(动态显示内存区)来显示,每个字符位都对应一个DDRAM地址。 第一行地址:00、01、0F 第二行地址:40、41、4F,2019/2/19,机械工业出版社,Page 22,字符液晶能显示常见的数字、字母和英文标点,2019/2/19,机械工业出版社,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(D

9、D_RAM_BASE + Row * 0x40 + Column); DelayMS(1); ,2019/2/19,机械工业出版社,Page 24,向LCD输出字符串,字符串在RAM中,void LCD_Put_String( char *Str) unsigned char Str_Temp; while (1) Str_Temp = *Str ; if (Str_Temp != 0x00 ) LCD_Write_Data(Str_Temp) ; Str + ; else return ; ,2019/2/19,机械工业出版社,Page 25,第十三章 综合实例,2019/2/19,机械工业

10、出版社,Page 26,2019/2/19,机械工业出版社,Page 27,典型LED点阵显示屏电路设计,LED点阵显示屏的基本显示元件是88LED显示块,如图所示。其原理与数码管类似,由64个LED排成8行8列。同一行的LED阴极连在一起;同一列的LED阳极连在一起。,2019/2/19,机械工业出版社,Page 28,要在88LED显示屏上显示字母E,2019/2/19,机械工业出版社,Page 29,用0代表灭的点,用1代表亮的点,00000000 00111100 00100000 00111100 00100000 00100000 00111100 00000000 0x0,0x3

11、C,0x20,0x3C,0x20,0x20,0x3C,0x0;,2019/2/19,机械工业出版社,Page 30,编程控制88显示屏K1显示字母E的字形,2019/2/19,机械工业出版社,Page 31,题意分析,H0到H7表示行选信号,用PORTD控制。在实际电路中由于LED显示块耗电量比较大,单片机无法直接驱动太多的显示块。所以在实际电路中应该为每个行选信号上加入驱动电路。 L0到L7是用来显示每行的字形数据端口,通过PORTB输出。 要想显示E的字形,根据扫描法思想,就是先把表示E字形的第一行二进制数送L0到L7,而后仅点亮第1行;依次再把表示E字形的第二行二进制数送L0到L7,而后

12、仅点亮第2行; 。,2019/2/19,机械工业出版社,Page 32,关键代码,const unsigned char ZiXing8= 0x0,0x3C,0x20,0x3C,0x20,0x20,0x3C,0x0 ; #define LIE_DIR TRISB / 列端口方向位, #define LIE_PORT PORTB / 列端口 #define HANG_DIR TRISD / 行端口方向位, #define HANG_PORT PORTD / 行端口 for(Hang=0;Hang8;Hang+) LIE_PORT=ZiXingHang; /字形码送列端口显示 HANG_PORT=

13、(unsigned char)1Hang); /指定行 DelayMS(2); /短暂延时造成视觉暂留现象 HANG_PORT=0b11111111; /在送新数据前关闭显示 ,2019/2/19,机械工业出版社,Page 33,显示汉字的原理,2019/2/19,机械工业出版社,Page 34,“中”的字型码,0x01,0x00,0x01,0x00,0x21,0x08,0x3F,0xFC,0x21,0x08,0x21,0x08,0x21,0x08,0x21,0x08, 0x21,0x08,0x3F,0xF8,0x21,0x08,0x01,0x00,0x01,0x00,0x01,0x00,0x

14、01,0x00,0x01,0x00;,2019/2/19,机械工业出版社,Page 35,行译码电路:4-16译码器,2019/2/19,机械工业出版社,Page 36,列电路:串联的移位寄存器,2019/2/19,机械工业出版社,Page 37,组合后的电路,2019/2/19,机械工业出版社,Page 38,实例:在LED点阵显示屏上显示汉字,题意分析 由于PIC单片机具有硬件的移位输出接口SPI,所以本例中列信号L0:L15由DS、SH_CP和ST_CP控制。DS和SH_CP分别连接到PIC硬件SPI模块的SDO和SCK引脚。ST_CP由RC1控制,出现上升沿时74HC595的移位寄存器

15、内容才会输出到其输出引脚上。CS_N由RC0控制。由此可见C口的控制信号都是输出状态即可。 行选择信号H0:H15由DB0:DB3和CS_N控制。DB3:DB0用RD3:RD0控制,所以PORTD应为输出状态。,2019/2/19,机械工业出版社,Page 39,题意分析续,要想显示汉字“中”的字形,根据扫描法思想,把表示“中”字字形码数组的第一和第二个字节依次输出到L0:L15,这可以通过SPI方式顺序发送字形码数组中的前两个字节来实现;而后仅点亮第1行;再把字形码数组的第三和第四个字节通过SPI方式发送到L0:L15,而后仅点亮第2行; 。,2019/2/19,机械工业出版社,Page 4

16、0,关键代码,#define CTRL_DIR TRISC / 控制字节方向位, #define CTRLBYTE PORTC / 控制字节 #define SH_CP RC3 /shift clcok pluse 移位时钟 #define DS RC5 /Serial Data 串行数据 #define ST_CP RC1 /store clock pluse 锁存脉冲, 下降沿锁存 #define CS_N RC0 / 74138片选信号,低电平有效 #define LINESEL PORTD /行选择,低4位有效 #define LINESEL_DIR TRISD /行选择方向位,201

17、9/2/19,机械工业出版社,Page 41,SPIInit(),void SPIInit() TRISC3=0; / RC3/SCK为输出 TRISC5=0; / RC5/SDO为输出 TRISC1=0; / RC1用来控制74HC595的锁存信号 SSPIF=0; / 清空标志位 CKE=0; / 上升沿发送数据,为了与74HC595时序匹配 CKP=1; / 空闲为高电平 SSPEN=1; / 使能MSSP模块 SSPM3=0; SSPM2=0; SSPM1=1; SSPM0=0; / SSPM=0010,工作模式为SPI主控 ,2019/2/19,机械工业出版社,Page 42,SPI

18、Send,void SPISend(unsigned char data) SSPBUF=data; / 把要发送的数据放在SSPBUF中 while(SSPIF=0) / SSPIF为0说明未发送完成 /循环退出说明发送完毕 SSPIF=0; / SSPIF必须手动清零 ,2019/2/19,机械工业出版社,Page 43,显示字形的代码,for(Line=0;Line16;Line+) SPISend(ZiXingLine1); / 低八位 SPISend(ZiXing(Line1)+1); / 高八位 LINESEL=Line; /选择要显示的行 ST_CP=1; / 产生上升沿使595

19、芯片输出数据 ST_CP=0; / 回到低电平,为下次上升沿做准备 CS_N=0; / 使能74LS138芯片输出 DelayMS(2); /延时产生视觉暂留现象 CS_N=1; / 关闭74LS138芯片输出 ,2019/2/19,机械工业出版社,Page 44,第十三章 综合实例,2019/2/19,机械工业出版社,Page 45,电子密码锁控制器:需求分析,不需要钥匙,开锁者输入密码即可控制锁打开,锁的关闭是手动或自动的; 开锁者有权利修改自己的密码; 为了防止开锁者穷举密码,密码输入错误三次后即报警,5分钟后方能继续使用; 为了提示开锁者正确操作,应该用显示设备输出相关提示信息; 当开

20、锁者有误操作时应该有声音警告; 电池供电;,2019/2/19,机械工业出版社,Page 46,硬件设备需求,为了输入密码,需要设计按键输入电路,为了提高安全性,又考虑到密码锁的空间,一般的系统都是数字密码,这里可以采用44矩阵键盘来实现。 为了防止断电后密码丢失,需要把用户密码记录在非易失性存储器中,例如EEPROM中。由于PIC单片机大都内置EEPROM,可以省略外挂EEPROM。 为了实现报警和误操作提示,可以采用简单的声音报警。为了降低成本,一般采用简单的5V压电式蜂鸣器来实现声音的播放,这种蜂鸣器驱动电流在10mA左右,用PIC单片机的I/O引脚可以直接驱动。,2019/2/19,机

21、械工业出版社,Page 47,硬件设备需求续,由于提示信息由很多种。为了能让使用者看明白,这里采用字符式液晶来显示,在实际应用中,读者可以购买内置中文字库的液晶来代替字符式液晶。 单纯的电子锁的种类很多,但其控制原理都是通过输入信号的导通和断开来实现锁的开关,一般的电子锁都需要10V乃至更高的驱动电压。这样无法用一个I/O引脚直接驱动,需要外加适当的隔离和驱动电路控制。 电池供电的系统一般都要求低功耗,本系统对速度要求不高,所以可采用38.768KHz的低主频晶振作为系统主频。,2019/2/19,机械工业出版社,Page 48,硬件设备需求续,需要一片单片机来完成各种设备之间的逻辑控制,由于

22、本书以PIC16F877为例讲解,这里就采用PIC16F877,在具体项目,可根据I/O引脚等特殊需求选择其它款PIC单片机。例如本项目中要求有矩阵键盘输入、字符液晶输出,这样所用引脚大约22个左右(不考虑引脚复用情况下)。为了给将来的升级留出余地,建议选择28脚的单片机。为了适应电池供电,建议采用低功耗型号。为了记录密码,最好有内置EEPROM。为了简化电路设计,最好I/O引脚可以直接驱动蜂鸣器。综上所述,可以选择PIC16F886单片机。,2019/2/19,机械工业出版社,Page 49,硬件设计,密码键盘部分电路的设计; 字符液晶部分电路的设计; 锁控制部分电路的设计; 发声部分电路的

23、设计,2019/2/19,机械工业出版社,Page 50,密码键盘部分电路的设计;,2019/2/19,机械工业出版社,Page 51,字符液晶部分电路的设计,2019/2/19,机械工业出版社,Page 52,锁控制部分电路的设计;,2019/2/19,机械工业出版社,Page 53,发声部分电路的设计,2019/2/19,机械工业出版社,Page 54,软件设计,2019/2/19,机械工业出版社,Page 55,题意分析,程序的主循环应该是等待用户的按键输入。为了简单起见,设定密码为6位数字。使用前文完成的函数GetKeyValue即可获得输入的键值。而后根据键值来决定下一步的动作。输入

24、的按键有五种情况: 第一种是0到9之间的数字,应将其按顺序作为密码的一部分并在液晶上显示“*”号; 第二种是退格按键,在密码内容中应删除上次输入的数字,显示上也应退一格并删除一个“*”号; 第三种是确定键,表示密码输入完毕,进入密码比较流程;当密码匹配时则发出开锁信号,否则显示错误信息并用声音提示,当连续输入三次密码不对,则长时间发声报警。过一段时间后方能继续重试密码; 第四种是修改密码键,只有密码输入正确开锁后才有效,其它状态时无效按键,无效时按下应通过声音提示用户输入错误。修改密码过程与输入密码过程类似; 第五种是C、D和E键,本系统中未用到这几个键,应提示用户输入错误;,2019/2/1

25、9,机械工业出版社,Page 56,题意分析续,为了防止系统掉电,用户的密码应该保存在非易失性存储器中,本例中直接保存在PIC单片机内部的EEPROM中即可,HT-PIC有专用的内部EEPROM读写函数eeprom_read和eeprom_write,很容易实现EEPROM的存取。在系统初始化时需要从EEPROM读取掉电前的用户密码,用于与开锁者输入的密码做比较。密码修改成功后,新密码应该写入EEPROM;,2019/2/19,机械工业出版社,Page 57,题意分析续,本设计中采用字符式液晶作为显示界面,应该通过液晶模块显示每一次操作的提示语,便于用户理解。 在发声功能上,警告声音为蜂鸣器发

26、一短声音,报警声音为一长声音即可。,2019/2/19,机械工业出版社,Page 58,关键代码:把旧密码从PIC内置EEPROM读出,for(i=0;i9) /用键盘输入的密码肯定小于9 / 若读出的某个密码大于9说明密码已经被意外修改过了 / 加载默认密码 for(i=0;i6;i+) / 执行到这里上一层循环的i就不用了 / 默认密码是123456 strPasswordi=i+1; break; ,2019/2/19,机械工业出版社,Page 59,键盘处理代码说明,key=GetKeyValue(); / 从4*4小键盘获得按键键值 if(key!=NO_KEY) /如果有按键按下

27、if(key =9) / 无符号数肯定大于等于0 if(InputNumbersMAX_PASSWORD_LENGTH) / 记录用户密码 userPasswordInputNumbers=key; LCD_Put_Char(*); / 显示字形% InputNumbers+; /输入的数字数目加一 else beep(); / 发出警告声音 ,2019/2/19,机械工业出版社,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; /开锁,2019/2/19,机械工业出版社,Page 61,作业,编程控制1616LED点阵显示汉字“国”的字形,2019/2/19,机械工业出版社,Page 62,提问时间,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 其他


经营许可证编号:宁ICP备18001539号-1