资源描述
.
目录
0.前言1
1.课程设计的目的和要求2
1.1.课程设计的目的2
1.2.课程设计要求2
2.总体设计3
2.1.系统框图3
2.2.设计原理4
3.硬件设计5
3.1.芯片介绍5
3.2.相应的命令控制字格式9
3.3.硬件连接图10
4.软件设计10
4.1.程序框图10
4.2.程序清单14
5.实验数据14
5.1.0通道数据分析表14
5.2.程序运行图14
6.结束语14
7.参考文献15
附录一:硬件图连接16
附录二:程序清单17
附录三:程序运行图22
单片机数据采集控制系统
0.前言
单片机的应用简介
单片机是一种集成在电路芯片,是采用超大规模集成电路技术把具有数据处理能力的中央处理器CPU随机存储器RAM、只读存储器ROM、多种I/O口和中断系统、定时器/计时器等功能〔可能还包括显示驱动电路、脉宽调制电路、模拟多路转换器、A/D转换器等电路集成到一块硅片上构成的一个小而完善的计算机系统。
目前单片机渗透到我们生活的各个领域,几乎很难找到哪个领域没有单片机的踪迹。导弹的导航装置,飞机上各种仪表的控制,计算机的网络通讯与数据传输,工业自动化过程的实时控制和数据处理,广泛使用的各种智能IC卡,民用豪华轿车的安全保障系统,录像机、摄像机、全自动洗衣机的控制,以及程控玩具、电子宠物等等,这些都离不开单片机。更不用说自动控制领域的机器人、智能仪表、医疗器械以及各种智能机械了。因此,单片机的学习、开发与应用将造就一批计算机应用与智能化控制的科学家、工程师。
单片机广泛应用于仪器仪表、家用电器、医用设备、航空航天、专用设备的智能化管理及过程控制等领域,大致可分如下几个范畴:
〔1.在智能仪器仪表上的应用
单片机具有体积小、功耗低、控制功能强、扩展灵活、微型化和使用方便等优点,广泛应用于仪器仪表中,结合不同类型的传感器,可实现诸如电压、功率、频率、湿度、温度、流量、速度、厚度、角度、长度、硬度、元素、压力等物理量的测量。采用单片机控制使得仪器仪表数字化、智能化、微型化,且功能比起采用电子或数字电路更加强大。例如精密的测量设备〔功率计,示波器,各种分析仪。
〔2.在工业控制中的应用
用单片机可以构成形式多样的控制系统、数据采集系统。例如工厂流水线的智能化管理,电梯智能化控制、各种报警系统,与计算机联网构成二级控制系统等。
〔3.在家用电器中的应用
可以这样说,现在的家用电器基本上都采用了单片机控制,从电饭煲、洗衣机、电冰箱、空调机、彩电、其他音响视频器材、再到电子秤量设备,五花八门,无所不在。
〔4.在计算机网络和通信领域中的应用
现代的单片机普遍具备通信接口,可以很方便地与计算机进行数据通信,为在计算机网络和通信设备间的应用提供了极好的物质条件,现在的通信设备基本上都实现了单片机智能控制,从手机,机、小型程控交换机、楼宇自动通信呼叫系统、列车无线通信、再到日常工作中随处可见的移动,集群移动通信,无线电对讲机等。
〔5.单片机在医用设备领域中的应用
单片机在医用设备中的用途亦相当广泛,例如医用呼吸机,各种分析仪,监护仪,超声诊断设备及病床呼叫系统等等。
〔6.在各种大型电器中的模块化应用
某些专用单片机设计用于实现特定功能,从而在各种电路中进行模块化应用,而不要求使用人员了解其内部结构。如音乐集成单片机,看似简单的功能,微缩在纯电子芯片中〔有别于磁带机的原理,就需要复杂的类似于计算机的原理。如:音乐信号以数字的形式存于存储器中〔类似于ROM,由微控制器读出,转化为模拟音乐电信号〔类似于声卡。
在大型电路中,这种模块化应用极大地缩小了体积,简化了电路,降低了损坏、错误率,也方便于更换。
〔7.单片机在汽车设备领域中的应用
单片机在汽车电子中的应用非常广泛,例如汽车中的发动机控制器,基于CAN总线的汽车发动机智能电子控制器,GPS导航系统,abs防抱死系统,制动系统等等。
此外,单片机在工商,金融,科研、教育,国防航空航天等领域都有着十分广泛的用途。
1.课程设计的目的和要求
1.1.课程设计的目的
运用单片机原理及其应用等课程知识,根据题目要求进行软硬件系统的设计和调试,从而加深对本课程知识的理解, 把学过的比较零碎的知识系统化,比较系统的学习开发单片机应用系统的基本步骤和基本方法,使学生应用知识能力、设计能力、调试能力以及报告撰写能力等有一定的提高。
1.2.课程设计要求
用8051单片机设计数据采集控制系统,基本要求如下:
1、 可实现8路数据的采集,假设8路信号均为0-5V的电压信号;
2、 采集数据可通过数码管显示,显示格式为:[通道号] 电压值,如 [01] 4.5
3、 可通过键盘设置采集方式;〔单点采集、多路巡测、采集时间间隔*
4、 具有异常数据声音报警功能:对第一路数据可设置正常数据的上限值和下限值,当采集的数据出现异常,发出报警信号。
5、 可输出8路顺序控制信号,设每路顺序控制信号为一位,顺序控制的流程为:
6、 可输出频率为1kHZ的方波,三角波,正弦波*。
选做功能:
1、 异常数据音乐报警
2、 输出方波,三角波,正弦波频率可调
2.总体设计
2.1.系统框图
2.2.设计原理
数据采集系统,从严格的意义上来说,应该是用计算机控制的多路数据自动检测或巡回检测,并且能够对数据实行存储、处理、分析计算以及从检测的数据中提取可用的信息,供显示、记录、打印或描绘的系统。
数据采集形同一般有数据输入通道,数据存储与管理,数据处理,数据输出及显示这五个部分组成。输入通道要实现对被测对象的检测,采样和信号转换工作。数据存储与管理要用数据存储器把采集到的数据存储起来,建立相应的数据库,并进行管理和调用。数据处理就是从采集到原始数据中,删除有关干扰噪声,无关信息和必要的信息,提取出反应被测对象特征的重要信息。另外,就是对数据进行统计分析,以便于检索;或者吧数据恢复成原来物理量的形式,以可输出的形态在输出设备上输出,例如打印,显示,绘图等。数据输出及显示就是把数据以适当的形式进行输出和显示。
本课程设计以单片机AT89C51芯片为控制核心和数据采集电路、LED数码管显示电路以及供电系统四大部分构成数据采集和功能显示。当有模拟信号输入时,单片机控制A/D转换器,把要输入的模拟信号转换成相应的数字信号存入到单片机的内存中,再控制LCD显示驱动器把内存中的数字信号显示出来。通过键盘来改变LCD中显示的数据,把改变的数据通过控制D/A转换器输出成相应的模拟信号。
3.硬件设计
3.1.芯片介绍
〔1ADC0809芯片介绍
ADC0809是采样频率为8位的、以逐次逼近原理进行模—数转换的器件。其内部有一个8通道多路开关,它可以根据地址码锁存译码后的信号,只选通8路模拟输入信号中的一个进行A/D转换。主要特性:
18路8位A/D转换器,即分辨率8位。
2具有转换起停控制端。
3转换时间为100μs
4单个+5V电源供电
5模拟输入电压范围0~+5V,不需零点和满刻度校准。
6工作温度范围为-40~+85摄氏度
7低功耗,约15mW。
内部结构 :
ADC0809是CMOS单片型逐次逼近式A/D转换器,内部结构如图13.22所示,它由8路模拟开关、地址锁存与译码器、比较器、8位开关树型D/A转换、
外部特性〔引脚功能 :
ADC0809芯片有28条引脚,采用双列直插式封装,如图13.23所示。下面说明各引脚功能。
IN0~IN7:8路模拟量输入端。
2-1~2-8:8位数字量输出端。
ADDA ADDB ADDC:3位地址输入线,用于选通8路模拟输入的一路
ALE:地址锁存允许信号,输入,高电平有效。
START: A/D转换启动信号,输入,高电平有效。
EOC: A/D转换结束信号,输出,当A/D转换结束时,此端输出一个高电平〔转换期间一直为低电平。
OE:数据输出允许信号,输入,高电平有效。当A/D转换结束时,此端输入一个高电平,才能打开输出三态门,输出数字量。
CLK:时钟脉冲输入端。要求时钟频率不高于640KHZ。
REF〔+、REF〔-:基准电压。
Vcc:电源,单一+5V。
GND:地。
ADC0809的工作过程是:首先输入3位地址,并使ALE=1,将地址存入地址锁存器中。此地址经译码选通8路模拟输入之一到比较器。START上升沿将逐次逼近寄存器复位。下降沿启动 A/D转换,之后EOC输出信号变低,指示转换正在进行。直到A/D转换完成,EOC变为高电平,指示A/D转换结束,结果数据已存入锁存器,这个信号可用作中断申请。当OE输入高电平是,输出三态门打开,转换结果的数字量输出到数据总线上
〔2MCS-51
MCS-51系列单片机是美国Intel公司开发的8位单片机,又可以分为多个子系列。MCS-51系列单片机共有40条引脚,包括32条I/O接口引脚、4条控制引脚、2条电源引脚、2条时钟引脚。
引脚说明:
P0.0~P0.7:P0口8位口线,第一功能作为通用I/O接口,第二功能作为存储器扩展时的地址/数据复用口。
P1.0~P1.7:P1口8位口线,通用I/O接口无第二功能。
P2.0~P2.7:P2口8位口线,第一功能作为通用I/O接口,第二功能作为存储器扩展时传送高8位地址。
P3.0~P3.7:P3口8位口线,第一功能作为通用I/O接口,第二功能作为为单片机的控制信号。
ALE/ PROG:地址锁存允许/编程脉冲输入信号线〔输出信号
PSEN:片外程序存储器开发信号引脚〔输出信号
EA/Vpp:片外程序存储器使用信号引脚/编程电源输入引脚
RST/VPD:复位/备用电源引脚
〔3DAC0832
芯片介绍:DAC0832是美国数据公司的8位D/A转化器,片内带数据锁存器,电流输出,输出电流稳定时间为1μm,功耗为20mW,其引脚说明如下:
D0~D7:数据输入线,TTL电平
ILE:数据锁存允许控制信号线
CS:片选信号线,低电平有效
WR1:数据锁存器写选通输入线,负脉冲有效
XFER:数据传输控制信号输入线,低电平有效
WR2:DAC寄存器写选通输入线,低电平有效
IOUT1:电流输出线,当DAC寄存器为全1时电流最大
IOUT2:电流输出线,其值与IOUT1之和为一常数
Rfb:反馈信号输入线,调整Rfb端外接电阻值可以调整转换满量程精度
Vcc:电源电压线,为+5V~+15范围
VREF:基准电压输入线,范围为:-10V~+10V
AGND:模拟地
DGND:数字地
〔474LS138
74LS138是一个3-8译码器,共16个引脚,其引脚说明如下:
A、B、C:选择端即信号输入端
E1、E2、E3:使能端,其中E1、E2低电平有效,E3高电平有效
Y0~Y7:译码输出信号,始终只有一个为低电平
Vcc:电源端,+5V
GND:线路地
〔574LS273管脚功能:
74LS73中文资料:是带有清除端的8D触发器,只有在清除端保持高电平时,才具有锁存功能,锁存控制端为11脚CLK,采用上升沿锁存。 CPU 的ALE信号必须经过反相器反相之后才能与74LS273的控制端CLK 端相连。
1>.1脚是复位CLR,低电平有效,当1脚是低电平时,输出脚2<Q0>、5<Q1>、6<Q2>、9<Q3>、12<Q4>、15<Q5>、16<Q6>、19<Q7>全部输出0,即全部复位;
<2>.当1脚为高电平时,11<CLK>脚是锁存控制端,并且是上升沿触发锁存,当11脚有一个上升沿,立即锁存输入脚3、4、7、8、13、14、17、18的电平状态,并且立即呈现在在输出脚2<Q0>、5<Q1>、6<Q2>、9<Q3>、12<Q4>、15<Q5>、16<Q6>、19<Q7>上.
第一脚WR:主清除端,低电平触发,即当为低电平时,芯片被清除,输出全为0〔低电平;
CP〔CLK:触发端,上升沿触发,即当CP从低到高电平时,D0~D7的数据通过芯片,为0时将数据锁存,D0~D7的数据不变
〔674LS245
74LS245是我们常用的芯片,用来驱动led或者其他的设备,用法很简单如上图,这里简单的给出一些资料,他是8路同相三态双向总线收发器,可双向传输数据。
74LS245还具有双向三态功能,既可以输出,也可以输入数据。
当8051单片机的P0口总线负载达到或超过P0最大负载能力时,必须接入74LS245等总线驱动器。
当片选端/CE低电平有效时,DIR="0”,信号由 B 向 A 传输;〔接收
DIR="1”,信号由 A 向 B 传输;〔发送当/CE为高电平时,A、B均为高阻态。
<7>8255
芯片说明:8255A是Intel公司生产的可编程输入输出接口芯片,它具有3个8位的并行I/O口,具有三种工作方式,可通过程序改变其功能,因而使用灵活,通用性强,可作为单片机与多种外围设备连接时的中间接口电路。8255有三种基本工作方式, 三种工作方式由工作方式控制字决定,方式控制字由CPU通过输入/输出指令来提供.三个端口中PC口被分为两个部分,上半部分随PA口称为A组,下半部分随PB口称为B组.其中PA口可工作与方式0、1和2,而PB口只能工作在方式0和1。8255共有40个引脚,采用双列直插式封装,各引脚功能如下:
D0--D7:三态双向数据线,与单片机数据总线连接,用来传送数据信息。
CS:片选信号线,低电平有效,表示芯片被选中。
RD:读出信号线,低电平有效,控制数据的读出。
WR:写入信号线,低电平有效,控制数据的写入。
Vcc:+5V电源。PA0--PA7:A口输入/输出线。PB0--PB7:B口输入/输出线。
PC0--PC7:C口输入/输出线。RESET:复位信号线。
A1、A0:地址线,用来选择8255内部端口。GND:地线。
3.2.相应的命令控制字格式
其中定时/计数器工作方式控制字TMOD格式如下:
TMOD 字节地址:89H
D7 D6 D5 D4 D3 D2 D1 D0
GATE
C/T
M1
M0
GATE
C/T
M1
M0
T1方式字
T0方式字
其中,M1、M0为方式选择,C/T为定时/计数选择,GATE为定时器/计数器工作方式选择
中断允许寄存器IE格式如下:
IE 字节地址:A8H
D7 D6 D5 D4 D3 D2 D1 D0
EA
ES
ET1
EX1
ET0
EX0
1FH ACH
ABH AAH A9H A8H
EA为开中断标志 ES串口中断允许标志
ET0/ET1:定时器/计数器T0/T1中断允许标志位
EX0/EX1:INT0/INT1中断允许位
3.3.硬件连接图
〔详见附录一
4.软件设计
4.1.程序框图
图1.主程序流程图
图2.十六进制转化十进制 图3.报警子程序流程图
子程序流程图
图4 显示子程序流程图
.
图5.中断子程序流程图 图6.键盘扫描子程序流程图
4.2.程序清单
〔详见附录二
5.实验数据
5.1.0通道数据分析表
显示值
测量值
绝对误差
相对误差
0.50
0.50
0.00
0.00%
1.00
0.92
0.08
8.00%
1.50
1.42
0.08
5.33%
2.00
1.88
0.12
6.00%
2.50
2.35
0.15
6.00%
3.00
2.80
0.20
6.67%
3.50
3.28
0.22
6.29%
4.00
3.72
0.28
7.00%
4.50
4.21
0.29
6.44%
5.00
4.68
0.32
6.40%
表 1 十进制转换误差分析表
由表中数据可以得出,显示值与实际值的误差还比较大,通过采用查表法来转换十进制数将可以减小此次转换的误差。
5.2.程序运行图
〔详见附件三
6.结束语
通过本次实验,基本上等于对我们做了一次系统的集中式培训,加深了我们对单片机知识的了解。在这次实验的软件编程上,我们运用到了ADC0809的A/D转换程序、DAC0832的D/A转换程序、键盘扫描的程序、十六进制与十进制转换的程序、中断程序及报警的相应程序设计,在原有的基础上巩固了我们编写类似程序的能力。在硬件上运用到了MCS-51单片机、ADCA0809 A/D转换器、DAC0832 D/A转换器,8255定时器,LED数码管,LS138译码器等芯片,加深了我们对硬件电路的了解。虽然此次编写完成的程序精度不够高,误差偏大,但是我们已经掌握了改进的方法,比如用查表法来十进制转换就能大大提高精度,这里由于时间关系没能来的及改正,相信在以后的实习过程中,我们将能更好的运用各类方法来完成任务。
7.参考文献
[1] 徐爱卿,孙涵芳,盛焕鸣 单片机微型计算机应用和开发系统 背景航空航天大学出版社 1992年
[2] 张毅刚,彭喜元,孟升卫,刘兆庆 MCS-51 单片机使用子程序设计〔第二版 XX工业大学出版社 20XX
[3] 陈建铎 单片机应用技术〔第一版 XX科学技术出版社 1991年
[4] 陈建铎 0809单片机原理及应用技术〔第一版电子工业出版社 1995年
[5] 胡汉才 单片机原理及接口技术〔第二版清华大学出版社 20XX
附录一:硬件图连接
附录二:程序清单
ORG 0000H
JMP START
ORG 000BH
LJMP INTO
ORG 05A0H
START: SETB EA
SETB TR0
SETB ET0
MOV TMOD,#01H
MOV TL0,#0F0H
MOV TH0,#0D8H ;中断初始化
SE11: MOV SP,#53H ;定义指针地址
MOV 7EH,#0CH
MOV 7DH,#00H
MOV 7CH,#00H
MOV 7BH,#15H
MOV 7AH,#10H
MOV 79H,#10H ;显示缓冲区初值〔放六个数码管的数据缓冲区
MOV 7FH,#00H
MOV R5,#00H
SETB P3.0
OUTBIT equ 0ffddh ;位控制口/键扫口
OUTSEG equ 0ffdch ;段控制口
IN equ 0ffdeh ;键盘读入口
LedBuf equ 60h ;显示缓冲
LO18: CALL DIS ;显示
CALL SCANKEY ;键盘扫描
MOV DPTR,#0FFE0H ;0809地址为0FFE0H,选择输入控制口为Y0
CJNE A,#20H,LO20 ;判断键盘是否有按键按下,没有则保存数据显示,有则跳至LO20
LO19: MOV R5,7CH ;将通道号保存到R5
CALL DIS ;显示
MOV 7CH,R5 ;将通道号得值返回给缓存区7CH
MOV A,R5 ;通道号得值给A
MOVX DPTR,A ;0809的通道采样
MOVX A,DPTR ;取出采样值
CALL ALERM ;判断是否超出特定范围进行报警
MOV R0,#7AH ;定义R0的地址为#7AH,存放电压值
CALL PTDS ;采样值送显示缓冲区
SJMP LO18 ;循环
;----------------------------键盘有按键按下时的显示
LO20: MOV 71H,A
SUBB A,#07H ;判断按键值是否大于07,是则选择多路巡测,不是则单点采集
JC LO21
JMP LO22
LO21: MOV A,71H ;进行单点采集
MOV 7CH,A ;将通道号的值存到7CH缓存区
MOVX DPTR,A ;0809的通道采样
CALL DIS ;显示
MOVX A,DPTR ;取出采样值
MOV R0,#7AH ;定义R0的地址为#7AH,存放电压值
CALL PTDS ;采样值送显示缓冲区
SJMP LO18 ;循环
LO22: CALL DIS ;显示
MOV A,7FH ;R7内存放通道号
MOV DPTR,#0FFE0H ;选择Y0输入控制
MOVX DPTR,A ;0809的0通道采样
LO23: CALL DIS ;显示
MOVX A,DPTR ;取出采样值
CALL ALERM
MOV R0,#7AH
MOV 7CH,7FH ;通道号值存入7CH缓存区
MOV R6,7FH
CALL PTDS ;采样值送显示缓冲区
CJNE R6,#07H,LO22
MOV 7FH,#00H
MOV 7CH,7FH
SJMP LO18 ;循环
;------------------------中断程序
INTO: PUSH PSW
PUSH ACC
MOV TL0,#0F0H
MOV TH0,#0D8H
INC R6
CJNE R6,#64H,L01 ;延时1s
MOV R7,7FH
INC R7 ;R7+1,即通道号自动加1
CJNE R7,#08H,L0 ;判断8路通道是否循环完成,完成则从0通道重新开始
MOV 7FH,#00H
MOV R7,7FH
L0: MOV 7FH,R7
L01: POP ACC
POP PSW
RETI
;---------------------------
PTDS: MOV B,#51 ;A/255=x/5
DIV AB
MOV R0,A ;将原十六进制数除以51,得到的商即为转换后十进制电压的整数位的值
DEC R0 ;地址减1,即到存放电压小数位地址
CLR A
MOV R6,B
MOV A,R6
MOV B,#5
DIV AB
MOV R0,A ;将余数除以5得到电压小数位的值
SUBB A,#0AH
JNZ L1 ;判断小数位是否溢出,没有则子程序结束
INC R0
MOV R5,7AH
MOV A,R5
INC A
MOV R0,A ;溢出后返回整数位给整数值加1
DEC R0
MOV 79H,#00H ;小数位清零
MOV A,79H
L1: RET
DIS: PUSH DPH
PUSH DPL ;压栈
SETB RS1 ;Rs0,Rs1表示R0~R7分为四个区,默认为00~07H的0区〔00,2区为08~0F,3区为10~17H,4区为18~1F〔这里表示用10的三区
MOV R0,#7EH ;显示缓冲区
MOV R2,#20H ;从左边开始显示
MOV R3,#00H
MOV DPTR,#LS0 ;八段管显示码首地址
LS2: CJNE R2,#02H,LS4 ; 判断是否到了第五个数码管显示位
MOV DPTR,#LS3 ;是则送点亮了小数点的八段管显示码首地址
SJMP LS5
LS4: CJNE R2,#01H,LS5 ;不是则继续判断是否到了最后一个数码管显示位
MOV DPTR,#LS0 ;是则将八段管显示码首地址改为LS0
LS5: MOV A,R0 ;R0内数据表示在所查表中的第几位
MOVC A,A+DPTR ;读取表中对应的数值
MOV R1,#0DCH ;段选,字形口地址
MOVX R1,A ;将A/D转换结果存于R1寄存器内
MOV A,R2 ;位选〔哪个数码管点亮
INC R1 ;字形口地址+1
MOVX R1,A ;位选值送到字形口
LS1: DJNZ R3,LS1 ;延时
CLR C
RRC A ;A右移一位,到下一位数码管显示
MOV R2,A ;位选地址存于R2
DEC R0 ;显示缓冲区地址减1
JNZ LS2 ;判断6位数据是否显示完,没有则跳到LS2继续循环
MOVX R0,A ;将位选地址存在R0内
DEC R0 ;R0-1
CPL A ;A按位取反
MOVX R0,A ;A的值存到R0内
CLR RS1 ;清空RS1
POP DPL
POP DPH ;出栈
RET
ALERM: MOV 70H,A
SUBB A,#80H ;判断电压值是否大于2.5V
JC ALERM1 ;大于报警,A<08H时跳到ALERM1
CLR P3.0 ;亮灯报警
ALERM1: JC ALERM2 ;再次判断电压值是否大于2.5V,大于则继续报警,小于则关闭报警灯
JMP ALARM3
ALERM2: SETB P3.0
ALARM3: MOV A,70H ;还原A内的值
RET
;------------------扫描键盘
SCANKEY: SETB RS1
MOV R2,#0FEH ;从最低列开始把列扫描初值存放在R2
MOV R3,#08H
MOV R0,#00H
LOOPS: MOV R1, #Low<OUTBIT> ;位控制口首地址送到R1
MOV A,R2 ;扫描第一列
MOVX R1,A ;将其值送到R1
RL A ;A左移一位
MOV R2,A ;存放下一列的初始位
INC R1 ;位控制口地址+1
MOVX A,R1 ;列信息读出
CPL A ;A按位取反
ANL A,#0FH
JNZ SACN ;屏蔽高四位,按位与,判断是否有键按下,按下则跳到SCAN输出按键值
INC R0 ;R0+1,列数加1
DJNZ R3,LOOPS ;R3-1后,判断8列数据是否扫描完成
RETKEY3: MOV A,#20H ;如果没有按键按下则将A的内容赋值为20H
TKEY3: MOV R2,A ;将A的值即按键值给R2
CLR A ;A清零
MOV R1,# Low<OUTBIT> ;位控制口首地址送到r1
MOVX R1,A ;位控制口内的内容清零
MOV A,R2 ;将按键值给A
CLR RS1
RET
SCAN: CPL A ;A按位取反,还原按键值
ACC.0,TKEY0
MOV A,#00H ;判断按键是第几行的,如果是第一行则将00H赋值给A,即为行初值
SJMP ENDLOOP
TKEY0: ACC.1,TKEY1
MOV A,#08H ;如果是第二行则将08H赋值给A,即为行初值
SJMP ENDLOOP
TKEY1: ACC.2,TKEY2
MOV A,#10H ;如果是第三行则将10H赋值给A
SJMP ENDLOOP
TKEY2: ACC.3,RETKEY3
MOV A,#18H ;如果是第四行则将18H赋值给A,都不是则跳回RETKEY3
ENDLOOP: ADD A,R0 ;A=A+R0,A内存放按键值
SJMP TKEY3
;-------------------------------------
LS0: DB 0C0H,0F9H,0A4H,0B0H,99H,92H ;八段管显示码
DB 82H,0F8H,80H,90H,88H,83H,0C6H
展开阅读全文