240 likes | 352 Views
第七章 常用程序练习. 7.1 键盘及其接口. 7.1.1 独立式键盘接口 独立式按键结构. 2. 应用实例. 例 7-1-1 某单片机系统键盘结构如图 8-1-2 所示。试编写简单的按键处理程序 ,fosc=12MHz 。程序中应当考虑到键盘去抖动的问题。. 7.1.2 行列式键盘接口. 按键设置在行列式交点上,行列线分别连接到按键开关的两端。当行线通过上拉电阻接 +5 伏时,被钳位在高电平状态. 键识别方法. 1) 查询是否有键按下。 2) 查询按键所在行列位置。 3) 对所在的行号列号译码得到键值 。 4) 键的抖动处理。
E N D
7.1 键盘及其接口 • 7.1.1 独立式键盘接口 • 独立式按键结构
2.应用实例 • 例7-1-1 某单片机系统键盘结构如图8-1-2所示。试编写简单的按键处理程序,fosc=12MHz。程序中应当考虑到键盘去抖动的问题。
7.1.2 行列式键盘接口 • 按键设置在行列式交点上,行列线分别连接到按键开关的两端。当行线通过上拉电阻接+5伏时,被钳位在高电平状态 .
键识别方法 • 1)查询是否有键按下。 • 2)查询按键所在行列位置。 • 3)对所在的行号列号译码得到键值 。 • 4)键的抖动处理。 • 例7-2-2 根据图7-1-3,写出键盘处理程序。 • 源代码见程序清单
7.2 LED显示器接口 • 7.2.1 LED显示器结构与原理 • 七段LED显示块中有八个发光二极管,故也有人叫做八段显示器。其中七个发光二极管构成七笔字形“8”,一个发光二极管构成小数点。显示块有共阴极与共阳极两种。
7.2.2 LED显示方式 • 7.2.2.1 LED静态显示方式
7.2.2.2 LED动态显示方式 • 八位LED动态显示电路只需要两个8位I/O口。其中一个控制段选码,另一个控制位选。要想每位显示不同的字符,必须利用人的视觉暂留,采用扫描方式。
动态显示与静态显示的比较 • 对相同个数的数码管来说,采用动态显示占用的I/O口线更少,但是因为需要CPU经常刷新显示内容,因此占用更多的CPU时间。
7.2.3 LED显示器接口实例 • 7.2.3.1 硬件译码器LED显示器接口 硬件译码器是使用BCD七段十六进制锁存、译码驱动芯片来完成BCD码到段选码的转换和显示驱动。当每个位的段选线上,使用一个芯片时为静态显示;若N位共用一个芯片作段选控制时为动态显示。常用的硬件译码器有MC14495、MC14499、CD4511等,应用时请详细查阅有关电气特性资料。
部分源程序 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; //选择下一位 } }
7.2.4 LED显示管理芯片MAX7219 • MAX7219是美国MAXIM公司生产的串行输入/输出共阴极显示驱动器。该芯片可直接驱动最多8位7段数字LED显示器,或64个LED和条形图显示器。它与微处理器的接口非常简单,仅用3个引脚与微处理器相应端连接即可实现最高10MHz串行口。MAX7219的位选方式独具特色,它允许用户选择多种译码方式译码选位,而且,每个显示位都能个别寻址和刷新,而不需要重写其他的显示位,这使得软件编程十分简单且灵活。
图8-2-6 MAX7219引脚图 7.2.4.1 引脚说明 • 该芯片采用24脚DIP和SO封装,工作电压4.0~5.5V,最大功耗1.1W。
7.2.4.2 基本工作原理及使用方法 • 对于MAX7219,串行数据是以16位数据包的形式从Din脚串行输入,在CLK的每一个上升沿一位一位地送入芯片内部16位移位寄存器,而不管Lout脚的状态如何。Load脚必须在第16个CLK上升沿出现的同时或之后,但在下一个CLK上升沿之前变为高电平,否则移入的数据将丢失。操作者只需编程发送16位数据包,就能简单地操作LED的位选以及段选,设置和改变MAX7219的工作模式。
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。
几个控制寄存器的设置 • 停机寄存器(地址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)。
图8-2-7 MAX7219与8031应用电路原理图 7.2.4.3 MAX7219的典型应用 • 源程序见程序清单
16×16点阵汉字“文” 7.3.2.4 汉字显示原理
汉字字模的提取 • 国家标准汉字字符集GB2312-80共收集了共7445个汉字和图形符号,其中汉字6763个,分为二级,一级汉字3755个,二级汉字3008个。 • 汉字图形符号根据其位置将其分为94个“区”,每个区包含94个汉字字符,每个汉字字符又称为一个“位”。区的序号和位的序号都是从01到94,
机内码、区位码 • 在PC机的文本文件中,汉字是以机内码的形式存储的,每个汉字占用两个字节:第一个字节为区码,为了与ASCII码区别,范围从十六进制的0A1H开始(小于80H的为ASCII码字符),对应区位码中区码的第一区;第二个字节为位码,范围也是从0A1H开始,对应某区中的第一个位码。这样,将汉字机内码减去0A0AH就得该汉字的区位码。
示例 “房”的机内码为十六进制的“B7BF”,其中“B7”表示区码,“BF”表示位码。所以“房”的区位码为 0B7BFH-0A0A0H=171FH。 将区码和位码分别转换为十进制得汉字“房”的区位码为“2331”,即“房”的点阵位于第23区的第31个字的位置,相当于在文件HZK16中的位置为第 32×[(23-1) ×94+(31-1)]=67136B以后的32个字节为“房”的显示点阵。
建汉字字库的方法 • 1 采用自编的软件,本书提供一个示例程序。 • 2 专用的C程序 • 3 专用的字模软件