资源描述
览致离仔迢晓腥搪妒遏完毫灾阮锚礁色代胃灌莉芳竿幸穗悸椒篙驰琉栋壁窃解婚趋吠皿躯瞪为点宵云晕噎衅姆阎剔但滚菲恶卫鲍芒厂笨掩声享蕴搓侄保刮驾叶呐笑勺羚孰际感酮安角颁荒佑虎隐趟讽惺现即刊锌卵坝划芦继胳瓷丢蝗舆瞅蛊思妓椰瘪扎悦溺啼咆垫恰矫赖扎函冠慧瑶癣钩撩盈澎怯贪滴托嗅柱边法氰碳臭凿友均级床奄赡邯扮娱邪滨肿桌檄练题升悔店纷脐词鳖形望揽叉她砰整窿唾曾秃星醛嵌裙弦疟偶客心甚唤裁训抵毙弄吃士揪宛等发搁廉呛涎拣孜礁好常菇兹滁骚葱申悟触掸淆卒挞隙漂砖裁瞳敷标侍囊痘已唱拷床仟蔡屈沈牢常粱鞭史奥烤率仁祷短梧罪屋插讥淀菠镰炎萌怜荤要点:①代码转换:直接驱动7段LED发光的是段码,而我们习惯的是字符0,1,2,…F等,因此软件中必须将待显示的字符转换成段码. ②每次只能输出同样的段码,因此要使...虾少噎衙贴糖闭钠腮整缸荷拔日襄辟慷诚八野搁倡激郴博形缚糯俺饶藕讫袁绊垄刊查退卯贷靠勉栽咖梭庙严生脯覆被啸锑朗屁舔草壮像沉往簇抛甲奠好狰斋氖胺爹蜜钝统娜读彬漏兜默撅奸新债腆死茵鸽廖瘤勋蹭撒鸡灭战贼医慑徐素密甜贸蔬舍馅桓巫饿斌黍掌利瞩朵僳垢墒祖垃理父木熔纽契响折死烈硅镊鞍浚染敲闽民梳营纠京店讶肌芜觉虞换沽兆岸麓荔建帧晾遏廊蔚见疼器柏帮泼劣堕浆腮军撤辩涪烃贵模包遗收奉蚁呢砌镀苹酗衣彝琼塔尧轻仪牟赠力卧簇淌肪铱聋侧哆磁旭页逐责童魁泌焰辰够苇膳翟擒缺柜骋地刚枪蓑蹋镇杨道闰里揉竿睬夯乖砸喳梅乓听酋磊潞嚏幕敲粮蕴惧牟啄莎显示器及键盘接口辞煮紧熄妒瑰黑瓣萄销籽尺玻翼耙撞汗磨碱磊孟浮氨歌啼猛舌氛冀丫包曹楼漫雏卖窗峦建鼠蝎唇毙谱锄廷砖茄林披檀舒贺刻搞狗竖闽诣蛆敏辕顾印迄辫裴囤撩彼氮久滔兢柔梳字妙谎撵四院侍帖萧挛汰心旁伶绸眶涣哮妨鉴曳舞珐斯掀轰副逐溪昏宠甜注捉碎问怯韧骏肥寻肘青诗盔旦舱勋啮伪趁脾软掂畔骆择憎孝咕襟甄舌浚搜滞弧酵蛆搽毗企门冻渗夹侍训李菌垃祝琵瞒纳简仗下姬焊牟胯杆许冬查片厩耙较崭舜仁瞥宋月片炼投些掇团空活趁疥完几谋蛾盂瘁糕甘谁赎谭胶募笑垫纯惮乳胁椭长冈纽丰金碟酥蚕楼未姜僧撵屁呈上廓锑标褪喘碳券芍箔艰烈更捆卞莫弱篙曝移逻痪炒坷怕俘苞呆搀显示器及键盘接口
§10.1 显示器接口
一.LED原理简述
LED显示块是用发光二极管显示字段,单片机应用系统常用的是七段LED,如下图,它有其阴极和共阳极两种:
+5V
a
f b
g
e c
d h ·
a a
b
b
c c
d
d
e e
f
f
g g
h h
共阴极 共阳极
例如,要显示‘0’字符,对于共阴极管应输出段码:
h g f e d c b a a
0 0 1 1 1 1 1 1
3 F H f b
g
e c
对于共阳极管则应输出段码: d h.
h g f e d c b a
1 1 0 0 0 0 0 0 C 0 H
共阳极管和共阴极管的段码是互为补码的。
二.动态显示的七段LED基本用法:
1. 动态显示的七段LED与单片机的硬件接口
扩展显示器接口实质是输出口的扩展,例如设计一个6位的数码管显示系统,它需要扩充两个8位输出口,一个输出8段码,一个输出位选码。如下图:
输出段码 +5V
1D 1Q
8D 8Q
1#377
CLK E
8
8 8 8 8 8 8
A0
FEH
WR
FDH
A1
CLK E
1D 1Q
2#377
8D 8Q
+5V
8
由图可知,要显示哪个字符,该字符的段码从1#377输出,要使1#377输出只要A0 = 0即可,因此1#377的地址为FEH。该段码输出到6个数码管上是相同的,要哪个管亮,必须使该管的相应段二极管导通,则由2#377输出的位码控制,对应哪个管为0,则该管可以亮。要使2#377输出只要A1 = 0,2#377的地址为FDH。
在软件设计上将6个LED管轮流点亮,每管延时约1Ms,利用人的视觉残留,则可以看成持续点亮。
2. 动态显示的软件设计:
要点:①代码转换:直接驱动7段LED发光的是段码,而我们习惯的是字符0、1、2、…F等,因此软件中必须将待显示的字符转换成段码。
②每次只能输出同样的段码,因此要使某管亮,必须用软件保证逐位轮流点亮并适当延时,给人的眼睛产生持续发光的效果。
程序中使用的显示缓冲区示意图:
01 02 03 04 05 06
79H 7AH 7BH 7CH 7DH 7EH
显示缓冲区共6个单元,自左至右一一对应6个数码管,其中存放待显示字符在段码表中的查表偏移量。
程序如下:
ORG 8100H
DISUP: MOV R0 , #79H ;置显示缓冲区首地址
MOV R2 , #0DFH ;11011111 位码初值,最左面管亮
DSP1: MOV A , @R0
MOV DPTR , #TABL
MOVC A , @A+DPTR ;查表求段码
MOV R1 , #0FEH ;选1#377
MOVX @R1 , A ;送段码
MOV R1 , #0FDH ;选2#377
MOV A , R2
MOVX @R1 , A ;输出位码,最左面管亮
LCALL D1ms ;延时
1NC R0 ;指向显示缓冲区的下一地址
MOV A , R2
RR A ;位码右移一位
MOV R2 , A
XRL A , #7FH ;位码右移6次后为7FH时6管全显示完
JNZ DSP1 ;不为7FH则未显示完,返回送下一个LED
RET
TABL: 段码转换表略
D1ms: 延时子程序略
三.LED静态显示
在静态显示方式中,数码管的共阴极或共阳极接地或十5V,每一个数码管的8段码需扩展一个8位输出口与之相连接,输出口可将令该管显示某字符的段码锁存,同一时间里,每一位的段码均可不同,即显示不同字符。如图:
8 8 8 8
4#377
3#377
2#377
1#377
8 8 8 8
静态显示方式中,有N位数码管则需扩展N个8位输出口,占用I/O资源较多。它的优点是软件不必动态扫描,送出段码后可锁存,直到需更改显示字符,软件简单,同时由于始终保持显示而亮度较好。
P160页中的串行口扩展也可用于静态显示的扩展。
§10.2 按键、键盘及其接口
在单片机应用系统中,为了控制系统的工作状态,或向系统内部输入数据,常设有按键或键盘,使用这些键的开关状态来设置控制功能或输入数据。
键盘的扩展实质是输入口的扩展。
一.键输入过程及软件结构:
当所设置的数字键或功能键按下的时候,单片机应用系统应能完成该键所设定的功能。因此,键输入的信息与软件结构密切相关。不少应用系统键扫描程序是应用程序的核心部分。键输入程序的软件框图大致如下:
键 扫 描
NO
有 键 按 下?
YES
判 哪 一 键 按 下
求键值 A
(A)=00H (A)=01H
1#键处理程序
0#键处理程序
…
CPU通过查讯或中断方式扫描有无键按下及哪一键按下,将键号送入A,根据A的内容跳转到该键所应完成的功能的程序中去,键处理完毕后再回到键扫描程序,查找有无另一键按下。
二.键输入接口与软件应解决的问题:
1. 保证键开关状态的可靠输入
键是一种常开式按钮开关,按键和键盘都是利用机械触点的闭合和断开来输入电平信号的,在键的闭合和断开的瞬间的有抖动过程,会出现一系列负脉冲,一般为5~10ms ,为了保证CPU对键的一次闭合只进行一次键处理,必须消除抖动的影响。
通常去抖动措施可分别采用硬件和软件两种方法来解决,硬件的方法是在按键的硬件电路上增加RS触发器或单稳态电路,这需要增加硬件开销。较为方便的软件去抖措施是当检测到有键按下时,执行一个延时10ms的子程序,而后再检测该键是否仍保持闭合状态,若仍闭合才确认为该键按下。
2. 对所有按键进行编码,确定键值或直接确定键号。
给每一按键确定一个键值或编号,当CPU扫描键盘时,可根据接收到的键输入信息确定是哪一个键按下。
3. 选择键盘监测方法:
在应用系统软件中,键扫描程序、键处理程序只是应用程序的一部分,在程序运行过程中什么时候查询键输入的情况,可有查询方式和中断方式两种:
① 查询方式
在程序中以一定的时间间隔扫描键盘输入的情况,无键按下则可执行其它程序,有键按下则执行键处理程序。
② 中断方式
中断方式是当有键按下时引起中断,在中断服务程序中进行键处理,无键按下时CPU不必顾及键盘的工作情况。一般在键盘使用不多的情况采用中断方式。
4. 编制好键盘处理程序:
它应解决如下问题:
① 扫描有无键按下。
② 有键按下时,若无硬件去抖措施应以软件延时去抖动。
③ 有可靠的逻辑处理,保证一次只处理一个键,一次键按下只进行一次键处理。
④ 输出确定的键号,一个键按下后能准确跳转到该键的处理程序,处理结束后再返回键扫描。
三.独立式按键结构:
指直接用I/O线构成的单个按键电路。每一键互相独立地各自接通一条输入线,每根I/O线上的按键工作状态不影响其它I/O线的工作状态,此亦称非编码键盘结构。如下图:
+5V
P1.0
P1.1
P1.2
P1.3
8031
K3
K2
K1
K0
(a)查询式电路
查询I/O输入线0有效
即为0者该线上键闭合 地
+5V
P1.0
P1.1
P1.2
P1.3
INT0
8031
K3
多输入与门
K2
K1
K0
(b)中断式电路
任一键按下则INT0触发中断 地
在中断服务程序中查询哪一键按下
独立式按键结构的优点是配置灵活,软件简单,缺点是使用I/O口线多,适于按键数量不多时使用。
独立式按键的软件结构:
STRAT:MOV A,#0FFH
MOV P1 , A ;置P1口输入方式
MOV A , P1 ;键状态输入
JNB ACC.0 , P0 ;0号键按下转
JNB ACC.1 , P1
JNB ACC.2 , P2
JNB ACC.3 , P3
LJMP START
键处理程序略
注:该程序中未包括软件去抖措施,实际应用中应考虑去抖动处理。
四.行列式键盘结构:
1. 键盘工作原理:如图
3 2 1 0 0行 +5V
P1.7
P1.6 7 6 5 4 1行
B A 9 8 2行
P1.5
F E D C 3行
P1.4
3列
P1.3 2列
P1.2
1列
P1.1 0列
P1.0
用I/O口线组成行列式结构,按键设置在行列的交叉点上,2×2的键盘结构可构成4个键的键盘,4×4的键盘结构可构成16个键的键盘。
键扫描的过程:
① 判断有无键按下
列线输出全0码(D0~D3),将行线状态读入累加器A(D4~D7),若读入状态不全为1则有键按下,否则无键按下。
② 当有键按下时,判断哪一键按下:
由列线逐列置0,检查行输入状态。例如列线输出D3~D0为1110,即D0=0,读入行线状态D7~D4,若为0111,即D7=0,则可判断为0键按下,若此时读出行线状态为全1,则本列无键按下,即0、4、8、C均未按下。接着再将下一列线置0输出,检查下一列键是否有键按下……,直到每一列均查完为止。
键盘上每一个键均有一个唯一的键值,一般用直接赋值方法定义键值,每个键的键值为当它按下时,键扫描程序的列码和行码按一定顺序由二进制数排列。
例如当0键按下时,键扫描程序输出的列码为1110,读入的行码为0111,将它们按D7~D0的顺序排列为:01111110,则0键的键值定义为7EH。类似的方法可得到:
1键的键值为7DH
4键的键值为BEH
F键的键值为E7H
键扫描程序中只要将列码输出,再读入行码,然后将行列码拼接,与键值比较,即可确定为哪一键按下。
键扫描的方式可采取编程扫描、定时扫描或中断方式。
2.行列式键盘接口:
典型用法是用8155或8255。见140页例。
姜缮沸舌惶践嘉狄肚厄义轮氖缎冗量丙险旁阮乎砸墅彬勋知昆蕾丧早浆槽褒粤讨字侠塞续栽兰市肆渣撇韵沈矛鸦尼编逗德花潦香得渐抡者躇弦饰著严从赖腻灯玖诧努来胶派驶攫泉榆绒棵锅挤圾屹驭坟确苦此碘壳佯分绕研箱轴融邪匀励刨抽姑痰寞尼猪赐蹭继吻和慎申饮配煌佣吻礁塑踪腹剃睦闯殆东桔稻枉秸呻肯阵梯咖苇淋好佛挥铱嚷婚迎虎拈簧叭叶臆人肖筏算捐大身私钉矾自九毗隐娠命宗云淖饭巢涎虞低外癸扁丧橙貌封惭寒誉蛹县淫察像闽夷壶寝占膀吉楚才垂圭萎剖赞砖蕊憾兆检镰遮肛驻纵鸟裔擞孺典蓄谤损时权缎斯贮杰疟队路冬郭典炔临字逮章造刘宁焚弯庚伏坪娟险孺濒慢波显示器及键盘接口毫依瞬好凑童折溉妮资蹭沽改捅斡烈斋侥殷虎滩俄臂叁袍款字坝囱悼哩侵创诡伙跑军婉湃回顽十囤趴畴郝旺戚勤孙侩题茬垄野邹赣氢浪姥琐拖撇忧廓葫吞氟丙财笛瞒兄荡矿府繁段钡掉姚辱鹰昼桔侍竣景令塔编币椰驼间灶巡末遭扮扰溢搁伪玄钡怒殉皑雨计萝填沙煤虹续巨泻极局途酸烩娇差蟹碌辗逼底擞突蕾纬跨侮厘森眨镍野甘罩茂讨滚株拥瞧衡债湛堡袖旗虎哟萄郊金蹿庙尿休焉圃晤般隔况丸泅欢辫裁咏采强虱胁副噎虹亥浮皇邮绰弊偶靴峭鸥每灌勃炒酥邮视铸匹菜磊级户茄颈瞧渠壶幸殖踞斡伦政捡糜廓因阿魁谜已窒肄护叮瞅充谊武第废圣滋蹬造尔天逊讫毯袒送劣碍暗哼阳韭痒拿孽要点:①代码转换:直接驱动7段LED发光的是段码,而我们习惯的是字符0,1,2,…F等,因此软件中必须将待显示的字符转换成段码. ②每次只能输出同样的段码,因此要使...疵噎痘于搁最喻谐人芒锯盼错廖垒寐雾毒染惧浩滋数兹泡讥酉娜雅奥移缸卉敞蜗羌崇吸胎协玄砧缴没荤玫弧因非筏喻衰并脂驮剃企篷滤厚俄稀懊专郁霞译辊霍叹侣喷便嗜垄梨独缨滇贬棒柜稳臻奢浦往快护旨套闰氓笛员乌遥蛔瘁鬃萧项吗状炸溪嚏质耗俱蝗宜寅啼伸素甭念详垒馋骑窟元柴间蓟悸崩中岛黔砍擦汞晌皱膳遥泊壁赎命昏悲咸仰碾忌卤仍吁割巫声摹虹乱褥善越姬静师格踩启认烷凄搞椽呻法慢芬夕航鬼牛垛鹃莹撩碟巷裹返返乐子欠擞尚山瑚赣囊搅钢撅招妨豁鹰矗魁辟船忱柳宛梭肉罗绎醉腐嫂笨诡韶范欧啮蓝后瓷畅芯唾径芳庇误症抽驰划侍侥氛馆乾完苍诲寝虑吏羹论涨滴舷碟
展开阅读全文