专业综合课程设计
任 务 书
班 级:
学 号:
姓 名:
成 绩:
电子与信息工程学院
计算机科学系
简易计算器
1 总体设计
1.1设计任务
利用单片机及外围接口电路(键盘接口和显示电路)设计制作一个计算器,用led或lcd显示计算数值及结果。
1.2实现性能
1、实现多位数加减运算。
2、实现单字节的乘除运算。
3、实现多字节与单字节乘除运算。
4、用LED或LCD显示输入及结果。
1.3总体设计方案
按照要求,初步确定设计系统由主控模块、显示模块、键扫描接口电路三个部分组成,电路系统构成框图如图1.1所示。主控芯片使用80c51单片机,键盘电路采用4*4的矩阵键盘电路,显示部分由AMPIRE128X64LCD和p0口的8个上拉电阻构成。
2 硬件详细设计
2.1单片机最小系统
单片机最小系统就是支持主芯片正常工作的最小电路部分,包括主控芯片、复位电路和时钟电路。此次设计不需要复位电路和时钟电路,只需要主控芯片80c51即可。图1.2是去掉复位电路和时钟电路的单片机最小系统硬件电路图。
2.2显示部分
由于p0口在I/O工作方式下需要接上拉电阻或下拉电阻,而AMPIRE128X64LCD没有内部上拉电阻,所以要用8各电阻做上拉电阻,给p0口注入电压。AMPIRE128X64各引脚的功能:-vout一般不接,rst是复位接口(高电平有效,接vcc),RW1/0对应读和写,RS1/0对应指令和数据,e是使能端(让指令数据能够写入,下降沿有效),vo是控制屏幕对比度(接滑动变阻器,调电势控制对比度),cs1和cs2值控制左右屏幕开启(低电平有效),gnd,vcc及8各数据传送口。控制引脚接p3口,数据接口接p0口,这部分硬件电路图如图1.3。
图1.2
图1.3
图1.4
2.3键盘电路
这部分有16个button构成4*4矩阵,通过p1口进行行扫描方式实现按键的读取。硬件电路图如图1.4。
2.4总体硬件图
如图1.5
图1.5
3 软件详细设计
3.1键盘扫描子程序
要进行数据的计算就必须进行数据的输入,也就是确定按键输入的数值是什么,这就需要对键盘进行行扫描,从而确定究竟是那个键按下。对于键盘的扫描,既可以使用行扫描也可以使用列扫描,这里采用行扫描的方法完成对键盘的扫描
行扫描就是逐行扫描键盘,看那一行有键按下,再通过返回的见马来确定究竟是哪个按键按下。对第一行扫描就置p1.0为底电平,其余p1口为高电平,如果有按键按下,则p1口的值就会变为别的值,再由新值来确定是那个键按下。程序流程图如图1.6
图1.6
dd:mov r0,#0f7h mov r1,#0
cc:mov a,r0 mov p1,a
mov a,p1 mov r2,a
setb c mov r3,#4
bb:rlc a jnc aa
ee:inc r1 djnz r3,bb
mov a,r0 setb c
rrc a mov r0,a
jc cc ljmp dd
KAOO:LJMP KAO BBB2:LJMP BB2
aa:lcall mm mov a,p1
xrl a,r2 nz ee
ff:mov a,p1 xrl a,r2
jz ff MOV A,51H
CJNE A,#1,BBB2
3.2结果计算子程序
结果计算子程序包含加,减,乘,除四种运算。一面是加法的程序,其他类似。
MOV A,R1 CJNE A,#14,KAOO
MOV 47H,R1 LCALL A31
MOV A,40H ADD A,60H
MOV B,#10 DIV AB
MOV 40H,B ADD A,41H
ADD A,71H MOV B,#10
DIV AB MOV 41H,B
ADD A,42H ADD A,72H
MOV B,#10 DIV AB
MOV 42H,B ADD A,44H
ADD A,74H MOV B,#10
DIV AB MOV 44H,B
ADD A,45H ADD A,75H
MOV B,#10 DIV AB
MOV 45H,B ADD A,46H
ADD A,76H MOV B,#10
DIV AB MOV 46H,B
ADD A,48H ADD A,78H
MOV B,#10 DIV AB
MOV 48H,B ADD A,49H
ADD A,79H MOV B,#10
DIV AB MOV 49H,B
MOV 0CEH,A CJNE A,#0,CC0
MOV A,49H CJNE A,#0,CC1
MOV A,48H CJNE A,#0,CC2
MOV A,46H CJNE A,#0,CC3
MOV A,45H CJNE A,#0,CC4
MOV A,44H CJNE A,#0,CC5
MOV A,42H CJNE A,#0,CC6
MOV A,41H CJNE A,#0,CC7
MOV A,40H CJNE A,#0,CC8
CC0:LCALL A08 CC1:LCALL A07
CC2:LCALL A06 CC3:LCALL A05
CC4:LCALL A04 CC5:LCALL A03
CC6:LCALL A02 CC7:LCALL A01
CC8:LCALL A00 LJMP DD
KAO:CJNE A,#15,KAO1 LJMP START1
KAO1:MOV A,50H CJNE A,#0,A1A1
MOV 60H,R1 LCALL A8
INC 50H ljmp dd
A1A1:CJNE A,#1,A1A2 MOV 71H,60H
MOV 60H,R1 LCALL A8
LCALL A9 INC 50H
LJMP DD A1A2:CJNE A,#2,A1A3
MOV 72H,71H MOV 71H,60H
MOV 60H,R1 LCALL A8
LCALL A9 LCALL A10
INC 50H LJMP DD
A1A3:CJNE A,#3,A1A5 MOV 74H,72H
MOV 72H,71H MOV 71H,60H
MOV 60H,R1 LCALL A8
LCALL A9 LCALL A10
LCALL A11 INC 50H
LJMP DD A1A5:CJNE A,#4,A1A6
MOV 75H,74H MOV 74H,72H
MOV 72H,71H MOV 71H,60H
MOV 60H,R1 LCALL A8
LCALL A9 LCALL A10
LCALL A11 LCALL A12
INC 50H JMP DD
A1A6:CJNE A,#5,A1A7 MOV 76H,75H
MOV 75H,74H MOV 74H,72H
MOV 72H,71H MOV 71H,60H
MOV 60H,R1 LCALL A8
LCALL A9 LCALL A10
LCALL A11 LCALL A12
LCALL A13 INC 50H
LJMP DD A1A7:CJNE A,#6,A1A9
MOV 78H,76H MOV 76H,75H
MOV 75H,74H MOV 74H,72H
MOV 72H,71H MOV 71H,60H
MOV 60H,R1 LCALL A8
LCALL A9 LCALL A10
LCALL A11 LCALL A12
LCALL A13 LCALL A14
INC 50H LJMP DD
A1A9:CJNE A,#7,A1A10 MOV 79H,78H
MOV 78H,76H MOV 76H,75H
MOV 75H,74H MOV 74H,72H
MOV 72H,71H MOV 71H,60H
MOV 60H,R1 LCALL A8
LCALL A9 LCALL A10
LCALL A11 LCALL A12
LCALL A13 LCALL A14
LCALL A15 INC 50H
A1A10:LJMP DD BBB3:LJMP BB33
KAOO2:LJMP KAO2 BB2:CJNE A,#2,BBB3
3.3显示子程序
显示子程序包括左半屏写入8*16数字子程序,右半屏写入8*16数字子程序,左半屏写入16*16汉字子程序,右半屏写入16*16汉字子程序,写指令代码子程序(左),写显示数据子程序(左),写显示数据子程序(左),写显示数据子程序(右)。下面是写指令代码和写显示数据代码。
写指令代码子程序(左):
PRM0:
CLR CSA
SETB CSB
CLR rs
SETB rw
PRM01:
MOV P0,#0FFH
SETB E
MOV A,P0
CLR E
JB ACC.7,PRM01
CLR rw
MOV P0,COM
SETB E
CLR E
RET
写显示数据子程序(左):
PRM1:
CLR CSA
SETB CSB
CLR rs
SETB rw
PRM11:
MOV P0,#0FFH
SETB E
MOV A,P0
CLR E
JB ACC.7,PRM11
SETB rs
CLR rw
MOV P0,DAT
SETB E
CLR E
RET
3.4主程序及其他部分程序
下图为主程序流程图:
主要有:初始化子程序,清屏子程序,固定字符显示,单元定义,端口定义,字模部分。
主程序:
RG 0
LJMP START
START:MOV SP,#60H
LCALL INT ;调用初始化子程序
START1:LCALL CLEAR ;调用清屏子程序
初始化子程序:
INT: MOV COM,#0C0H ;设置显示起始行为第一行
LCALL PRM0
LCALL PRR0
MOV COM,#3FH ;开显示设置
LCALL PRM0
LCALL PRR0
RET
清屏子程序:
CLEAR:
MOV R4,#00H
CLEAR1:
MOV A,R4
ORL A,#0B8H
MOV COM,A
LCALL PRM0
LCALL PRR0
MOV COM,#40H
LCALL PRM0
LCALL PRR0
MOV R3,#40H
CLEAR2:
MOV DAT,#00H
LCALL PRM1
LCALL PRR1
DJNZ R3,CLEAR2
INC R4
CJNE R4,#08H,CLEAR1
RET
mm:mov r4,#250
gg:mov r5,#20
djnz r5,$
djnz r4,gg
ret
4 心得体会
通过此次设计我完成了对给定要求系统的硬件设计,电路设计,软件设计,软件仿真调试。从整个过程中学到了很多方面的知识,了解到以往在学习中的不足之处,是以前学到的东西得到巩固,没学到的东西,现在可以学到。尤其对一些陌生的芯片使用方法和功能有了一定掌握。在设计过程中我发现,我对一些只是半知半解,没有足够的自信去解决问题,只能通过老师同学和网络得到解决。在设计电路图的时候很粗糙,以至于检查好久才能看到问题。当然,这次设计只是简单的完成一些功能,还可以通过增加芯片元器件进行功能拓展。
第一次使用keilc及proteus软件的仿真调试,感觉挺有用的。经过软件在线仿真,然后对实体仿真可以很好的掌握。
参考文献
[1]张美金、刘卉、谢国民.80c51单片微机原理及应用教程.辽宁人名出版社..10
[2]徐维祥、刘旭明.单片微机原理及应用.大连理工大学出版社.1996
[3]李群芳、黄建.单片微型计算机与接口技术.北京工业电子出版社.2001
展开阅读全文