1 / 102

单片机原理及其应用

单片机原理及其应用. (Principle and Application of Single Chip Microcomputer). 第 1 章 概述 第 2 章 MCS-51 单片机硬件结构 第 3 章 MCS-51 寻址方式和指令系统 第 4 章 MCS-51 汇编程序设计 第 5 章 中断系统 第 6 章 定时器 / 计数器及串行口 第 7 章 存储器扩展 第 8 章 接口电路扩展 第 9 章 应用举例. 8.1 显示器及其接口 8.2 键盘及其接口 8.3 D/A 转换器及其接口 8.4 A/D 转换器及其接口

elroy
Download Presentation

单片机原理及其应用

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 单片机原理及其应用 (Principle and Application of Single Chip Microcomputer)

  2. 第1章 概述 第2章 MCS-51单片机硬件结构 第3章 MCS-51寻址方式和指令系统 第4章 MCS-51汇编程序设计 第5章 中断系统 第6章 定时器/计数器及串行口 第7章 存储器扩展 第8章 接口电路扩展 第9章 应用举例

  3. 8.1 显示器及其接口 8.2 键盘及其接口 8.3 D/A转换器及其接口 8.4 A/D转换器及其接口 8.5 打印机接口* 8.6 拨码盘及语音接口* 第8章接口电路设计

  4. 8.1.1 LED显示器 8.1.2 显示器接口实例 8.1.3 伟福实验系统LED显示器编程 8.1 显示器及其接口

  5. 1.LED显示器结构与原理 LED显示块是由发光二极管来显示字段的显示器件。 在单片机应用系统中通常使用的是八段LED, 有共阴极与共阳极两种,如图8-1所示。八段显示块与单片机接口非常容易。字符显示码(段码)如表8-1所示。 图8-1 八段LED显示块 8.1.1 LED显示器

  6. 表8-1 八段LED的段码

  7. 图8-2 N位LED显示器 2.LED显示器与显示方式 在单片机应用系统中使用LED显示块构成N位LED显示器。图8-2是N位显示器的构成原理。 图8-2 N位LED显示器

  8. 图8-3 四位静态LED显示器电路 LED显示器有两种显示方式: (1)静态显示方式 (各个LED的段码来自不同I/O端口) 亮度高,无闪烁,编程简单,占用端口多。

  9. 图8-4 四位LED动态显示器电路 (2)动态显示方式 (各个LED的段码来自同一个I/O端口) 4个LED段线并联接到同一个I/O端口,LED的共阳极或 共阴极接到不同的I/O线。在某时刻只让一只LED的位选 线有效,配合这时的段码,该位LED显示相应的字符。 依次轮流让不同的LED显示字符,即为动态显示。

  10. 图8-5 八位LED动态显示过程和结果 占用端口少,编程较复杂,占用CPU时间多。

  11. 8.1.2 LED显示器接口实例 从LED显示器的原理可知,为了显示字母与数字, 必须最终转换成相应的段码。这种转换可以通过硬 件译码器或软件进行译码。 硬件译码器LED显示器接口 软件译码LED显示器接口

  12. +5V +5V +5V 1. 硬件译码器LED显示器接口 图8-6 利用硬件译码器的八段LED接口电路

  13. 2. 软件译码LED显示器接口 位 段 PA口地址:7F01H PB口地址:7F02H 图8-7 通过8155扩展的8位LED动态显示接口

  14. 3. 动态显示程序设计 在内部RAM开辟6个单元作为 显示缓冲区:79H~7EH。 要显示的字符就分别放在显示 缓冲区中。 显示程序的工作是将显示缓冲 区的字符查出对应的段码依次送 到LED显示。 (1)程序流程图

  15. DIR: MOV R0, #79H ; 显缓区指针初值 MOV R3, #01H ; 位选码初值(左边第一位LED) MOV A, R3 LD0: MOV DPTR, #7F01H ; A口地址 MOVX @DPTR, A INC DPTR ; B口地址 MOV A, @R0 ; 取要显示的字符 ADD A, #0DH ; 加偏移量 MOVC A, @A+PC ; 查段码表 DIR1: MOVX @DPTR, A ; 送B口 ACALL DL1ms ; 延时1ms INC R0 MOV A, R3 ; 准备调整位选码 (2)程序

  16. JB ACC.5, LD1 ; 已到达最右边LED RL A ; 向右移一位LED MOV R3, A ;暂存位选码 AJMP LD0 LD1: RET DSEG: DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,6FH,77H DB 7CH,39H,5EH,79H,71H,73H,3EH,31H,6EH,1CH DB 23H,40H,03H,18H,00H DL1ms: MOV R7, #02H DL: MOV R6, #0FFH DL6: DJNZ R6, DL6 DJNZ R7, DL RET

  17. 1. LED硬件显示原理 ACC.0 ACC.0 数据位 (0FE06H) 时钟位 (0FE04H) 8.1.3 伟福实验系统LED显示器编程 D0 D5 位选通地址 (0FE02H) 向显示位选通地址输出高电平就可以点亮相应的显示位。 串行输入的数据位和时钟位由可编程器件CPLD(相当于74LS164)输出。写程序时,只要向数据位地址输出数据,然后向时钟位地址输出一高一低两个电平就可以将数据位送到74LS164中,并且实现移位。

  18. D0 D0 段 位

  19. 是 否 是 2. 软件流程图

  20. OUTBIT EQU 0FE02h ;位控制口 CLK164 EQU 0FE04h ;段控制口(接164时钟位) DAT164 EQU 0FE06h ;段控制口(接164数据位) LEDBuf EQU 60h ;显示缓冲区 ORG 0 LJMP Start Start: MOV SP, #40H MOV A, #1 ; 往显缓区填入1,2 MOV R0,#LEDBuf ; 3,4,5,6 FillBuf: MOV @R0,A INC A INC R0 CJNE R0, #LEDBuf+6, FillBuf DispAgain: LCALL Display ;调显示程序 LJMP DispAgain 3. 显示程序

  21. Display: MOV R0, #LEDBuf ;显缓区指针 MOV R1, #6 ; 共6个八段管 MOV R2, #00100000B ;从左边开始显示 Loop: MOV DPTR, #OUTBIT ;位控制口地址 MOV A, #0 MOVX @DPTR, A ;关所有八段管 MOV A, @R0 ;取显示字符 MOV DPTR, #LEDMap ;段码表首址 MOVC A, @A+DPTR ;字符转换成显示码 MOV B, #8 ;送164(移位8次) DLP: RL A ;左移一位 MOV R3, A MOV DPTR, #DAT164 MOVX @DPTR, A ;输出一位数据

  22. MOV DPTR, #CLK164 SETB ACC.0 ;时钟线高电平 MOVX @DPTR, A CLR ACC.0 ;时钟线低电平 MOVX @DPTR, A MOV A, R3 DJNZ B, DLP MOV DPTR, #OUTBIT MOV A, R2 MOVX @DPTR, A ;显示一位八段管 MOV R6, #1 ;延时初值 CALL Delay

  23. MOV A, R2 ;显示下一位 RR A MOV R2, A INC R0 ;显缓区指针加一 DJNZ R1, Loop MOV DPTR, #OUTBIT MOV A, #0 MOVX @DPTR, A ;关所有八段管 RET LEDMAP: DB 3FH, 06H, 5BH, 4FH, 66H, 6DH, 7DH, 07H DB 7FH, 6FH, 77H, 7CH, 39H, 5EH, 79H, 71H Delay: MOV R7, #0 ;延时子程序 DelayLoop: DJNZ R7, DelayLoop DJNZ R6, DelayLoop RET END

  24. 综合应用举例 单片机温度测量: 温度传感器:输入:0~100℃, 输出:0~5V 8位A/D转换器:输入:0~5V, 输出:0~255 已知A/D转换结果存放在30H, 要求将对应的温度 值BCD码存放在31H,32H,33H(高位在低地址)。 将温度值在LED上显示(右三位)。

  25. 主程序 OUTBIT EQU 0FE02h ;位控制口 CLK164 EQU 0FE04h ;段控制口(接164时钟位) DAT164 EQU 0FE06h ;段控制口(接164数据位) LEDBuf EQU 60h ;显示缓冲区 ORG 0 BEGIN: LJMP 30H ORG 30H ST: MOV R0, 30H ;取A/D数据 MOV R2, #64H MOV R1, #65H ;转换系数 ACALL CHENFA ;标度变换

  26. CLR C ;舍入计算 MOV A, #81H SUBB A, R4 MOV A, R5 ADDC A, #0 MOV R5, A MOV R2, #0 ; 取结果转BCD MOV A, R5 MOV R3, A ; 00H ≤(R2R3) ≤64H ACALL BI2BCD MOV 31H, R5 ; 最后结果在R5R6中 MOV A, R6 ANL A, #0FH MOV 33H, A

  27. MOV A, R6 SWAP A ANL A, #0FH MOV 32H, A MOV DPTR, #LEDBuf+3 MOV A, 31H MOVX @DPTR, A INC DPTR MOV A, 32H MOVX @DPTR, A INC DPTR MOV A, 33H MOVX @DPTR, A LCALL Display LJMP ST

  28. 8.2.1 独立式键盘接口 8.2.2 行列式键盘接口 8.2.3 典型键盘/显示器接口实例 8.2 键盘及其接口

  29. 在设计键盘接口时,要解决以 下几个问题: 开关状态的可靠输入——可硬件 电路去抖动或设计软件去抖动。 键盘状态的监测方法——中断方式还是查询方式。 键盘编码方法。 键盘控制程序的编制。 键盘的组成 键盘是由键盘矩阵行、列线之间的开关组成的。

  30. 1.独立式按键结构 独立式按键是指直接用I/O口线构成的单个按键电路。每根I/O口线上按键的工作状态不会影响其他I/O口线的工作状态。独立式按键电路如图8-8所示。 8.2.1 独立式键盘接口 图8-8 独立式按键电路

  31. 图8-9 使用8255扩展I/O的独立式键盘 2.独立式按键的软件编写 包括按键查询、消抖、键功能程序转移。

  32. KEYIN:MOV P1, #0FFH ; MOV A, P1 ; 读键盘 CJNE A,#0FFH,QUDOU ;有键按下,消抖 AJMP BACK ;无键按下,返回 QUDOU: MOV R3, A ;暂存键状态, 下面比较用 LCALL DELY10 ;10ms消抖 MOV A, P1 ;再读键盘 CJNE A, R3, BACK ;两次读键不同,返回 KEY0:JB P1.0,KEY1 ;不是‘s0’键 LJMP PKEY0 ; ‘s0’键处理 KEY1: JB P1.1,KEY2 ; 不是‘s1’键 LJMP PKEY1 ; ‘s1’键处理 KEY2: JB P1.2,KEY3 ; 不是‘s2’键 LJMP PKEY2 ; ‘s2’键处理 ┆ KEY7: JB P1.7,BACK ; 不是‘s7’键 LJMP PKEY7 ; ‘s7’键处理 BACK: RET

  33. 1.键盘工作原理 按键设置在行列的交点上,行列线分别连接到按键开关的两端。 行线通过上拉电阻接+5伏,无键按下被钳位在高电平状态。有键按下,电平由列线决定。 8.2.2 行列式(矩阵式)键盘 图8-10 行列式键盘原理电路

  34. 2.按键按下的判别 (1) 扫描法 首先由列线送入低电平、读入行线状态来判断有无键按下。 若有一根行线是低电平说明有键按下了。 键盘中哪一个键按下可由列线逐列置低电平,检查行输入状态来判断。 若某行电平变低,按下的键就在这一行。行列相交确定按下键的键值。 图8-11 行列式键盘原理电路

  35. (a)线反转法第一步 图8-12 线反转法原理 (2) 线反转法:只要经过两个步骤就可获得键值。 第一步,让行线为输出线,列线为输入线。 令行线输出全为低电平,若列线中某线为低电平,该线上有键按下了。 现在已知某列有键按下,但在哪一行未知。下一步将行列输出输入关系互换。

  36. (b)线反转法第二步 图8-13 线反转法原理 3 0 7 4 8 11 12 15 第二步,让行线为输入线,列线为输出线。 令列线输出全为低电平或前一步得到的列值,则行线中为低电平的线上有键按下了。 结合前一步确定的列与现在确定的行,就能准确知道是什么键按下了。 (3) 键盘的编码 行列式键盘,每个键的位置由行值和列值惟一确定。通过行列值可以给每一个键规定一个键值,键值对应上键盘的排列就可确定键号。

  37. 3.键盘工作方式 单片机应用系统中,键盘扫描仅是一个任务。为了能尽快响应键盘,又不占用CPU太多时间,一般有三种键盘工作方式: 编程扫描方式、定时扫描方式、中断扫描方式。 1) 编程扫描方式 在CPU空闲时,不断调用键盘扫描程序,获取用户从键盘上输入的数据或命令。

  38. 端口地址:PA口:7F00H, PC口:7F02H, 控制口:7F03H PA口工作于方式0输出,PC口低四位工作于方式0输入。 工作过程 : (1) 判有无键按下。A口输出全0,读C口。 图8-14 8255A扩展组成的矩阵式键盘

  39. 若PC0~PC3全1,无键按下;否则,有键按下。 (2) 调软件延时10ms消除键抖动。 (3) 逐列置0扫描,确定按键位置。 (4) 等待键释放后,进行按键功能处理。 图8-14 8255A扩展组成的矩阵式键盘

  40. 单片机每隔一定的时间对键盘进行扫描,在有键按下单片机每隔一定的时间对键盘进行扫描,在有键按下 时识别该键,并进行处理。 消抖 已处理 键处理 2) 定时扫描方式 KM:去抖动标志 KP:处理标志 图8-15 定时扫描方式程序框图

  41. 只有在键盘按下时,发出中断请求,CPU扫描键盘。只有在键盘按下时,发出中断请求,CPU扫描键盘。 3) 中断扫描方式 图8-16 中断方式键盘接口

  42. 第一层:监视键盘输入,三种扫描方式。 第二层:识别键号,扫描法,线反转法。 第三层:按键功能处理。 4)键盘的工作层次

  43. 0 行 1 行 2 行 3 行 7列 0列 8.2.3 键盘/显示器接口实例 1. 8155键盘/显示器接口 1)接口电路 PA口输出,PC口输入 PA口地址:7F01H PC口地址:7F03H

  44. 程序功能: (1)判有无键闭合 列线全置低电平(PA口输出全0),查行线电平(PC口)。行线全为高电平,无键闭合。否则有键闭合。 (2)去除键盘机械抖动 延时后再判键盘状态,若先前查出的键仍闭合,确认有效。 (3)确定闭合键的位置:逐列扫描 用扫描码定出列值,用行状态定出行值,根据行值和列值给每一个键一个惟一的键值,然后用键值给每个键分配键号。 2)键盘程序

  45. 确定键号(键值) 键号的分配如硬件图标定, 第0行第0列交点处的键号为0… 第1行第0列交点处的键号为8… 任意键的键号=行首键值+列值 行首键值=该键键号,列值为列的编号 设PA口输出11111101B, 读出PC3~PC0为1101,说明第1行第1列交点处的键闭合。 键号=第1行行首键值+列值=8+1=9 (4)对闭合键仅处理一次:等键释放后再处理。

  46. KS1 DIR DIR KS1 KS1

  47. KEY1: ACALL KS1 ;调判有无键闭合子程序 JNZ LK1 ;有键压下,跳延时消抖 NI: ACALL DIR ;无键压下,调显示子程序 AJMP KEY1 LK1: ACALL DIR ;调显示子程序延时消抖 ACALL DIR ACALL KS1 ;再查键盘是否还有键压下 JNZ LK2 ;仍有键压下 AJMP NI ; 误动作 LK2: MOV R2, #0FEH ;列扫描码初值 MOV R4, #00H ;列值初值 LK4: MOV DPTR, #7F01H ;A口地址 MOV A, R2 ;取列扫描码 MOVX @DPTR, A ; 送到键盘列线

  48. INC DPTR ;指向C口地址 INC DPTR MOVX A, @DPTR ;读行线状态 JB ACC.0, LONE ;第0行无键按下,查下一行 MOV A, #00 ;有键,置0行首键键值00H AJMP LKP LONE: JB ACC.1, LTW0 ;第1行无键按下,查下一行 MOV A, #08H ;有键,置1行首键键值08H AJMP LKP LTW0: JB ACC.2, LTHR ;第2行无键按下,查下一行 MOV A, #10H ;有键,置2行首键键值10H AJMP LKP LTHR: JB ACC.3, NEXT ;第3行无键按下,扫描下1列 MOV A, #18H ;有键,置3行首键键值18H LKP: ADD A, R4 ;计算键号=行首键值+列值

  49. PUSH A ;保存键号 LK3: ACALL DIR ;延时6ms ACALL KS1 JNZ LK3 ;等待键释放 POP A ;取回键号 RET NEXT:INC R4 ;列值增一 MOV A, R2 ;取列扫描码 JNB ACC.7, KND ;已扫描最后一列,未找到键 RL A ;列扫描码左移移位 MOV R2, A ;保存列扫描码 AJMP LK4 ;重输出到列线 KND: AJMP KEY1

More Related