PROTEUS简介
Proteus软件是英国Labcenter electronics公司出版的EDA工具软件(该软件中国总代理为广州风标电子技术有限公司)。它不仅具有其它EDA工具软件的仿真功能,还能仿真单片机及外围器件。它是目前最好的仿真单片机及外围器件的工具。虽然目前国内推广刚起步,但已受到单片机爱好者、从事单片机教学的教师、致力于单片机开发应用的科技工作者的青睐。Proteus是世界上著名的EDA工具(仿真软件),从原理图布图、代码调试到单片机与外围电路协同仿真,一键切换到PCB设计,真正实现了从概念到产品的完整设计。是目前世界上唯一将电路仿真软件、PCB设计软件和虚拟模型仿真软件三合一的设计平台,其处理器模型支持8051、HC11、PIC10/12/16/18/24/30/DsPIC33、AVR、ARM、8086和MSP430等,20##年又增加了Cortex和DSP系列处理器,并持续增加其他系列处理器模型。在编译方面,它也支持IAR、keil和MPLAB等多种编译器。
KEIL简介
Keil C51是美国Keil Software公司出品的51系列兼容单片机C语言软件开发系统,与汇编相比,C语言在功能上、结构性、可读性、可维护性上有明显的优势,因而易学易用。Keil提供了包括C编译器、宏汇编、连接器、库管理和一个功能强大的仿真调试器等在内的完整开发方案,通过一个集成开发环境(uVision)将这些部分组合在一起。运行Keil软件需要WIN98、NT、WIN20##、WINXP等操作系统。如果你使用C语言编程,那么Keil几乎就是你的不二之选,即使不使用C语言而仅用汇编语言编程,其方便易用的集成环境、强大的软件仿真调试工具也会令你事半功倍。
一、设计要求
(1)单片机最小系统电路的原理图设计,包括晶振电路、复位电路、按键以及显示电路的设计;
(2)利用proteus软件进行简单电路图的绘制及仿真调试;
(3)利用keil软件建立简单的工程以及生成.hex文件与proteus的综合使用;
(4)矩阵键盘的设计以及数码管的使用。
二、PROTUES电路原理图的绘制
?元器件的选择:进入软件操作界面后点击左上方如图所示的中间按钮,之后点击中的“P”按钮,然后就可以自由选择器件。
图一proteus器件选择
在“keywords"一栏输入器件型号即可查到相应的元件库,例如输入“89c51”,
图二proteus器件查找结果
点击右下角的“OK”按钮即可将所选的器件拖入绘图界面。
?器件的连线:点击如图所示的黑色箭头进入连线环境,鼠标左键点击连线一头移动到另一头即可。
?电路的仿真及调试:由于本次课设学习proteus软件与keil软件的综合使用,因此在对电路图进行仿真时需使用keil生成的 .hex文件。双击单片机进入选择界面:
图三hex文件的选择
点击文件的按钮找到.hex文件所在的根目录选中,然后点击“OK”即可。最后,点击如图所示最左边的按钮即可看到电路仿真结果,最右边的按钮为仿真停止按钮。至此一个简单的电路原理图的绘制及仿真调试就完成了。
三、利用KEIL软件生成.hex文件
?工程的建立:点击“project”—>“new uvision project”建立一个工程并为之选择一个合适的存储目录.由于本课程是和89c51单片机的综合使用,所以在随后弹出的对话框里选择ATMEL目录下的AT89C51即可:
图四单片机型号选择
?程序的编写及添加:点击“file”—>“new”即可在在右边出现的对话框中。编写之前将所要编写的程序文件进行保存
图五添加C文件
注意此时保存的文件名的后缀一定要为.c,否则将达不到本实验的要求生成相应的.hex文件。
之后右键“source group1”—>“add files to group”将所编写的c文件添加进去。
?HEX文件的生成:选中“target”文件夹右键选择第一项,在随后出现的对话框里选择“output”找到“create hex”选中后点击“OK”关闭对话框即可:
图六选择hex文件的生成
最后点击中前两个按钮即可分别看到程序的编译结果以及hex文件的生成提示。
如上图所示即说明编译成功,hex文件生成。
四、电路图的设计思路:
?单片机最小系统:
图七单片机最小系统
?矩阵键盘的工作原理:
最常见的键盘布局如下图一所示。一般由16个按键组成,在单片机中正好有一个P口实现16个按键功能。4*4键盘内部电路图如图所示二。
图八
图九
当无按键闭合时,P10~P13与P14~P17之间开路。当有按键闭合时,与闭合按键相连的两条I/O口线之间短路。判断有无按键按下的方法是:第一步,置列线P14~P17为输入状态,从行线P10~P13输出低电平,读入列线数据,若某一列线为低电平,则该列线上有键闭合。第二行,行线轮流输出低电平,从列线P14~P17读入数据,若有一列为低电平,则对应行线上有键按下。综合一二两步的结果,可确定按键编号。但是键闭合一次只能进行一次键功能操作,因此须等到按键释放后,再进行键功能操作,否则按一次键,有可能会连续多次进行同样的键操作。
?数码管显示电路:根据程序编写,本电路采用的是共阳数码管,连接电路如下图:
图十
六、总设计电路图:
七、设计体会及收获:
本次课设是初次接触proteus和keil软件,虽然这次的系统设计不是很复杂,但也遇到了不少问题,不过经过老师的详细讲解和耐心指导,问题都一一得到了解决。最开始由于还不熟悉软件的操作习惯,在老师演示几遍过后,加上自己课上的练习和课下的复习渐渐的就熟悉了软件的操作。在进行原理图绘制时查找元器件是初学者的最大障碍,在老师建议下,通过在图书馆查找资料,把proteus元件库中常见的元器件英文对照熟练了几遍,之后大大提高了原理图绘制速度。还有就是在使用中如果能掌握一些快捷键的话对画图速度也是有很大提高的。其次是在学习keil软件时,在编写程序文件时,保存的时候文件名的后缀一定要改为.c否则将不会得到所要的hex文件,还有就是有一些细节问题也要多加注意。经过这几周的课程设计,通过把所学的知识应用到实际中去,让我体会到理论和实践的关系,没有好的理论基础,实践中就会出现各种问题,而如果不去实践的话有些理论知识也不会得到深刻的认识。通过使用proteus完成一个简单键盘电路的设计后,使我对proteus和keil这两个软件有了一定的了解。当然,对于这个软件的功能还有待仔细研究,毕竟在本次设计中只是使用到了它的大部分基本功能,并且对于一些错误的处理方法也不熟练。要想能够灵活使用proteus来完成更复杂、更完美的电路图设计还需要今后大量的学习和实践。 最后,感谢在本次课程设计中给予我详细、耐心指导的老师。
附录:程序
#include <reg51.h>
unsigned char table[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0x88,0x83,0xC6,0xA1,0x86,0x8E};
void delay(void)
{
unsigned char i,j;
for(i=0;i<20;i++)
for(j=0;j<250;j++);
}
void display(unsigned char i)
{
P0=table[i];
}
void keyscan(void)
{
unsigned char n;
P1=0xfe;
n=P1;
n&=0xf0;
if(n!=0xf0)
{
delay();
P1=0xfe;
n=P1;
n&=0xf0;
if(n!=0xf0)
{
switch(n)
{
case(0xe0):display(3);break;
case(0xd0):display(2);break;
case(0xb0):display(1);break;
case(0x70):display(0);break;
}
}
}
P1=0xfd;
n=P1;
n&=0xf0;
if(n!=0xf0)
{
delay();
P1=0xfd;
n=P1;
n&=0xf0;
if(n!=0xf0)
{
switch(n)
{
case(0xe0):display(7);break;
case(0xd0):display(6);break;
case(0xb0):display(5);break;
case(0x70):display(4);break;
}
}
}
P1=0xfb;
n=P1;
n&=0xf0;
if(n!=0xf0)
{
delay();
P1=0xfb;
n=P1;
n&=0xf0;
if(n!=0xf0)
{
switch(n)
{
case(0xe0):display(11);break;
case(0xd0):display(10);break;
case(0xb0):display(9);break;
case(0x70):display(8);break;
}
}
}
P1=0xf7;
n=P1;
n&=0xf0;
if(n!=0xf0)
{
delay();
P1=0xf7;
n=P1;
n&=0xf0;
if(n!=0xf0)
{
switch(n)
{
case(0xe0):display(15);break;
case(0xd0):display(14);break;
case(0xb0):display(13);break;
case(0x70):display(12);break;
}
}
}
}
void main(void)
{
while(1)
{
keyscan();
}
}
第二篇:可控流水灯单片机课程设计报告
目 录
1 引言 .................................................................................................................................... 1
2 课题综述 ............................................................................................................................ 1
2.1 课题的来源 .................................................................................................................. 1
2.2 课题的意义 .................................................................................................................. 1
2.3 预期的目标 .................................................................................................................. 1
2.4 面对的问题 .................................................................................................................. 1
2.5 课题的技术 .................................................................................................................. 2
3 系统分析 ............................................................................................................................ 2
3.1 涉及的基础知识 .......................................................................................................... 2
3.2 80C51单片机引脚图及引脚功能介绍 ...................................................................... 2
3.3 解决问题的基本思路 .................................................................................................. 3
3.4 总体方案 ...................................................................................................................... 3
4 系统设计 ............................................................................................................................ 3
4.1 硬件设计 ...................................................................................................................... 3
4.2 软件设计 ...................................................................................................................... 4
4.3 元件清单 ...................................................................................................................... 4
4.4 硬件原理图 .................................................................................................................. 5
4.5 硬件焊接图 .................................................................................................................. 5
4.6 设计主要功能 .............................................................................................................. 5
5 代码编写 ............................................................................................................................ 6
6 程序调试 ............................................................................................................................ 9
结 论 .................................................................................................................................. 10
致 谢 .................................................................................................................................. 11
参考文献 .............................................................................................................................. 12
单片机及应用课程设计:可控流水灯设计
1 引言
单片机课程设计主要是为了让我们增进对80C51单片机电路的感性认识,加深对理论方面的理解。了解软硬件的有关知识,并掌握软硬件设计过程、方法及实现,为以后设计和实现应用系统打下良好基础。另外,通过简单课题的设计练习,使我们了解必须提交的各项工程文件,达到巩固、充实和综合运用所学知识解决实际问题的目的。
2 课题综述
2.1 课题的来源
当今社会,这种由单片机芯片控制各种硬件工作的技术也日益成熟,并普及在交通、化工、机械等各个领域。而流水灯这项技术在生活中的应用更是广泛,较为贴近生活。而流水灯控制的设计所需要的知识也正好吻合了我们本学期对于单片机这门课程的学习,所以设计流水灯控制的这个课题让我们对知识的学习和巩固都有了进一步的加深。
2.2 课题的意义
这次单片机课程设计是为了通过对流水灯控制的设计加强学生团队配合的能力和创造力;综合运用专业及基础知识,解决实际工程技术问题的能力。能够让学生深入真是的体会到所学的理论知识和实践相结合的过程。找出自身的不足并加以改正。
2.3 预期的目标
对8个LED灯设计5种流水灯显示方式,用一个按键进行方式选择,并用一个数码管显示方式编号;用两个键来控制流水灯流动的速度。
2.4 面对的问题
这次课程设计是通过80C51位单片机实现。但面对的问题却是两方面的:一个是软件的设计,也就是实现流水灯控制功能的程序编辑;另一个是硬件的设计,需要我们自己连接、焊接电路板。而更为严峻的就是设计的最后还要将软硬件相结合。首先我们需要通过protel将设计的实物的电路图画出来,再根据电路图连接实物电路。
- 1 -
单片机及应用课程设计:可控流水灯设计
2.5 课题的技术
LED灯的显示方式、模式切换按钮的控制、亮灯速度的按键控制等技术。 3 系统分析
3.1 涉及的基础知识
电路焊接:制造电子产品的重要手段。
80C51单片机指令系统:规定80C51单片机内操作的语句或命令。
LED数码管的显示:向数码的显示送数,控制系统的显示部分。
3.2 80C51单片机引脚图及引脚功能介绍
本次实习的目的在于加深80C51单片机的理解,首先来简单认识一下,它的引脚如图3-1所示:
图3.1 80C51的引脚图
单片机的39个引脚大致可分为4类:电源、时钟、控制和I/O引脚。
1.电源:
(1)VCC:芯片电源,接+5V;
(2)VSS:接地端;
2.时钟:
- 2 -
单片机及应用课程设计:可控流水灯设计
XTAL1、XTAL2 :晶体振荡电路反相输入端和输出端。
3.控制线:控制线共有4根,
(1)ALE/PROG:地址锁存允许/片内EPROM编程脉冲
ALE功能:用来锁存P0口送出的低8位地址
PROG功能:片内有EPROM的芯片,在EPROM编程期间,此引脚输入编程脉冲。
(2) PSEN:外ROM读选通信号。
(3)RST/VPD:复位/备用电源。
RST(Reset)功能:复位信号输入端。
VPD功能:在Vcc掉电情况下,接备用电源。
(4)EA/Vpp:内外ROM选择/片内EPROM编程电源。
EA功能:内外ROM选择端。
Vpp功能:片内有EPROM的芯片,在EPROM编程期间,施加编程电源Vpp。
4.I/O线
80C51共有4个8位并行I/O端口:P0、P1、P2、P3口,共32个引脚。
P3口还具有第二功能,用于特殊信号输入输出和控制信号(属控制总线)。
3.3 解决问题的基本思路
因为选定用循环移位法来实现亮灯程序的,所以在一种设计好一种亮灯方式的前提下编程实现一个循环结构体,分别来实现五种不同的亮灯方式。另外再编一个实现延时控制的调用程序,来提供亮灯速度的控制。
3.4 总体方案
在做本次课程设计之前将小组内人员分为两小组:一组分负责硬件设计,另一组负责软件编程。硬件小组负责实物的连接和焊接,并进行硬件测试;软件小组负责实现流水灯的各部分程序设计,并进行软件的仿真测试。最后将完成的软硬件相结合,从而达到实现课程设计的效果。
4 系统设计
4.1 硬件设计
按照单片机系统扩展与系统配置状况,单片机应用系统可分为最小系统、最小功耗系统及典型系统等。80C51单片机是本次课程设计运用的主要原件。流水灯控制设计是用一个带有八个发光二极管的单片机最小应用系统,即为由发光二极管、晶振、
- 3 -
单片机及应用课程设计:可控流水灯设计
复位、电源等电路和必要的软件组成的单个单片机。
4.2 软件设计
单片机的应用系统由硬件和软件组成,在硬件原理图搭建完成上电之后,我们还不能看到流水灯循环点亮的现象,我们还需要编写程序控制单片机管脚电平的高低变化,来实现发光二极管的一亮一灭。软件编程是单片机应用系统中的一个重要的组成部分,也是本次课程设计的重点和难点。我们编程实现流水灯的方法是循环移位法,下面我们就来简述一下循环移位法的工作原理。
循环移位法是采用循环程序结构进行编程。我们在程序一开始就给P1口送一个数,这个数本身就让P1.0先低,其他位为高,然后延时一段时间,再让这个数据向高位移动,然后再输出至P1口,这样就实现“流水”效果了。另外,由于80C51系列单片机的指令中只有对累加器ACC中数据左移或右移的指令,因此实际编程中我们应把需移动的数据先放到ACC中,让其移动,然后将ACC移动后的数据再转送到P1口,这样也可以实现“流水”效果。
4.3 元件清单
表4-1 元件清单
- 4 -
单片机及应用课程设计:可控流水灯设计
4.4 硬件原理图
图 4-1硬件原理图
4.5 硬件焊接图
图 4-2硬件焊接图
4.6 设计主要功能
打开电路开关,按下第一个模式控制键,8个LED数码管会从右向左一个接着一个亮灯,LED显示器会显示数字“1”来表示当前的亮灯方式是模式1。在8个LED
- 5 -
单片机及应用课程设计:可控流水灯设计
数码管全部亮后再次按下第一个模式控制键,8个LED数码管会从又向左2个一组的一次亮灯,同时LED显示器会显示数字“2”来表示当前的亮灯方式是模式2。以此类推,一共有5种显示模式。而第2、3个按键分别控制亮灯速度的快慢。
5 代码编写
ORG 00H ;设置主程序开始地址
CLR P3.4 ;这里可以使小喇叭发出嗒、嗒声
DELAY: MOV R6, #255 ;
D1: MOV R7,#255 ;
DJNZ R7, $ ;
DJNZ R6, D1
RET
END
DELAY1: MOV R6, #150 ;
D2: MOV R7,#150
DJNZ R6, D2
RET
END
START: MOV A,P1.4 ;
JZ TTT
ADD R5,A
CJNE R5,#3,C1
AJMP M1
C1:CJNE R5,#3,C1
AJMP M3
C2: JNC C2
C3:
TTT:INC A
M1: MOV P0,#7EH ;
LCALL DELAY ;延时0.1s 延时一段时间 原地等待 延时0.05s 选中p1.4 数码管使能 把7EH送p0口,数码管显示1 数码管亮后的缓冲
- 6 -
单片机及应用课程设计:可控流水灯设计
MOV A, #11111110B ;赋值
MOV R4,A ;保存所赋的值
LOOP: MOV P2, A ;值给LED灯
ACALL V ;调用延时子程序
MOV A,R4 ;保存的值还给A
RL A ;左移
AJMP LOOP ;不为零,重复把值给LED灯 RET
M2:MOV P0,#0A2H ;
LCALL DELAY
AGAIN: MOV R3, #8H
LOOP1: MOV A, #FEH
MOV R4,A
X1: MOV P2, A
ACALL V ;
MOV A,R4
RL A
DJNZ R3, X1
MOV R3, #8
LOOP2: MOV A, #7FH
X2: MOV P2, A
ACALL V ;
MOV A,R4
RR A
DJNZ R3, X2
AJMP AGAIN
RET
M3:MOV P0, #62H ;
LCALL DELAY
MOV R1, #05H 数码管显示2 调用延时子程序 调用延时子程序 数码管显示3
- 7 -
单片机及应用课程设计:可控流水灯设计
OUTL: MOV DPTR, #TABLE
MOV R2,#04H
MOV A, 00H
INL: MOV R0, A
MOVC A, @A+DPTR
MOV P2, A
ACALL V ;调用延时子程序 MOV A, R0
INC A
DJNZ R2, INL
DJNZ R1, OUTL
TABLE: DB 7EH, 0BDH, 0DBH, 0E7H
RET
M4:MOV P0,#74H ;数码管显示4 LCALL DELAY
MOV A, #01111111B
MOV R4,A
LOOP: MOV P2, A
ACALL V ;调用延时子程序 MOV A,R4
RL A`
AJMP LOOP
RET
M5:MOV P0,#61H ;数码管显示5; LCALL DELAY
MOV R1, #05H
OUTL: MOV DPTR, #TABLE
MOV R2,#04H
MOV A, 00H
INL: MOV R0, A
- 8 -
单片机及应用课程设计:可控流水灯设计
MOVC A, @A+DPTR
MOV P2, A
ACALL V ;调用延时子程序`
MOV A, R0
INC A
DJNZ R2, INL
DJNZ R1, OUTL
TABLE: DB 0E7H , 0DBH , 0BDH ,7EH
RET
;延时选择程序
V: DELAY
MOV A, P1.5
JZ DELAY
MOV A, P1.6
JZ DELAY1
RET ;子程序返回 ;P1.6低电平时延时短,流水灯速度快 ;P1.5低电平时延时长,流水灯速度慢
END ;程序结束
6 程序调试
本程序运行过程中没有错误。但对于双键控制流水灯亮灯速度的功能并没有得到实现。将电路板用数据线连接,打开开关,按钮用来切换模式,一共有五种流动方式,每按一次按钮就会有一种方式,并在LED显示器上面显示出该模式的序号。
- 9 -
单片机及应用课程设计:可控流水灯设计
结 论
由于本次课程设计含括了软件和硬件知识,所以在完成课程设计的同时也让我们了解到了我们在软硬件设计和制作方面的不足。在这一周的设计过程中我所担任的工作是对电路板各元器件的连接和焊接工作,虽然看似简单,但做起来却是一个细致的工作,尤其是对于三极管以及双电阻并联的焊接工作,更是要细中再细,因为这些元器件的引脚距离都是比较近的,一旦将不该连接的引脚焊接到了一起,该元器件就会失它原来的工作效果,还很有可能将整个电路短路。
对于软件方面,是由我们小组的其他成员编辑完成的,虽然最终并没有实现所有要求的设计效果,但对于我们来说,设计实现的功能已经是一个不小的收获了。负责硬件焊接的我在最初看到代码的时候还是一头雾水,经过组内成员的一起讲解和讨论,最后还是理解的如何运用左移法实现流水灯亮灯的工作原理。并对如何使用程序调用也有了一定的了解。
当软件和硬件都完成之后,接下来就是将软件的控制程序写入到硬件里面,从而实现软硬结合的过程,来实现设计要求。在这个环节中我们还是遇到了或多或少的问题,例如蜂鸣器哑声以及LED显示器不工作等问题都让我们困惑了很久,最后还是通过不断的完善代码来实现各个元器件的工作。
通过这次课程设计,我知道了团队的力量,只有互相团结,才能把事情做好,组员分工合作,每个人根据自己的能力范围负责不同的工作,达到事半功倍的效果。而在这一周的设计过程中让我深深的了解了我在软件、硬件方面的许多不足之处,对于今后的学习和工作都有了一次很好的借鉴经验。
- 10 -
单片机及应用课程设计:可控流水灯设计
致 谢
首先我要感谢的淮阴工学院,计算机工程学院能够给我提供如此好的实践机会,不惜一切代价提供如此优越的环境。更要感谢各位指导老师,在我的学习过程中他们给了我很大的帮助,帮助我理解不懂的地方,帮助我纠正了很多无法解决的错误,使我最终能够完成这个课程设计。我还要感谢实验室人员提供的实验环境,参考文献的原作者。
在此对给予我帮助的老师表示深深地感谢!同时对给予我帮助的同学表示深深地感谢。我想说的是,在指导老师和同学们的帮助下我学到了很多东西,也发现了自己的很多不足之处,促使我在以后的学习中更加努力的学习。我们回顾这过去的一周时,我们会发现自己收获了很多,也成长了很多,懂得了如何去学习以前未曾学过的新思维新方法,懂得了如何去多方位地查找资料,完善和创新一些旧的思维方式,懂得了如何同老师和同学交流和协作,尤其要说的是,金鹰、戴俊峰、王福德、张粤四位老师老师在此过程中对我们悉心的辅导,认真的讲解,帮助我们解决问题,循循善诱,使我门受益匪浅。还有同学们的帮助,互相推荐好的资料。相信这次课程设计的体验将成为今后我们更多更广学习中的奠基石。课程设计的过程,是学习的过程,也是锻炼的过程,更是教会我们同学之间相互帮助,共同克服困难的过程,这将是人生中一笔宝贵的财富,使我受用不尽的同时,我一定将之好好珍惜。
再次感谢淮阴工学院,感谢计算机工程系的全体老师,感谢我的同学以及供我读书的父母。感谢所有给过我帮助的人,特别是在我身边默默关心我、帮助我的同学和老师。
- 11 -
单片机及应用课程设计:可控流水灯设计
参 考 文 献
1 李广弟,朱月秀,冷祖祁.单片机基础.第3版.北京:北京航空航天大学出版社,2007
2 蔡美琴,张为民.MCS-51系列单片机系统及其应用.第2版.北京:高等教育出版社,2004
3 张培仁.基于 C 语言编程 MCS-51 单片机原理与应用[M] . 北京:清华大学出版社,2003
4 赵娜,赵刚,于珍珠等.基于51 单片机的温度测量系统[J]. 微计算机信息,2007
5 周润景,张丽娜.基于PROTEUS 的电路及单片机系统设计与仿真[M].北京:航空航天大学出版社,2006
- 12 -