自动化控制系统及装置综合实习控制系统及装置综合实习实习报告学院: XX学院专业: XXX姓名: XX学号: XXXXXXX指导教师: XXX二〇一一年九月十六日目录1.实习课题任务 (3)1.1课题:简易计算器的设计 (3)1.2设计、实习要求 (3)2.课题任务方案 (3)3.硬件部分: (4)3.1电路的整体设计 (4)3.2单元电路设计 (5)3.2.1 单片机部分 (5)3.2.2输入单元 (8)3.2.3显示单元 (9)4.软件部分 (9)4.1LED显示程序 (9)4.2读键输入程序 (10)4.3运算主程序的设计 (12)5.实习中出现的问题 (13)6.实习感想 (13)1. 实习课题任务1.1 课题:简易计算器的设计 1.2 设计要求:根据功能和指标要求,本系统选用80C51单片机为主控机实现对计算器的设计。
可以进行两位数的加、减、乘、除,可连续运算。
当键入值大于99时,将自动清零,可以重新输入。
按“+”、“-”、“×”号可以进行操作数的相应运算,减法中运算结果为“-”时,“-”号要跟着结果。
2. 课题任务方案本次设计使用单片机来完成两位数以内简易计算器。
本设计以AT80C51为单片机,P2口作为输入端外接4*4键盘,通过键盘扫描确定输入数字。
在P0口、P1口接驱动电路,用以保证LED 数码管工作正常。
计算器将完成的功能有两位数以内加、减、乘、除功能。
整体框图如下:在设计过程中,先着手编写主程序,再根据需要设计从属程序和子程序,逐层细化最终完成一个复杂程序的设计。
程序流图如下所示:单 片 机输入单元运算单元显 示 单 元3. 硬件部分:3.1电路的整体设计电路的整体原理图及PCB 图如图所示:启动LED 显示初始值键盘输入数字LED 显示数字键盘输入功能键盘输入数字LED 显示数字键盘输入功能键LED 显示计算结果是否继续运算?结束键盘输入“CE ”是否3.2单元电路设计3.2.1 单片机部分:AT80C51单片机是在一块芯片中集成了CPU、RAM、ROM、定时器/计数器和多功能I/O等一台计算机所需要的基本功能部件。
如果按功能划分,它由如下功能部件组成,即CPU、RAM、ROM/EPROM、并行I/O口、串行口、定时器/计数器、中断系统及特殊功能计数器。
如下图所示:80C51有40引脚双列直插(DIP)和44引脚(QFP)封装形式。
上图为引脚配置:40个引脚中,正电源和地线两根,外置石英振荡的时钟线两根,4组8位共32个I/O口,中断口线与P3口线复用。
如前要求,单片机P0、P1送显示,P0扫描键盘,运算结果经显示器驱动器由LED 数码管显示。
由于运算用到单片机内ROM,故EA/=1,即31脚送高电平。
另外XTAL1和XTAL2之间接晶振,RES端接复位电路,VCC接高电平GND接地,其余未提及的管脚可悬空。
a. 复位电路RST为复位输入信号,高电平有效。
在振荡器工作时,在RST上作用两个机器周期以上的高电平,将单片机复位。
复位电路如所示:b. XTAL1和XTAL2当使用芯片内部时钟时,这两根引线用于外接石英晶体和微调电容;当使用外部时钟时,用于接外部时钟脉冲信号。
如图所示:其他引脚介绍c. P0.0~P0.7P0.0~P0.7 是P0口8位双向口线。
P0口是漏极开路的双向I/O口,当使用片外存储器(ROM及RAM)及外部I/O接口时,作地址和数据总线分时复用。
P0口(作为总线时)能驱动8个LSTTL负载,作一般 I/O口用时需外加上拉电阻。
d. P1.0~P1.7P1.0~P1.7是P1口的8位双向口线。
P1口是准双向I/O口,具有内部上拉电阻。
在编程/校验期间,用做输入低位字节地址。
P1口可以驱动4个LSTTL负载。
e. P2.0~P2.7P2.0~P2.7是P2口的8位双向口线。
P2口也是准双向I/O口,具有内部上拉电阻。
当使用片外存储器(ROM及RAM)及外部I/O接口时,输出高8位地址。
P2口可以驱动4个LSTTL负载。
f. P3.0~P3.7:双功能口第一功能作为通用I/O 口使用,P3.0~P3.7是P3口的8位双向口线。
P3口也是准双向I/O 口,具有内部上拉电阻,P3口可以驱动4个LSTTL 负载。
P3口线还有第二功能,具体定义如下: P3.0——RXD (串行输入口),输入。
P3.1——TXD (串行输出口),输出。
P3.2——(外部中断0),输入。
P3.3——(外部中断1),输入。
P3.4——T0(定时器0外部输入),输入。
P3.5——T1(定时器1外部输入),输入。
P3.6—— (片外数据存储器及I/O 接口写选通),低电平有效。
P3.7—— (片外数据存储器及I/O 接口读选通),低电平有效。
g. PROG ALE /PROG ALE /是地址锁存允许信号。
在系统扩展时,ALE 用于将P0口输出的低8位地址锁存到外部地址锁存器,以实现P0口低位地址和数据的分时复用。
此外在不访问外部存储器时,ALE 是以晶振频率的1/6的固定频率输出正脉冲,故它也可以作为外部时钟源或外部定时脉冲源使用。
第二功能PROG 是对80C51单片机编程时作为编程脉冲的输入端。
ALE 可以驱动8个LSTTL 负载。
h. PSENPSEN 是片外程序存储器选通信号,低电平有效。
在从片外程序存储器取指期间,在每个机器周期中,当有效时,程序存储器的内容被送上P0口(数据总线)。
可以驱动8个LSTTL 负载。
i. PP V EA /PP V EA /是访问外部程序存储器选通信号。
当其为低电平时,对ROM 的读操作限定为外部存储器;当其为高电平时,对ROM 的读操作是从内部开始的,当PC 值大于内部程序存储器地址范围时,CPU 自动转向读外部程序存储器。
第二功能VPP 用于编程时接入21V 或12V 的编程电压。
j. VCC 和GNDVCC 在运行和程序校验时加+5 V 。
GND 接地。
74LS245芯片介绍:74LS245是我们常用的芯片,用来驱动led或者其他的设备,它是8路同相三态双向总线收发器,可双向传输数据。
74LS245还具有双向三态功能,既可以输出,也可以输入数据。
当8051单片机的P0口总线负载达到或超过P0最大负载能力时,必须接入74LS245等总线驱动器。
当片选端/CE低电平有效时,DIR=“0”,信号由 B 向 A 传输;(接收)DIR=“1”,信号由 A 向 B 传输;(发送)当CE为高电平时,A、B均为高阻态。
3.2.2输入单元键盘是一组按键的集合,它是最常用的单片机输入设备,操作人员可以通过键盘输入数据或命令,实现简单的人机通讯。
键是一种常开型按钮开关,平时键的二个触点处于断开状态,按下键时它们才闭合。
矩阵键盘的按键设置在行、列线的交点上,行、列线分别连接到按键开关的两端。
列线通过上拉电阻接到+5V。
平时无按键动作时,列线处于高电平状态,而当由按键按下时,列线电平状态将由与此列线相连的行线电平决定。
行线电平如果为低,则列线电平为低;行线电平如果为高,则列线电平亦为高。
这一点是识别矩阵键盘按键是否被按下的关键所在。
3.2.3显示单元LED 数码管实际上是由七个发光管组成8字形构成的,加上小数点就是8个。
这些段分别由字母a,b,c,d,e,f,g,dp 来表示。
封装图如下:4. 软件部分:4.1 LED 显示程序:开始初始化显示取数据输出段码输出位选通信延时位选通信号移指向下一个数位 完 成否显示子程序如下:;动态显示子程序DIR:MOV DPTR,#TAB ; 数码管译码表首址MOV R0,#78H ;待显缓冲区个位地址MOV A,#0FEH ; 个位位选信号MOV R1,ALD1:MOV A,@R0MOVC A,@A+DPTR ;查表MOV P2,R1 ;共阳极管字位选择送到P2口MOV P0,A ;字段码送P0口LCALL DELAY1ms ;调延时1ms 子程序INC R0 ;R0指向下一模块MOV A,R1 ;JNB ACC.5,LD2 ;判断是否发完6个数RL A ;指向下一个位MOV R1,A ;位选信号存回R3SJMP LD1 ;跳去再显示下一个数LD2:RET ;发完6个数就返回TAB:DB 0C0H,0F9H,0A4H,0B0H,099H,092H,082H,0F8H,80H,90H,0FFH ;共阳极译码表DELAY1ms:MOV R6,#2LOOP1:MOV R7,#248NOPLOOP2:DJNZ R7,LOOP2DJNZ R6,LOOP1RET4.2读键输入程序:开始初始化地址参数输出列扫描信号列扫描信号移位读入行信号该列有键输入? 四列扫描完? 按照行列计算键值查表得键码等待按键释放否是否为了实现键码的数据输入功能和命令处理功能,每个键都有其处理子程序,为此每个键都对应一个码——键码。
为了得到被按键的键码,现使用扫描法识别按键。
列扫描信号进行读入行的信号判断该列是否有列的输出——是则进行按照行列计算键盘的值,查表取得键码并返回——若否则进行再次扫描。
程序框图如下:读键子程序如下:KEY:LCALL KS ;调用检测按键子程序JNZ K1 ;有键按下继续LCALL DELAY2 ;无键按调用延时去抖ACALL DIR ;调用动态显示AJMP KEY ;返回继续检测按键K1:LCALL DELAY2 ;有键按下延时去抖动LCALL KS ;再调用检测按腱子程序JNZ K2 ;确认有按键进行下一步ACALL DIR ;调用动态显示AJMP KEY ;无键按下返回继续检测K2:MOV R2,#0EFH ;将扫描值送入R2暂存MOV R3,#00H ;将第一列值送入R3暂存K3:MOV P1,R2 ;将R2值送入P1口L0:JB P1.0,L1 ;P1.0等于1跳转到L1MOV A,#00H ;将第一行值送入ACCAJMP LK ;跳转到键值处理程序L1:JB P1.1,L2 ;P1.1等于1跳转到L2MOV A,#04H ;将第二行的行值送入ACCAJMP LK ;跳转到键值处理程序L2:JB P1.2,L3 ;P1.2等于1跳转到L3MOV A,#08H ;将第三行行值送入ACCAJMP LK ;跳转到键值处理程序L3:JB P1.3,NEXT ;P1.3等于1跳转到NEXT处MOV A,#0CH ;将第四行行值送入ACCLK:ADD A,R3 ;行值与列值相加后的键值送入APUSH ACC ;将A中的值送入堆栈暂存K4:LCALL DELAY2 ;调用延时去抖程序LCALL KS ;调用按键检测程序JNZ K4 ;按键没有松开继续返回检测POP ACC ;将堆栈值送入ACCMOV DPTR,#KEYTABMOVC A,@A+DPTRRETNEXT:INC R3 ;列值加一MOV A,R2 ;R2值送入AJNB ACC.7,KEY ;扫描完至KEY 处进行下一扫描RL A ;扫描未完将值左移一位进行下一列扫描MOV R2,A ;将ACC 值送入R2暂存AJMP K3 ;跳转到K3继续KS:MOV P1,#0FH ;将P1口高四位置0低四位置1MOV A,P1 ;读P1口XRL A,#0FH ;将A 中的值与A 中的值相异或RET ;子程序返回KEYTAB:DB 1,2,3,10,4,5,6,11,7,8,9,12,15,0,14,13 ;键值表DELAY2:MOV R6,#2H ;延时去抖动子程序LP1:MOV R7,#0FAHLP2:DJNZ R7,LP2DJNZ R6,LP1RET4.3运算主程序的设计:首先初始化参数,送LED 低位显示“0”,高位不显示。