《单片机原理与接口技术》
课程设计报告
设计题目:基于80C51单片机系统实验板的制作
与程序设计
专业:
班级:
姓名:
指导教师:
2012年6月
目录
第1节 引 言………………………………………………………页码
第2节系统主要硬件电路设计……………………………………页码
第3节 系统软件设计………………………………………………页码
第4节 结束语………………………………………………………页码
参考文献
附录
基于80C51单片机系统实验板的制作与程序设计
第1节引 言
单片微型计算机简称单片机,又称微控制器(MCU),它的出现是计算机发展史上的一个重要的里程碑,它以体积小、功能全、性价比高等诸多优点独具特色,在工业控制、尖端武器、通信设备、信息处理、家用电器等嵌入式应用领域中独占鳌头。本次课设采用的STC89C51单片机是51系列单片机的一种代表,目前51系列单片机是国内目前应用最广泛的一种单片机之一。单片机以其系统硬件构架完整、价格低廉、学生能动手等特点,成为工科学生硬件设计的基础课。
1.1本设计任务和主要内容
本设计以单片机STC89C51为控制核心,由八路LED模块、八路按钮模块、四位一体共阳数显模块、语音模块等部分组成。可实现花样流水灯、简易电子琴、外部中断控制、时间显示等功能。要求在将硬件电路准确无误地安装后进行软件调试,至少完成以下三个程序设计及调试任务
1 .1.1花样流水灯:程序循环输出到单片机P1口,控制LED灯从LED1向LED8依次亮,到全部亮然后LED 灯从LED1向LED8依次前进单个亮,类似跑马情形。
1.1.2.简易电子琴:向蜂鸣器发送一定频率的方波可以使蜂鸣器发出相应的音调,该实验使蜂鸣器发出类似"多来咪发梭拉西"的音调。
1.1.3数码管动态扫描数显:单片机P1端口用于数码管显示数值,P2端口部分用于选择4位数码管中的一位,从而实现一下现象:4位数码管从第一位到第四位由0到F依次循环显示
1.2基于80C51单片机系统实验板概述
本次课设所使用的单片机最小系统板包括以下器件:电源端子(DC +5V),可以USB供电,也可独立电源供电。通用异步串口,采用MAX232做电平转换。STC89C51单片机。各种颜色的LED发光二极管共9个,其中8个接于P1口做LED显示,还有一个做电源灯显示。四位一体共阳数码管可以实现时钟电路及动态扫描显示。还有其他电阻电容若干,系统板一个,大按键开关两个,用于中断控制和通信开关。利用STC51系列特有的ISP在线编程,方便我们初学者的二次开发,省去大量芯片烧写时间。USB电源线供电和外接供电并存,方便学生在寝室使用.板上提供ISP 接口并将单片机的全部I/O 引脚引出。51开发板使用ISP 在线下载技术, 直接把程序写到单片机中,使用当前最流行的KEILC51 软件,用户无需再购买任何仿真器或编程器等开发工具,只要有一台计算机,就可以实践学习单片机方面的知识;同时引出的单片机的32个I/O口可全部用于扩展,用户可把自己设计的电路通过这32 个I/O口与单片机连接,方便用户开发自己的产品,最大限度的为用户节约学习成本和加快学习速度。
1.2.1Stc89C51单片机开发板硬件配置情况
1)stc89c51
2)MAX232
3)8个LED灯
4)8个按键
5)4位8段数码管
6)蜂鸣器
7)11.0592M晶振
1.2.2、stc89C51单片机实验板配套实验
1)51开发板预烧程序
2)按键查询
3)按键中断
4)蜂鸣器
5)蜂鸣器音乐
6)花样灯
7)流水灯
8)跑马灯
9)数码管
10)数码管扫描
第2节系统主要硬件电路设计
2.1 STC89C51单片机简介
MCS-51是美国Intel公司生产的一系列单片机的总称,包括多个品种,如8031、8051、8751、8032、80C52、8752等。其中8051是最典型的产品,其他单片机都是在其基础上进行功能增减而来的,所以人们习惯于用8051来称呼MCS-51系列单片机。Intel公司将MCS-51的核心技术授权给了多家公司,这些厂家生产的单片机在功能上或多或少有些改变,以满足不同的需求,其中美国的ATMEL公司生产的AT89C51是曾经在我国非常流行的51单片机。当前AT89C51/52已经停产,其替代产品为AT89S51/52。深圳宏晶公司出品的STC89C51可以直接代替传统的AT89S51和AT89C51芯片,也可以代替菲利普、华帮等其他公司的89C51,由于时代的发展,工艺的进步,STC89C51功能更强,寿命更长(4K字节Flash存储器、128字节片内RAM、支持ISP下载编程)
图2.1 STC89c51单片机
单片机的时钟信号用来提供单片机片内各种微操作的时间基准,时钟信号通常用两种电路形式得到:内部振荡和外部振荡。MCS-51单片机内部有一个用于构成振荡器的高增益反向放大器,引脚XTALl和XTAL2分别是此放大电器的输入端和输出端,由于采用内部方式时,电路简单,所得的时钟信号比较稳定,实际使用中常采用这种方式,如图2-2所示在其外接晶体振荡器(简称晶振)或陶瓷谐振器就构成了内部振荡方式,片内高增益反向放大器与作为反馈元件的片外石英晶体或陶瓷谐振器一起可构成一个自激振荡器并产生振荡时钟脉冲。
图2-2中外接晶体以及电容C2和C1构成并联谐振电路,它们起稳定振荡频率、快速起振的作用,其值均为30P左右,晶振频率选11.0592MHz。
为了初始化单片机内部的某些特殊功能寄存器,必须采用复位的方式,复位后可使CPU及系统各部件处于确定的初始状态,并从初始状态开始正常工作。单片机的复位是靠外电路来实现的,在正常运行情况下,只要RST引脚上出现两个机器周期时间以上的高电平,即可引起系统复位,但如果RST引脚上持续为高电平,单片机就处于循环复位状态。复位后系统将输入/输出(1/0)端口寄存器置为FFH,堆栈指针SP置为07H, SBUF内置为不定值,其余的寄存器全部清0,内部RAM的状态不受复位的影响,在系统上电时RAM的内容是不定的。复位操作有两种情况,即上电复位和手动(开关)复位。本系统采用上电复位方式。图2-2中R9和Cl组成上电复位电路,其值R取为10K, C取为10μF.
图2.2 最小系统结构图
2.2电源转换芯片MAX232
Max232产品是由德州仪器公司(TI)推出的一款兼容RS232标准的芯片。该器件包含2驱动器、2接收器和一个电压发生器电路提供TIA/EIA-232-F电平。
该器件符合TIA/EIA-232-F标准,每一个接收器将TIA/EIA-232-F电平转换成5-V TTL/CMOS电平。每一个发送器将TTL/CMOS电平转换成TIA/EIA-232-F电平。下图为MX232双串口的连接图,可以分别接单片机的串行通信口或者实验板的其它串行通信接口:
图2.3 max232电平转换电路
2.3 四位一体共阳LED数显
8 段数码管属于LED 发光器件的一种,分为8 段:A、B、C、D、E、F、G、DP,其中DP 是小数点位,还包括一个公共端COM 端。从电气上,8 段数码管又分为共阴和共阳两种。共阴指数码管的公共端接负极,而各段接正极;共阳则正好相反。如果有多个数码管,它们的各段输入一般都分别接在一起,公共端分开。开发板上采用的是4位一体的共阳数码管。数码管显示方法可分为静态显示和动态显示两种。静态显示就是每个数码管的8 段输入各自分开,其COM 口电平一直有效。它的优点是控制方便,显示稳定,但要占用较多的I/O口。动态显示的原理是,各个数码管的段输入相应位接在一起,共同占用8 位数据线;公共端分开,利用扫描和人视觉上的短暂停留性,依次给出各个数码管COM 端使能信号,并同时给出各数码管的数据。它的优点是占用I/O 口少,但控制较静态显示复杂。一般在数码管较多的情况下都采用动态显示。本实验板使用的是4位一体的共阳数码管,共12脚,其中8脚公用是8段显示,另4脚是对应于4个数码管。
图2.4四位一体共阳数显电路
2.4 LED灯电路
一般发光二极管的工作电流是十几毫安至几十毫安,正向压降为1.3V-2.5V。有一些低电流的发光二极管的工作电流可以降至2MA,而亮度与正常发光二极相同,当然价格会高一些。所有发光二极管在电路中一般都要串一个电阻用来限流。发光二极管的电流不同,亮度也不同,并且寿命也会受到影响,这个电流通常就是由接入的电阻来调整。
51开发板的发光二极管串联了一个1kΩ的电阻后接在5V 的电压上。LED 灯电路接在单片机的P1口上。LED灯的阳极接电源,阴级接单片机的I/0 口,因此是低电平驱动,只要单片机在相应引脚给出低电平,LED 就会发光。
2.5按键电路
实验板按键电路如下图,通过电阻接电源正级,并将按键所接的单片机的I/O口作为输出端。这样,当按键没有按下时,所有的I/O输出端都是高电平,代表无键按下;当按键按下时,I/O口输出就变成低电平。由于按键属于机械开关,按动过程不可避免存在抖动的现象。因此必须去抖动才能避免误判断。可以在程序中采用软件延时的办法,即每次检测到有键按下时延时20ms 再判断是否按键还是处于按下状态,是则表示确实有键按下,不是则表示是按键误动作。用户按下按键的时间可以稍微长一点。
2.6蜂鸣器
蜂鸣器俗称喇叭,是广泛应用于各种电子产品的一种元器件,它用于提示、报警、音乐等许多应用场合。蜂鸣器与家用电器上面的喇叭在用法上也有相似的地方,通常工作电流比较大,电路上的TTL 电平基本上驱动不了蜂鸣器,需要增加一个电流放大的电路才可以,这一点与家用电器中的功放有相似之处。蜂鸣器使用很方便,电流通过时蜂鸣器就发出响声,只要将蜂鸣器与单片机相连的I/O 口置为低电平,就可以驱动蜂鸣器发声。
第3节实验系统软件设计(写出程序清单)
1.LED程序设计:试编程按下列顺序要求每隔0.5秒循环操作
(1) 从左到右依次点亮,每次增加一个,直至全亮;
(2) 从左到右依次暗灭,每次减少一个,直至全灭;
(3) 从右向左依次点亮,每次亮一个;
(4) 从左到右依次点亮,每次亮一个;
(5) 8个发光二极管闪烁三次;
(6) 两个二极管前后追逐循环三次;
(7) 引入两个按键控制,K1按下停止循环,K2按下继续循环。
2.按键识别程序:
(1) 按下某一按键,对应发光二极管点亮,当手松开时发光二极管熄灭;
(2) 按下某一按键,发光二极管点亮且蜂鸣器发出对应音阶声响,形成简易电子琴。
3. 数码管显示设计练习:
(1) 0-9数字递增计数,然后9-0数字递减计数,循环
(2) 实现0.0-9.9数字秒表,K0按键暂停,K1按键清零重新计数
4、数字时钟
第四节 结 束 语
写出此次实训的感受和收获,经验与教训,
参考文献
[1] 张伟,《单片机原理及应用》,机械工业出版社,2005
[2] 张鑫,《单片机原理及应用》,电子工业出版社,2005
[3] 曹国清,《数学电路与逻辑设计》,中国矿业大学出版社,2004
[4] 任致程,《经典集成电路400例》,机械工业出版社,2002
[5] 薛栋梁,《单片机原理及应用》,中国水利水电出版社,2001
[6] 吴金戎,沈庆阳等,《8051单片机实践与应用》,清华大学出版社,2001
[7] 谢筑森,张辉等,《单片机开发与典型应用设计》,中国科学技术大学出版社,1997
附录
(贴出实验板正面及背面图片)
第二篇:单片机课程设计报告—简易计算器1
物理与电气工程学院课程设计报告
设计名称:简易计算器
院 部:物理与电气工程学院
专业班级:10电信一班
学生姓名:陈鹏梁伟伍洁泉吴昌刚
完成时间:2012年6月9日
摘 要
单片机的出现是计算机制造技术高速发展的产物,它是嵌入式控制系统的核心,如今,它已广泛的应用到我们生活的各个领域,电子、科技、通信、汽车、工业等。本次设计是设计一个简易计算器,能够进行多位简单的加减运算,同时它能支持2位整数运算。它主要由STC89S52单片机、A8255、数码管,键盘等模块组成。本计算器是将键盘输入信息经处理通过缓存,送入数码管显示,键盘采用行列式,数码管采用动态扫描方式,计算功能通过软件实现,用汇编语言对单片机可编程芯片进行编程,实现对计算器的设计。
目录
设计要求 1
1、方案....................................................................
1.1方案................................................................
2、硬件电路设计........................................................... .
2.1键盘电路设计........................................................
2.2显示电路设计........................................................
3、系统工作流程及流程图....................................................
4、系统功能测试与整体指标..................................................
4.1 软件调试步骤.......................................................
4.2 程序调试步骤.......................................................
4.3 测试结果...........................................................
5 总结与思考及致谢
附录一 主程序..............................................................
简易计算器
设计要求
① 3*4键盘输入,数码管显示。
② 完成一位整数的加减
③ 由于键盘只有12个按键,安排如下:
+---------------+
| 1 | 2 | 3 | 4 |
| 5 | 6 | 7 | 8 |
| 0 | + | - | = |
+---------------+
1、方案
1.1方案
按照设计要求,提出方案
此方案首先通过键盘得到数据,通过A8255记录数据,并通过程序对数据进行处理,最后通过数码管显示出来。结构框图如图1:
图1 方案方框图
2、硬件电路设计
2.1键盘电路设计
键盘输入采用3*4的矩阵键盘。3*4键盘12个按键分别用于控制数字“0~8”以及数学运算符号“+、-、键盘模块电路如图(2)所示。
图2 键盘设置图
当进行扫描时,扫描信号由列引脚输入键盘。以11111101、11111011、11110111 的顺序每次。
扫描不同的列,然后读取列引脚的信号就可以判断是哪个键被按下。
识别键盘上哪个键被压下的过程的扫描步骤:
1.检测是否所有键都都松开了,若没有则反复检测。
2.但所有键都松开了,再检测是否有键压下,若无键一下则反复检测。
3.如有键压下,要消除键抖动,确认有键压下。
4.对压下的键进行编码,将该键的行列信号转换成16 进制码,由此确定哪个键被压下了。如出现多键重按的情况,只有在其它键均释放后,仅剩一个键闭合时,才把此键当作本次压下的键。
5.该键释放后,再回到2。
2.2显示电路设计
LED显示器由七段发光二极管组成,排列成8字形状,因此也成为七段LED显示器,器排列形状如图(3)所示:
图3 LED数码管
为了显示数字或符号,要为LED显示器提供代码,即字形代码。七段发光二极管,再加上一个小数点位,共计8段。
图4 LED数码管显示原理图
3、系统工作流程及流程图
系统在开机上电后,系统处于等待状态,没有任何动作。等待输入数字以及运算符号,一旦有相应的按键按下,系统就会执行相应的动作。LED数码管上就会显示对应的数字,符号以及运算结果等。
为了实现键盘的数据输入功能和命令处理功能,每个键都有其处理子程序,为此每个键都对应一个码——键码。为了得到被按键的键码,现使用行扫描法识别按键。其程序框图如图5:
图5 数码管显示程序框图
4、系统功能测试与整体指标
4.1 软件调试步骤
1)打开软件后,在Project菜单中选择New Project命令,打开一个新项目。保存此项目,输入工程文件名后,并保存工程文件的目录。
2)为项目文件选择一个目标器件,即选择8051的类型。在Data base 列表框中选择“ATML 89S52”,确定。
3)上述设置好后,创建源程序文件并输入程序代码。输入好代码后点击“文件/保存”。
4)把源文件添加到项目中,用鼠标指在目标工作区的目标1,点击右键在弹出的菜单中选择添加文件到源代码组,在弹出的添加文件框中,选择需要添加到项目中的文件。
5)开始编译,对项目文件进行编译。若没有错误后进行硬件调试。
4.2 程序调试步骤
程序调试应一个模块一个模块地进行,首先单独调试各功能子程序,检查程序是否能够实现预期的功能,接口电路的控制是否正常等;最后逐步将各子程序连接起来进行总调试。故调试步骤如下:
1)矩阵3*4键盘的调试
键盘程序是整个程序的基础,我们必须保证其正确。调试方法:先把程序下载到单片机,让数码管显示,在有键按下时显示的是否为设定的值。
2)数码管程序调试
正确的显示数值是整个程序的关键。调试方法:先把程序下载到单片机,让数码管显示,是否正确的显示数值。
4.3 测试结果
实例测试:将写入程序的单片机插入实验板插座内,程序正确的有0~8数值的显示和正常的两则运算
5、\总结与思考及致谢
电子设计正在当今社会发挥越来越重要的作用,其采用的软硬件结合技术也逐渐成熟,该模拟系统正是采用软硬相结合的方法实现的。STC89S52是一种低功耗、高性能CMOS 8位微控制器,具有8K在系统可编程FLASH存储器,可以为众多嵌入式控制应用系统提供灵活、超有效的解决方案。在键盘设计方面,主要是软件的设计,通过程序编码来完成硬件方面所无法工作的部分,例如关于在扫描键盘时,需要逐行拉低并进行判断、编码。判断时,需要不断的屏蔽字节,来获取所需要的数据,而这一点硬件是无法做到的。此次课程设计是做简易计算器,这个需要对51芯片有足够的理解,能够充分认识每个引脚的详细功能,对于汇编语言也必须掌握的比较好。正是由于此次设计让我们明白了单片机在实践中的运用。
我们的题目是基于单片机设计简易计算器,对于我们这些实践中的新手来说,这是一次考验。这次课程设计我们学到很多很多的东西,学会了怎么在遇到问题时去解决问题。不仅巩固了以前所学过的知识,而且学到了很多在书本上所没有学到过的知识,掌握了一种系统的研究方法,可以进行一些简单的编程。通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从而提高自己的实际动手能力和独立思考的能力。同时在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固。
在此次课程设计中,首先我要感谢王陈宁老师在课程设计上给予我的指导、提供给我的支持和帮助,这是我能顺利完成这次报告的主要原因,更重要的是老师帮我解决了许多技术上的难题,让我能把系统做得更加完善。在此期间,我不仅学到了许多新的知识,而且也开阔了视野,提高了自己的设计能力。
其次,我要感谢帮助过我的同学,他们也为我解决了不少我不太明白的设计两位数字加减的难题。同时也感谢学院为我提供良好的做毕业设计的环境。
最后再一次感谢所有在设计中曾经帮助过我的良师益友和同学
!
主程序:
ORG 00H
AJMP START
ORG 30H
START:
MOV P0,#0FFH
MOV R6,#0
LOOP:
MOV P1,#0FDH //令第一行为为零
MOV R6,#0
JB P1.4,L1 //判断1按下
MOV R0,# 1
LCALL XS
L1:
JB P1.5,L2 //判断2按下
MOV R6,#0
MOV R0,#2
LCALL XS
L2:
JB P1.6,L3 //判断3按下
MOV R6,#0
MOV R0,#3
LCALL XS
L3:
JB P1.7,L4 //判断4按下
MOV R6,#0
MOV R0,#4
LCALL XS
L4:
MOV P1,#0FBH //令第二行为零
JB P1.4,L5 //判断5按下
MOV R6,#0
MOV R0,#5
LCALL XS
L5:
JB P1.5,L6 //判断6按下
MOV R6,#0
MOV R0,#6
LCALL XS
L6:
JB P1.6,L7 //判断7按下
MOV R6,#0
MOV R0,#7
LCALL XS
L7:
JB P1.7,L8 //判断8按下
MOV R6,#0
MOV R0,#8
LCALL XS
L8:
MOV P1,#0F7H //令第三行为零
JB P1.4,L9 //判断0按下
MOV R6,#0
MOV R0,#0
LCALL XS
L9:
JB P1.5,L10 //判断加号键按下
MOV R2,#1
MOV A,R0
MOV R1,A
SJMP LOOP
L10:
JB P1.6,L11 //判断减号键按下
MOV R2,#2
MOV A,R0
MOV R1,A
SJMP LOOP
L11:
JB P1.7,L12 //判断等号键按下
CJNE R2,#1,L13 //判断加号还是减号
MOV A,R1 //加号
ADD A,R0
MOV R4,A
CJNE R4,#9,L18 //判断两数之和释放大于9
SJMP T2 //等于9
L18:JC T2
MOV R6,#1 //大于9
MOV A,R4
SUBB A,#10
MOV R5,A
LCALL XS
LJMP LOOP
T2: //小于9
MOV A,R4
MOV DPTR,#TAB
MOVC A,@A+DPTR
MOV P0,A
LJMP LOOP
L13: //减号
MOV A,R1
CLR C
SUBB A,R0
MOV DPTR,#TAB
MOVC A,@A+DPTR
MOV P0,A
L12:
LJMP LOOP
TAB: DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH //共阴数码管段码
DELAY:MOV R7,#02H //延时1MS
DE:MOV R6,#0FFH
DJNZ R6,$
DJNZ R7,DE
RET
XS: //显示子程序
CJNE R6,#1,XX //判断是否为加法后的
MOV P2,#04H //大于9的显示程序
MOV DPTR,#TAB
MOV A,R5 //显示个位
MOVC A,@A+DPTR
MOV P0,A
ACALL DELAY
MOV P2,#02H //显示十位
MOV P0,#06H
SJMP XW
XX: //小于或等于9的显示程序
MOV P2,#02H
MOV A,R0
MOV DPTR,#TAB
MOVC A,@A+DPTR
MOV P0,A
XW:
RET
end