上海电力学院
微处理器综合设计实践报告
题目: 收银机的设计
院系: 计算机与信息工程学院
专业: 电子科学与技术 年级 2008
级
姓名: 钱阿权 学号: 20082677
指导老师: 杨芳 阮颖
一、课程设计目的:
综合应用所学的微处理器原理,汇编语言及相关硬件知识,设计一个具有一
定功能的电路。熟练掌握仿真器和编程器的使用。
二、课程设计要求:
要求:以单片机为核心器件,组成一个收银机系统,能通过 4×4 键盘的
“0”-“9”键实现商品单价和商品数量的输入,“A”、“ B”、“ C”、“ D”键作为功
能键,完成“×”、“+”、“=”和清零的功能,并通过 LED 显示结果。
三、系统组成与工作原理:
1、电路原理图
本电路原理图由基本的单片机系统组成,其中 P1 口与 4*4 键盘相连,行线
与 P1.0~P1.3 相连,列线与 P1.4~P1.7 相连;P0 口分别与七段数码管的字线
a,b,c,d,e,f,g,ph 相连,P0 口作为输出口时外接上拉电阻;P2.0~P2.3
分别控制七段数码管的位线 ABCD,每根线上加三极管作为驱动;P2.7 控制一
个蜂鸣器;最小系统包括晶振,上电自动复位电路,电源等。
2、工作原理
课程设计的基本要求是要通过键盘输入商品单价和数量,运算出结果并显
示到七段数码管上。以此要求,本程序应该主要包括三个方面:键盘输入单元、
逻辑运算单元以及结果显示单元。总体流程图如下:
单片机上电初始化之后始终处于键盘扫描,将扫描到的信息进行处理并将
处理结果通过七段数码管显示出来的循环之中。
下面来分析各个模块的功能实现以及其中注意的问题:
一、键盘扫描
本设计使用的是一个 4*4 的矩阵式键盘,它是用 4 条 I/O 线作为行线,4 条
I/O 线作为列线组成的键盘。在行线和列线的每一个交叉点上,设置一个按键。
这样键盘中按键的个数是 4*4 个。这种行列式键盘结构能够有效地提高单片机
系统中 I/O 口的利用率。
下图是矩阵键盘的电路图,行线接 P1.0~P1.3,列线接 P1.4~P1.7。
开始
程序初始化
键盘扫描
逻辑运算
结果显示
K1
P14
K2
P15
K3
P16
K4
P17
K5
RESET
VCC
RESET
S4
3
S8
7
S3
2
S7
6
S2
1
S6
5
S1
Comment: 0
S5
4
S12
B
S11
A
S10
9
S9
8
S16
F
S15
E
S14
D
S13
C
距阵键盘
P10
P11
P12
P13
P14
P15
P16
P17
0 1 2 3
4 5 6 7
8 9 A B
C D E F
K1 K2 K3 K4
P14
P15
P16
P17
独立键盘
伟 纳 电 子
http://www.willar.com
当某一个按键按下时,该键所在的行与列相连,也就是在读取该键所在行
的状态时就是该列的状态,读取该键所在列的状态时就是该行的状态,以此原
理可以设计出键盘扫描程序,并得到各个按键的特征编码。
先从 P1 口的高四位输出低电平,低四位输出高电平,从 P1 口的低四位读
取键盘状态;再从 P1 口的高四位输出高电平,低四位输出低电平,从 P1 口的
高四位读取键盘状态。将两次读取结果组合起来就可以得到当前按键的特征编
码。各数字特征编码如下:
其余 ABCD*#特征码分别是 7EH,7DH,7BH,77H,B7H,E7H。未有键
按下的特征码是 FFH,部分扫描子程序如下:
MOV P1,#0FH
MOV A,P1
ANL A,#0FH
MOV B,A
MOV P1,#0F0H
MOV A,P1
ANL A,#0F0H
ORL A,B
最终累加器 A 中存储的是扫描到的特征码,随后可以通过建表查表的方式
得到具体按键值。扫描程序的流程图如下:
P1.0
P1.1
P1.2
P1.3
P1.4
P1.5
P1.6
P1.7
Y
N
N
Y
Y
Y
N
Y
Y
Y
N
N
扫描子程序
开始
键按
下?
清
零?
+
?
×
?
=
?
*
?
#
?
清零子程序
主程序
乘号判定
# 判定
加号判定
* 判定
等号判定
存储操作数
N
N
扫描子程序的流程为:先判断有无按键按下,若无则返回主程序,若有按
键按下则判断是否为各功能键,若为功能键则跳转到相应的功能键子程序完成
相应功能,最终返回主程序。若非功能键则通过查表方式得到相应的数字,存
储后转到主程序。
二、结果显示
本设计运算的结果是通过四个七段数码管来显示,为了节省单片机的 I/O
口,采用了动态显示的方法。数码管不同位显示的时间间隔可以通过调整延时
程序的延时长短来完成。数码管显示的时间间隔也能够确定数码管显示时的亮
度,若显示的时间间隔长,显示时数码管的亮度将亮些,若显示的时间间隔短,
显示时数码管的亮度将暗些。若显示的时间间隔过长的话,数码管显示时将产
生闪烁现象。所以,在调整显示的时间间隔时,即要考虑到显示时数码管的亮
度,又要数码管显示时不产生闪烁现象。
需要显示的运算结果会分别存在千位单元 QW,百位单元 BW,十位单元
SW 以及个位单元 GW,因此结果显示子程序只需要读取各单元的内容,转换成
七段数码管的特征码输出即可。其流程图可表示如下:
结果显示子程序
取数
查表转换为特征码
赋 P0 口
移至下一位
延时 5MS
显 示 完
成?
主程序
Y
N