单片机最小系统.docx
《单片机最小系统.docx》由会员分享,可在线阅读,更多相关《单片机最小系统.docx(11页珍藏版)》请在冰豆网上搜索。
![单片机最小系统.docx](https://file1.bdocx.com/fileroot1/2023-6/18/14e6b71d-ace0-4823-b086-abd9c296681d/14e6b71d-ace0-4823-b086-abd9c296681d1.gif)
单片机最小系统
单片机最小系统
在智能化仪器仪表中,控制核心均为微处理器,而单片机以高性能、高速度、体积小、价格低廉、稳定可靠而得到广泛应用,是设计智能化仪器仪表的首选微控制器,单片机结合简单的接口电路即可构成单片机最小系统,它是智能化仪器仪表的基础,也是测控。
监控的重要组成部分。
一、系统功能要求:
1、显示位数:
6位。
2、键盘按键数:
16个。
3、初始化状态显示P.。
3、能输入、显示十六进制数0——f。
二、系统整体方案提示:
1、单片机可采用AT89C51、AT89C52、AT89S52、fosc=12MHz。
2、时钟电路,复位电路的设计。
3、系统功能框图如下:
4、编写系统初始化主程序、键扫子程序、显示子程序及其他所需要子程序。
三、硬件系统设计:
硬件系统原理图如下页图:
1、时钟电路
系统的时钟电路设计是采用的内部方式,即利用芯片内部的振荡电路。
AT89单片机内部有一个用于构成振荡器的高增益反相放大器。
引脚XTAL1和XTAL2分别是此放大器的输入端和输出端。
这个放大器与作为反馈元件的片外晶体谐振器一起构成一个自激振荡器。
外接晶体谐振器以及电容C1和C2构成并联谐振电路,接在放大器的反馈回路中。
对外接电容的值虽然没有严格的要求,但电容的大小会影响震荡器频率的高低、震荡器的稳定性、起振的快速性和温度的稳定性。
因此,此系统电路的晶体振荡器的值为12MHz,电容应尽可能的选择陶瓷电容,电容值约为22μF。
在焊接刷电路板时,晶体振荡器和电容应尽可能安装得与单片机芯片靠近,以减少寄生电容,更好地保证震荡器稳定和可靠地工作。
2、复位电路
复位是由外部的复位电路来实现的。
片内复位电路是复位引脚RST通过一个斯密特触发器与复位电路相连,斯密特触发器用来抑制噪声,它的输出在每个机器周期的S5P2,由复位电路采样一次。
复位电路通常采用上电自动复位和按钮复位两种方式,此电路系统采用的是上电与按钮复位电路,如图所示。
当时钟频率选用6MHz时,C取22μF,Rs约为200Ω,Rk约为1K。
3、键盘电路设计:
●矩阵式键盘按键的识别
4、当非编码键盘的按键较多时,若采用独立式键盘占用I/O口线太多,此时可采用矩阵式键盘,键盘上的键按行列构成矩阵,在行列的交点上都对应有一个键。
行列方式是用m条I/O线组成行输入口,用n条I/O线组成列输出口,在行列线的每一个交点处,设置一个按键,组成一个mxn的矩阵,如图7-6所示,矩阵键盘所需的连线数为行数+列数,如4×4的16键矩阵键盘需要8条线与单片机相连,—般键盘的按键越多,这种键盘占I/O口线少的优点就越明显,因此,在单片机应用系统较为常见。
图7-6矩阵式键盘
矩阵式键盘识别按键的方法有两种:
一是行扫描法,二是线反转法。
这里只说明一下第一种情况,行扫描法:
先令列线Y0为低电平(0),其余3根列线Y1、Y2、Y3都为高电平,读行线状态。
如果X0、X1、X2、X3都为高电平,则Y0这一列上没有键闭合,如果读出的行线状态不全为高电平,则为低电平的行线和Y0相交的键处于闭合状态;如果Y0这一列上没有键闭合,接着使列线Y1为低电平,其余列线为高电平。
用同样的方法检查Y1这一列上有无键闭合,依次类推,最后使列线Y3为低电平,其余列线为高电平,检查Y3这一列有无键闭合。
为了防止双键或多键同时按下,往往从第0行一直扫描到最后1行,若只发现1个闭合键,则为有效键,否则全部作废。
找到闭合键后,读入相应的键值,再转至相应的键处理程序。
●关于键盘的抖动问题的分析和解决:
当用手按下一个键时,如图3所示,往往按键在闭合位置和断开位置之间跳几下才稳定到闭合状态的情况;在释放一个键时,也回会出现类似的情况。
这就是抖动。
抖动的持续时间随键盘材料和操作员而异,不过通常总是不大于10ms。
很容易想到,抖动问题不解决就会引起对闭合键的识别。
用软件方法可以很容易地解决抖动问题,这就是通过延迟10ms来等待抖动消失,这之后,在读入键盘码。
键抖动信号波形
●键编码及键值
(1)用键盘连接的I/O线的二进制组合表示键码。
例如用4行、4列线构成的16个键的键盘,可使用一个8位I/O口线的高、低4位口线的二进制数的组合表示16个键的编码,如图所示。
各键相应的键值为88H、84H、82H、81H、48H、44H、42H、41H、28H、24H、22H、21H、18H、14H、12H、11H。
这种键值编码软件较为简单直观,但离散性大,不便安排散转程序的入口地址。
(2)顺序排列键编码。
如图所示。
这种方法,键值的形成要根据I/O线的状态作相应处理。
键码可按下式形成:
键码=行首键码+列号
5、显示电路设计
显示器普遍地用于直观地显示数字系统的运行状态和工作数据,按照材料及生产工艺,单片机应用系统中常用的显示器有:
发光二极管LED显示器、液晶LCD显示器、CRT显示器等。
LED显示器是现在最常用的显示器之一,如右图。
LED显示器的显示控制方式按驱动方式可分成静态显示方式和动态显示方式两种。
对于多位LED显示器,通常都是采用动态扫描的方法进行显示,其硬件连接方式如系统原理图。
在动态方式中,逐个地循环地点亮各位显示器。
这样虽然在任一时刻只有一位显示器被点亮,但是由于人眼具有视觉残留效应,看起来与全部显示器持续点亮效果完全一样。
四、系统软件设计
1、键盘扫描程序的设计:
假定图中列2行1键被按下,则判定键位置的扫描过程如下:
首先是判定有没有键被按下。
先使P1口输出0EH(1110),然后输入行线状态,测试行线中是否有低电平的,如果没有低电平,再使输出口输出0DH(1101),再测试行线状态。
到输出口输出0BH(1011)时,行线中有状态为低电平者(行1),则闭合键找到,通过此次扫描的列线值和行线值就可以知道闭合键的位置。
当经扫描表明有键被按下之后,紧接着应进行去抖动处理。
采用软件延时的方法,一般为10~20ms,待行线上状态稳定之后,再次判断按键状态。
按键确定之后,下一步是计算闭合键的键码,我们以键的排列顺序安排键号,键码既可以根据行号列号以查表求得,也可以通过计算得到。
键码的计算公式为:
键码=行首号+列号。
计算键码之后,延时等待键释放,目的是为了保证键的一次闭合仅进行一次处理。
在计算机中每一个键都对应一个处理子程序,得到闭合键的键码后,就可以根据键码,转相应的键处理子程序(分支是使用JMP等散转指令实现的),进行字符、数据的输入或命令的处理。
这样就可以实现该键所设定的功能。
总结上述内容,键处理的流程如图所示。
键盘扫描程序如下:
说明:
1)设子程序为KS1,供键盘扫描程序中调用。
2)在单片机应用系统中常常是键盘和显示器同时存在,因此可以把键盘扫描程序和显示程序配合起来使用,即把显示程序作为键盘扫描的延时子程序,实现软件去抖动。
这样做既省去了一个专门的延时子程序,又能保证显示器常亮的客观效果。
假定本系统中显示程序为DIR,执行时间约为10ms,分析以下程序时,可把显示程序DIR当成延时子程序。
AJMPKEY1
KS1:
MOVA,#0FFH
MOVP1,A
MOVA,P1;读P1口键值
CPLA;A取反,无键按下则全“0”
ANLA,0FH;屏蔽A高半字节
RET
KEY1:
ACALLKS1;检查是否有键闭合
JNZ LK1;A非“0”则转移
ACALLDISP;显示一次(延时10ms)
AJMPKEY1
LK1:
ACALLDISP;有键闭合二次消抖延时20ms
ACALLDISP
ACALLKS1;再检查有键闭合否
JNZ LK2;有键闭合,转LK2
ACALLDISP
AJMPKEY1;经去抖动确认无键闭合,延时10ms后转KEY1
LK2:
MOVR2,#0EH;扫描初值进R2
MOVR4,#00H;扫描列号送R4
LK4:
MOVP1,A;扫描初值送P1口
MOVA,P1;读P1口
JBACC.0,LONE;ACC.0=1,第0行无键闭合,转LONE
MOVA,#00H;装第0行行值
AJMPLKP
LONE:
JBACC.1,LTWO;ACC.1=1,第1行无键闭合,转LTWO
MOVA,#04H;装第1行行值
AJMPLKP
LTWO:
JBACC.2,LTHR;ACC.2=1,第2行无键闭合,转LTHR
MOVA, #08H;装第2行行值
AJMPLKP
LTHR:
JBACC.3,NEXT;ACC.3=1,第3行无键闭合则转NEXT
MOVA,#0CH;装第3行行值
LKP:
ADDA,R4;计算键值
PUSHACC;保护键值,将键值入栈
LK3:
ACALLDISP;延时10ms消抖
ACALLKS1;查键是否继续闭合,若闭合再延时
JNZLK3
POPACC;若键起,则键码送A
RET
NEXT:
INCR4;扫描列号加1
MOVA,R2
JNBACC.3,KND;笫3位为“0”,已扫完最高列则转KEND
RLAA;循环左移一位
MOVR2,A
AJMPLK4;进行下一列扫描
KEND:
AJMPKEY1;扫描完毕,开始新的一轮
键盘扫描程序的运行结果是把闭合键的键码放在累加器A中,接下来的程序是根据键码进行程序转移,去执行该键对应的操作。
流程如图:
KEY:
MOVR2,#0FFH;计算键值子程序,初始化键值寄存单元
MOVDPTR,#KEYTABLE;向DPTR加载键码表
CHAZ:
INCR2;键值加1
MOVA,R2;键值送给A
MOVCA,@A+DPTR;查出对比键码
CJNEA,#0FFH,CHA;搜索对比键码结束?
否,跳到CHA
RET;是,最终没找出有效键值,直接返回
CHA:
CJNEA,R4,CHAZ;对比键码与当前扫描结果(键码)一致?
;否,跳到CHAZ再搜索
LCALLSHOW;是,显示出来
RET;返回
KEYTABLE:
;键码表
DB07EH,07DH,07BH,077H
DB0BEH,0BDH,0BBH,0B7H
DB0DEH,0DDH,0DBH,0D7H
DB0EEH,0EDH,0EBH,0E7H
DB0FFH
2、显示程序设计
动态扫描从左到右进行,显示缓冲区首地址为79H。
因此各位显示器都扫过一遍之后,就返回监控程序。
经过一段时间间隔后,再调用显示扫描程序。
通过这种反复调用来实现LED显示器的动态扫描。
初始化子程序:
DISPP:
MOVP1,73H
LCALLDELAYTIME
RET
显示键值子程序:
SHOW:
MOVA,R2
MOVB,#10
DIVAB
SHOWX:
MOVDPTR,#LEDTABLE
XCHA,B
MOVCA,@A+DPTR
MOVSBUF,A
CLRTI
JNBTI,$
XCHA,B
MOVCA,@A+DPTR
MOVSBUF,A
CLRTI
JNBTI,$
RET
DELAYTIME:
;50mS延时子程序
MOVTMOD,#01H
HH:
MOVTH0,#4CH
MOVTL0,#00H
SETBTR0
CLRTF0
NBTF0,$
CLRTR0
RET
LEDTABLE:
DB0FCH,060H,0DAH,0F2H,066H,0B6H;LED字型码表
DB0BEH,0E0H,0FEH,0E6H,02H
END
五、小结
●通过本次实训熟悉构成单片机最小系统的设计与控制方法。
●通过本次实训熟悉单片机应用系统的开发过程和方法。
●通过本次实训如何查找自己所需要的材料。