第七章 常用程序练习

24
第第第 第第第第第第

Upload: emmanuel-hansen

Post on 30-Dec-2015

82 views

Category:

Documents


5 download

DESCRIPTION

第七章 常用程序练习. 7.1 键盘及其接口. 7.1.1 独立式键盘接口 独立式按键结构. 2. 应用实例. 例 7-1-1 某单片机系统键盘结构如图 8-1-2 所示。试编写简单的按键处理程序 ,fosc=12MHz 。程序中应当考虑到键盘去抖动的问题。. 7.1.2 行列式键盘接口. 按键设置在行列式交点上,行列线分别连接到按键开关的两端。当行线通过上拉电阻接 +5 伏时,被钳位在高电平状态. 键识别方法. 1) 查询是否有键按下。 2) 查询按键所在行列位置。 3) 对所在的行号列号译码得到键值 。 4) 键的抖动处理。 - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: 第七章 常用程序练习

第七章 常用程序练习

Page 2: 第七章 常用程序练习

7.1 键盘及其接口 7.1.1 独立式键盘接口 1. 独立式按键结构

8031

I NT0

+5V

I/O

8031

8-1-1 图 独立式按键电路(a) (b)查询方式

I/O

中断方式

+5V

I NT1

Page 3: 第七章 常用程序练习

2. 应用实例 例 7-1-1 某单片机系统键盘结构如图 8-1-2 所示。试编写

简单的按键处理程序 ,fosc=12MHz 。程序中应当考虑到键盘去抖动的问题。

Page 4: 第七章 常用程序练习

7.1.2 行列式键盘接口 按键设置在行列式交点上,行列线分别连接到按键开关的

两端。当行线通过上拉电阻接 +5 伏时,被钳位在高电平状态 .

8051

P1. 0

+5V

5. 1K× 4

P1. 2

P1. 1

P1. 4

P1. 3

P1. 6

P1. 5

P1. 7

Page 5: 第七章 常用程序练习

键识别方法 1) 查询是否有键按下。 2) 查询按键所在行列位置。 3) 对所在的行号列号译码得到键值 。 4) 键的抖动处理。 例 7-2-2 根据图 7-1-3 ,写出键盘处理程序。 源代码见程序清单

Page 6: 第七章 常用程序练习

7.2 LED 显示器接口 7.2.1 LED 显示器结构与原理 七段 LED 显示块中有八个发光二极管,故也有人叫做八段

显示器。其中七个发光二极管构成七笔字形“ 8” ,一个发光二极管构成小数点。显示块有共阴极与共阳极两种。

+5V

10 9 8 7 6

1 2 3 4 5

GNDabc

de

f

dp

abc

de

f

dp

ab

cd

e

fg

dp

a b

ce

f

dp

g g

g

d GND

Page 7: 第七章 常用程序练习

段选码 ( 字形码 )

Page 8: 第七章 常用程序练习

7.2.2 LED 显示方式 7.2.2.1 LED 静态显示方式

GND/ +5V GND/ +5V GND/ +5V GND/ +5VGND/ +5V

I / O 1( ) I / O 2( ) I / O 3( ) I / O 4( )

Page 9: 第七章 常用程序练习

7.2.2.2 LED 动态显示方式 八位 LED 动态显示电路只需要两个 8 位 I/O 口。其中一个

控制段选码,另一个控制位选。要想每位显示不同的字符,必须利用人的视觉暂留,采用扫描方式。

I / O 1( )

D D D D D D D D

I / O 2( )

7 56 4 3 2 1 0

Page 10: 第七章 常用程序练习

动态显示与静态显示的比较 对相同个数的数码管来说,采用动态显示占

用的 I/O 口线更少,但是因为需要 CPU 经常刷新显示内容,因此占用更多的 CPU 时间。

Page 11: 第七章 常用程序练习

7.2.3 LED 显示器接口实例 7.2.3.1 硬件译码器 LED 显示器接口 硬件译码器是使用 BCD 七段十六进制锁存、译码驱动

芯片来完成 BCD 码到段选码的转换和显示驱动。当每个位的段选线上,使用一个芯片时为静态显示;若 N 位共用一个芯片作段选控制时为动态显示。常用的硬件译码器有MC14495 、 MC14499 、 CD4511 等,应用时请详细查阅有关电气特性资料。

Page 12: 第七章 常用程序练习

7.2.3.2 软件译码 LED 显示器接口

8031

PALE

P2. 7

P1. 0

WRRD

RESET RESET

AD7

AD0ALECE

I O/ MWR

RD

VV

BI C8718

G GND

+5V

BI C8718

+5V

VCC

SS

CC

0

8~

8155

1

6

+5V1 10

101

AAAAAAAA

2

6

1

345

78

AAAAAAAA

2

6

1

345

78

345

78

YYYYYYYY

2

G GND1

dfdp g

Ω × 100 8PBPBPBPBPBPBPBPB

01234567

PAPAPAPAPAPAPAPA

01234567

345

78

YYYYYYYY

2

6

abce

Page 13: 第七章 常用程序练习

部分源程序void display(uchar idata *p) { uchar sel,i; COM8155=0x03h; //PA、 PB 口输出方式 sel=0x01; for(i=0;i<8;i++) { PB8155=table[*p]; //输出段选码 PA8155=sel; //输出位选码 delay(1); p--; //取下一位待显示数据 sel=sel<<1; // 选择下一位 } }

Page 14: 第七章 常用程序练习

7.2.4 LED 显示管理芯片 MAX7219 MAX7219 是美国MAXIM公司生产的串行输入/输出共阴极显示驱动器。该芯片可直接驱动最多 8位 7 段数字 LED 显示器,或 64 个 LED 和条形图显示器。它与微处理器的接口非常简单,仅用 3个引脚与微处理器相应端连接即可实现最高 10MHz串行口。 MAX7219 的位选方式独具特色,它允许用户选择多种译码方式译码选位,而且,每个显示位都能个别寻址和刷新,而不需要重写其他的显示位,这使得软件编程十分简单且灵活。

Page 15: 第七章 常用程序练习

7.2.4.1 引脚说明 该芯片采用 24脚 DIP 和 SO封装,工作电压

4.0 ~ 5.5V,最大功耗 1.1W。

图 8-2-6 MAX7219引脚图

Page 16: 第七章 常用程序练习

7.2.4.2 基本工作原理及使用方法 对于MAX7219 ,串行数据是以 16位数据包的形式从 Din脚串行输入,在 CLK的每一个上升沿一位一位地送入芯片内部 16位移位寄存器,而不管 Lout脚的状态如何。Load脚必须在第 16个 CLK上升沿出现的同时或之后,但在下一个 CLK上升沿之前变为高电平,否则移入的数据将丢失。操作者只需编程发送 16位数据包,就能简单地操作 LED 的位选以及段选,设置和改变MAX7219 的工作模式。

Page 17: 第七章 常用程序练习

16位数据包格式

D7~ D0 : 8 位数据位, D7最高位, D0为最底位;  D11~ D8: 4 位地址位; D15~ D12:无关位,通常全取 1 。 MAX7219 通过 D11~ D8 4 位地址位译码,可寻址 14

个内部寄存器,分别是 8 个 LED 显示位寄存器, 5 个控制寄存器和 1 个空操作寄存器。 LED 显示寄存器由内部 8×8 静态 RAM 构成,操作者可直接对位寄存器进行个别寻址,以刷新和保持数据,只要 V +超过 2V (一般为+ 5V )。

内部 RA M 地址 01~ 08H 分别对应于 DIG0~ DIG7 。

Page 18: 第七章 常用程序练习

几个控制寄存器的设置 停机寄存器 (地址 0CH):当 D0=0时, MAX7219 处于停

机状态;当 D0=1 ,正常工作状态。 译码模式选择寄存器(地址= 09H);共有 4 种译码模式供选择,当数据位全 0时选择“非译码方式”。在此方式下, 8 个数据位分别一一对应 7 个段和小数点。通常选择此方式。

扫描限制寄存器:地址= 0BH ;用于设置显示的 LED 个数( 1~ 8),当 D2D1D0 = 111 、 D7D6D5D4D3无关时,可接 8 个 LED 管。

亮度调节寄存器:地址= 0AH ;共有 16 级选择,用于 LED 显示亮度的强弱设置。

关断模式寄存器:地址= 0CH ;有两种模式选择:一种是关断状态模式( D0 = 0);一种是正常操作状态( D0 =1),通常选择正常操作状态。

显示测试寄存器:地址= 0FH ;有两种选择用于设置 LED是测试状态还是正常操作状态:当在测试状态时( D0 =1)各位全应亮,一般选择正常操作状态( D0 = 0)。

Page 19: 第七章 常用程序练习

7.2.4.3 MAX7219 的典型应用 源程序见程序清单

图 8-2-7 MAX7219 与 8031 应用电路原理图

Page 20: 第七章 常用程序练习

7.3.2.4 汉字显示原理

16×16点阵汉字“文”

     “文”的汉字库地址 数据 地址 数据0000H 0x02 0001H 0x00

0002H 0x01 0003H 0x00

0004H 0x01 0005H 0x08

0006H 0x7F 0007H 0xFC

0008H 0x08 0009H 0x40

000AH 0x08 000BH 0x40

000CH 0x04 000DH 0x40

000EH 0x04 000FH 0x80

0010H 0x02 0011H 0x80

0012H 0x01 0013H 0x00

0014H 0x02 0015H 0x80

0016H 0x04 0017H 0x60

0018H 0x18 0019H 0x1C

001AH 0xE0 001BH 0x08

001CH 0x00 001DH 0x00

001EH 0x00 001FH 0x00

Page 21: 第七章 常用程序练习

汉字字模的提取

国家标准汉字字符集GB2312-80共收集了共 7445 个汉字和图形符号,其中汉字 6763 个,分为二级,一级汉字 3755 个,二级汉字 3008 个。

汉字图形符号根据其位置将其分为 94 个“区”,每个区包含 94 个汉字字符,每个汉字字符又称为一个“位”。区的序号和位的序号都是从 01 到 94 ,

Page 22: 第七章 常用程序练习

机内码、区位码 在 PC 机的文本文件中,汉字是以机内码的形

式存储的,每个汉字占用两个字节:第一个字节为区码,为了与 ASCII 码区别,范围从十六进制的 0A1H 开始(小于 80H 的为 ASCII 码字符),对应区位码中区码的第一区;第二个字节为位码,范围也是从 0A1H 开始,对应某区中的第一个位码。这样,将汉字机内码减去 0A0AH就得该汉字的区位码。

Page 23: 第七章 常用程序练习

示例  “房”的机内码为十六进制的“ B7BF” ,其中“ B7”表示区码,“ BF”表示位码。所以“房”的区位码为    0B7BFH-0A0A0H=171FH 。  将区码和位码分别转换为十进制得汉字

“房”的区位码为“ 2331” ,即“房”的点阵位于第 23区的第 31 个字的位置,相当于在文件 HZK16中的位置为第    32×[(23-1) ×94+(31-1)]=67136B以后的 32 个字节为“房”的显示点阵。

Page 24: 第七章 常用程序练习

建汉字字库的方法

1 采用自编的软件 ,本书提供一个示例程序。

2 专用的 C 程序 3 专用的字模软件