实验目的
1、理解串行接口键盘单片机汇编语言程序的基本结构
2、了解单片机汇编语言程序的设计和调试方法
3、掌握几个的基本的传送类、控制类指令的使用方法
实验仪器
单片机开发板、万利仿真机、稳压电源、计算机
实验原理
1、 键盘接口电路工作原理
串行接口键盘盘电路如图4-15所示。键盘扫描线与显示位选扫描信号共用。键盘输入只需要一根线,电路简单。键盘扫描信号从74LS164输出,低电平有效。当扫描到某个键时,若按键按下,在KEY端得到低电平,否则得到高电平。通过判断KEY的电平就可以知道相应键盘是否按下。
图4-15 键盘接口电路图
2、 读键盘程序设计
从上面工作原理分析可知,读键程序可以和显示程序结合在一起,也可以单独设计。这种结构的键盘同样存在抖动问题。为了减少程序误动作,程序设计时也要考虑去抖动问题。这里设计一个把键值显示在LED上的程序。为了简化问题,把读键程序与显示结合起来。程序流程图如图4-16所示。
主程序 |
初值化,显示缓冲区,键值暂存,键盘缓存 |
调用键盘显示程序 |
键值相同 |
键值送显示 |
Y |
N |
Y |
显示计数为0 |
…… |
键盘显示程序 |
取键值暂存到累加器 |
返回键值 |
N |
显示程序 延时程序执行后 |
读当前扫描的键状态,并存入键值暂存寄存器 |
图4-16 键盘扫描程序流程图 实验内容 1、单片机键盘显示程序设计 …… LEDCLK bit P3.4 LEDDIN bit P2.3 LEDDATA data P0 KEYINPUT bit P1.0 …… dispbuf: DS 8 ;显示缓冲区8字节 disppoint: Ds 1 ;小数点控制数据 keytemp: DS 1 ;键值暂存 keybuf: DS 1 ;键值缓冲区 …… Start: CLR EA MOV A,#13H ;全暗数据 MOV B,#8 MOV R0,#dispbuf Start1: MOV @R0,A ;往显示缓冲区填入数据 INC R0 DJNZ B,Start1 MOV keytemp,#0 MOV keybuf,#0 Start2: LCALL Disp CJNE A,keybuf,Start2 MOV R0,#dispbuf+7 MOV @R0,A SJMP Start2 ;-------------------------------------------------------------------------------- ;输入: 无 ;输出:键值 ;---------------------------------------------------------------------------------- Disp: MOV R7,#8 MOV R0,#dispbuf CLR LEDCLK SETB LECDIN Disp1: MOV A,@R0 MOV DPTR,#DispTab MOVC A,@A+DPTR CPL A MOV LEDDATA,A ;在这里加入显示小数点程序 LCALL DispSelection1 ;输出位选择信号,DispSelection2是第二种 LCALL Delay1ms INC R0 MOV C,KEYINPUT MOV A,keytemp RRC A MOV keytemp,A DJNZ R7,Disp1 MOV A,keytemp ;键值(特征值,按下键对应的位为0) MOV B,#0 MOV R7,#8 Disp2: RRC A JNC Disp3 ` INC B DJNZ R7,Disp2 Disp3: MOV A,B RET DispSelection1: ;位选码以一次一位方式输出 CJNE R7,#8,DispSelection11 CLR LEDDIN DispSelection11: SETB LEDCLK NOP CLR LEDCLK SETB LEDDIN RET DispSTab: DB 00H,80H,40H,20H,10H,08H,04H,02H,01H ;位选码数据表 dispa equ 80h ;数码管各段数据定义 dispb equ 40h dispc equ 20h dispd equ 10h dispe equ 08h dispf equ 04h dispg equ 02h disph equ 01h disp8 equ 0ffh-disph DispTab: db disp8-dispg,dispb+dispc,dispa+dispb+dispg+dispd+dispe ;0,1,2 db disp8-dispe-dispf,disp8-dispa-dispd-dispe,disp8-dispb-dispe ;3,4,5 db disp8-dispb,dispa+dispb+dispc,disp8,disp8-dispe ;6,7,8,9 db disp8-dispd,disp8-dispa-dispb,disp8-dispb-dispc-dispg ;a,b,c db disp8-dispa-dispf,disp8-dispb-dispc,disp8-dispb-dispc-dispd ;d,e,f db disp8-dispb-dispc,0ffh,00h,dispg ;H,全亮,全暗,- 这个C程序怎么写啊
欢迎光临 (http://www.51hei.com/bbs/) | Powered by Discuz! X3.1 |