单片机课程设计报告 1.docx
《单片机课程设计报告 1.docx》由会员分享,可在线阅读,更多相关《单片机课程设计报告 1.docx(25页珍藏版)》请在冰豆网上搜索。
单片机课程设计报告1
一、设计概述
1.1系统名称
AT89C51包装机控制器
1.2实现功能
1、开始运行时,播放开机音乐,以提醒开机。
2、按一下按键K1,控制器开始工件计数工作。
3、当传送带上工件经过反射式红外探测器(探测距离为20cm)时,控制器声、光提示1s。
4、工件每9个为一组。
当CPU累计到9个工件时,则声、光提示(1Hz)直至按一下按键K2。
5、LED灯可以指示控制器的工作状态。
6、用段式数码管显示工件个数(0至9)。
7、用8255A芯片扩展,接入声光报警和段式数码管。
8、用6264芯片和2764芯片扩展8k的ROM和SRAM。
9、按下按键K3,则段式数码管关闭。
1.3设计特色
在程序中加入“开机播放音乐”的程序,以提醒使用者该包装机控制器已经开机处于工作状态。
播放开机音乐的基本原理:
乐曲中不同的音符,实质上就是不同频率的声音。
通过单片机产生不同频率的脉冲信号,经过放大电路,由蜂鸣器播出,就能够产生美妙和谐的乐曲。
根据各音阶频率算出定时器定时常数,根据节拍给出该音阶持续的时间,最终实现播放简单歌曲的功能。
我们在程序中采用歌曲“祝你平安”的旋律。
在Proteus仿真程序中,点击运行按钮,则控制器在开机时将会由蜂鸣器播放该歌曲,用来提示使用者该控制器已经开机、可以开始进行工件的计数工作。
二、硬件功能及参数简介
2.1系统硬件综述
包装机控制器的系统设计需要用到以下元器件:
反射式红外探测器,AT89C51单片机,2764芯片,6264芯片,8255A芯片,74LS373八D透明锁存器,LM339芯片,2N2907三极管,段式数码管,LED灯,蜂鸣器,电阻若干,电容若干,导线若干。
2.2反射式红外探测器概述
反射式红外探测器探测工件是靠红外线反射来完成的,为继电器常开触点输出。
在其设定的有效探测范围内,如果没有工件,红外线接收管接收不到反射回来的红外光信号,此时继电器常开触电处于断开状态;当检测到工件存在时,红外线接收管接收到被工件反射回来的红外线信号,此时继电器常开触点处于闭合状态,当工件离开感应区时,常开触点再次处于断开状态。
2.3AT89C51单片机概述
2.3.1AT89C51简介
它是一种带4k字节FLASH存储器的低电压、高性能CMOS8位微处理器,为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。
可降至0Hz的静态逻辑操作,并支持两种软件可选的节电工作模式。
空闲方式停止CPU的工作,但允许RAM,定时/计数器,串行通信口及中断系统继续工作。
掉电方式保存RAM中的内容,但振荡器停止工作并禁止其他所有部件工作直到下一个硬件复位。
2.3.2AT89C51主要特性
a.与MCS-51兼容
b.4k字节可编程FLASH存储器
c.寿命:
1000写/擦循环
d.数据保留时间:
10年
e.全静态工作:
0Hz-24MHz
f.三级程序存储器锁定
g.128*8位内部RAM
h.32位可编程I/O线
i.两个16位定时/计数器
j.5个中断源
k.可编程串行通道
l.低功耗的闲置和掉电模式
m.片内振荡器和时钟电路
2.3.3AT89C51引脚功能
VCC:
供电电压。
GND:
接地。
P0:
P0口为一个8位漏极开路双向I/O口,每脚可吸收8TTL门电流。
P1:
P1口是一个内部提供上拉电阻的8位双向I/O口。
P2:
P2口是一个内部上拉电阻的8位双向I/口。
P3:
P3口管脚是8个带内部上拉电阻的双向I/O口。
P3.0:
RXD串行输入口。
P3.1:
TXD串行输出口。
P3.2:
/INTO外部中断0。
P3.3:
/INT1外部中断1。
P3.4:
T0计时器0外部输入。
P3.5:
T1计时器1外部输入。
P3.6:
WR外部数据存储器写选通。
P3.7:
RD外部数据存储器读选通。
RST:
复位输入。
当振荡器复位器件时,要保持RST脚两个机器周期的高电平时间。
ALE/PROG:
当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的低位字节。
/PSEN:
外部程序存储器的选通信号。
/EA/VPP:
当/EA保持低电平时,则在此期间外部程序存储器地址为0000H-FFFFH,不管是否有内部程序存储器。
XTAL1:
反向振荡放大器的输入及内部时钟工作电路的输入。
XTAL2:
来自反向振荡器的输出。
2.42764芯片概述
2.4.12764芯片简介
是8k*8字节的紫外线擦除、可编程只读存储器,单一+5V供电,工作电流为75mA,维持电流为35mA,读出时间最大为250ns,28脚双列直插式封装。
2.4.22764引脚功能
A0-A12:
13根地址输入线,用于寻址片内的8k个存储单元。
D0-D7:
8根双向数据线。
正常工作时为数据输出线,编程时为数据输入线。
OE:
输出允许信号,低电平有效。
CE:
片选信号,低电平有效。
当该信号为0时表示选中此芯片。
PGM:
编程脉冲输入端。
读操作时该信号为1。
VPP:
编程电压输入端。
VCC:
主电源。
2.56264芯片概述
2.5.16264芯片简介
静态RAM,储存容量为8k*8,采用CMOS工艺制造,是28引脚双列直插式芯片。
供电电源为+5V,电功耗为200mW,存取时间为200ns。
2.5.26264操作方式的选取
a.当WE和CE1为低电平且OE和CE2为高电平时,数据输入缓冲器打开,数据由数据线D0-D7写入被选中的存储单元。
b.当OE和CE1为低电平且WE和CE2为高电平时,数据输出缓冲器选通,被选中单元的数据送到数据线D0-D7上。
c.当CE1为高电平、CE2为任意时,芯片为被选中,处于保持状态,数据线呈现高阻状态。
2.5.36264引脚功能
A0-A12:
地址线,可寻址8k的存储空间。
D0-D7:
数据线,双向,三态。
OE:
读允许信号,输入,低电平有效。
WE:
写允许信号,输入,低电平有效。
CE1:
片选信号1,输入,在读/写方式时为低电平。
CE2:
片选信号2,输入,在读/写方式时为高电平。
VCC:
+5V工作电压。
GND:
接地。
2.68255A芯片概述
2.6.18255A芯片简介
是一片使用单一+5V电源的40脚双列直插式大规模集成电路,具有24个输入/输出引脚、可编程的通用并行输入/输出接口电路。
其通用性强,使用灵活,CPU可通过它直接与外部设备相连接。
2.6.28255A端口工作方式
a.方式0:
基本的输入输出方式,即无须联络就可以直接进行的I/O方式。
b.方式1:
选通I/O,此时接口和外围设备需联络信号进行协调,只有A、B口可以工作在方式1。
c.方式2:
双向I/O方式,只有A口可以工作在方式2。
2.6.38255A引脚功能
A口:
独立的8位I/O口,内部有对数据输入/输出的锁存功能。
B口:
独立的8位I/O口,仅对输出数据有锁存功能。
C口:
可看作1个独立的8位I/O口,也可看作2个独立的4位I/O口,仅对输出数据进行锁存。
D0-D7:
8位双向三态数据线,用来与系统数据总线相连。
RESET:
复位信号,高电平有效,输入,用来清除8255A的内部寄存器,并置A、B、C口均为输入方式。
/CS:
片选,输入,决定芯片是否被选中。
/RD:
读信号,输入,控制芯片将数据或状态信息送给CPU。
/WR:
写信号,输入,控制CPU将数据或控制信息送到芯片。
A0-A1:
内部口地址的选择,输入,决定对芯片内部哪一个口或寄存器进行操作。
PA0-PA7:
A组双向三态数据信号,用来连接外设。
PB0-PB7:
B组双向三态数据信号,用来连接外设。
PC0-PC7:
C组双向三态数据信号,用来连接外设或者作为控制信号。
VCC:
+5V电源。
GND:
接地。
2.774LS373八D透明锁存器
2.7.174LS373锁存器运行状态
a.当三态允许控制端OE为低电平时,8个输出端为正常逻辑状态,可用来驱动负载或总线。
b.当OE为高电平时,输出端呈高阻态,但锁存器内部的逻辑操作不受影响。
c.当锁存允许端LE为高电平时,输出端数据随输入端而变。
d.当LE为低电平时,输入端被锁存在已建立的数据电平。
2.7.274LS373引脚功能
OE:
三态允许控制端,低电平有效。
LE:
锁存允许端。
D0-D7:
数据输入端。
O0-O7:
输出端。
2.8LM339概述
LM339电压比较器芯片内部装有四个独立的电压比较器,是很常见的集成电路。
可用其组成各种电压比较器电路和振荡器电路。
参数:
电压失调小;共模范围大;对比较信号源的内阻限制很宽;VCC电压范围宽;输出端电位可灵活选用;差动输入电压范围大。
三、系统硬件电路设计
3.1Proteus仿真接线图
3.2分块硬件电路设计
图1控制开关连接电路图2模拟反射式红外线探测器部分电路
图3CPU连接部分电路
图4ROM及SRAM扩展电路
图5锁存器部分电路图6数字显示电路
图78255A芯片扩展电路图8声提示电路
四、程序设计
4.1程序设计描述
程序开始时,先运行开机音乐程序,播放一段开机音乐,为歌曲“祝你平安”的旋律,数码管初始化显示为0。
主程序开启中断,动态等待中断,若此时P3.2端口有按键按下,则代表有一个工件通过,数码管示数加1,蜂鸣器提示一声(设定为1s),且LED灯亮1s。
当数码管示数为9时,蜂鸣器持续提示,且LED灯持续亮。
直至按下停止按键,蜂鸣器停止提示,且LED灯熄灭,数码管示数复位为0,重新开始计数。
按下K1键,则关机。
具体流程如下:
每通过一个工件时,即P3.2口每按下一次按键变为低电平,则蜂鸣器提示,LED灯亮,并开启中断响应服务,T0开启定时功能,定时时间为100ms,重复10次,满10次则表示时间达到1s,则蜂鸣器停止提示,且LED灯熄灭。
4.2系统程序C语言设计
#include"reg51.h"
#include"absacc.h"
#defineucharunsignedchar
#defineuintunsignedint
#definePAXBYTE[0XBFFC]//定义PA
#definePBXBYTE[0XBFFD]//定义PB
#definePCXBYTE[0XBFFE]//定义PC
#defineCOMXBYTE[0XBFFF]//定义com
sbitk1=P1^0;
sbitk2=P1^1;
sbithongwai=P3^2;
sbitSpeak=P3^5;
uinti,j,flag,flag1=0;
ucharCount;//用于开机唱歌
ucharcodetable[10]=
{
0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,
};
unsignedcharcodeSONG[]=
{
0x18,0x10,0x18,0x10,0x26,0x10,0x20,0x10,0x20,0x30,0x26,0x08,0x2b,0x10,0x30,0x10,
0x30,0x10,0x1c,0x10,0x20,0x10,0x20,0x40,0x26,0x10,0x00
};//歌曲“祝你平安”代码
/****************开机唱歌函数**********************/
voidTime0_Init()
{
TMOD=0x10;
IE=0x88;
TH1=0xDC;
TL1=0x00;
}
voidTime0_Int()interrupt3
{
TH1=0xDC;
TL1=0x00;
Count++;//长度加1
}
voidDelay_xMs(uintx)
{
uinti,j;
for(i=0;i{
for(j=0;j<3;j++);
}
}
voidPlay_Song()
{
ucharTemp1,Temp2;
uintAddr;
Count=0;//中断计数器清0
Addr=0;
while
(1)
{
Temp1=SONG[Addr++];
if(Temp1==0xFF)//休止符
{
TR1=0;
Delay_xMs(100);
}
elseif(Temp1==0x00)//歌曲结束符
{
return;
}
else
{
Temp2=SONG[Addr++];
TR1=1;
while
(1)
{
Speak=~Speak;
Delay_xMs(Temp1);
if(Temp2==Count)
{
Count=0;
break;
}
}
}
}
}
voidchangge()
{
Time0_Init();
Play_Song();
}
/***************满9提醒函数******************/
voiddelay(uintms)
{
uchari;
while(ms--)
for(i=135;i>0;i--);
}//延时函数
voiddi()
{
uchari;
for(i=0;i<40;i++)
{
PC=0x00;
delay
(1);
PC=0x01;
delay
(1);
}
}
voiddidi()
{
uchari;
for(i=2;i>0;i--)
{
di();
delay(140);
}
}
/*************中断,用于响1s*************/
voidtimer0()interrupt1
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
j++;
if(j==10)
{
j=0;
flag1=1;//用于判断
TR0=0;
}
}
voidInt()
{
j=0;
TMOD=0x01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
TR0=0;
ET0=1;
EA=1;
}
voidduanshitixing()//防止主函数内部逻辑错误
{
TR0=1;
while
(1)
{
di();
if(flag1==1|hongwai==0)
break;
}
flag1=0;
PC=0xff;
}
voidchangshitixing()
{
while
(1)
{
PA=table[9];
didi();
if(k2==0)
break;
}
i=0;
PC=0xff;
PA=table[i];
}
/**************判断是否该工作*****************/
voidpanduan()
{
if(k1==0)
{
flag++;
while
(1)//防止按键时长的影响
{
if(k1==1)
break;
}
}
if(flag==2)
flag=0;
}
/*************主函数************/
voidmain()
{
changge();
Speak=0;
Int();
while
(1)
{
panduan();
if(flag==0)
{
PA=table[i];//若想开机显示零
if(hongwai==0)
{
i++;
PA=table[i];
while
(1)//防止按键时长的影响
{
if(hongwai==1)
break;
}
if(i==9)
{
changshitixing();
}
else
{
duanshitixing();
}
}
}
else
{
PA=0x00;
i=0;
}
}
}
4.3系统流程图的设计
五、系统调试过程
5.1程序设计中出现的问题(已解决)
1、定时器工作在方式1时,初值的计算问题。
2、进行中断设计后,忘记开放CPU中断系统的总开关EA。
3、当数码管示数为9时,LED灯持续亮,但蜂鸣器不能持续提示。
4、当有工件经过时,蜂鸣器提示声音过长。
5、按复位按键时间过短时,则无法达到复位效果。
5.2调试过程中出现的问题(已解决)
1、无法生成.hex格式的文件。
2、无法将Keil程序与Proteus连接图关联起来。
3、不确定2764芯片与6264芯片是否用片选引脚。
4、关联程序与连接图时,晶振频率不同,导致无法实现功能。
5.3不足与改进
进行了为期两周的课程设计,起初的确遇到了很多麻烦。
由于只在单片机原理与应用课程的实验课程部分使用了一次Keil软件,导致最开始我们遇到了无法生成.hex文件或者没有设定合适的晶振频率等等一系列的问题。
同时,我们是第一次使用Proteus软件进行电路图的设计,起初,我们甚至不知道去哪里能找到我们所需要的元器件,这的确给我们这次的课程设计带来了一些难度与挑战,也占用了我们相当多的时间。
当然,不得不提的就是程序与连接图相关联的问题。
在我们花了一部分时间成功地理解了Keil与Proteus软件的使用方法之后,最头疼的问题就是怎么把这两部分关联起来,这里面操作复杂且步骤繁琐,我们也是学习了很久才能熟记于心,才能顺利地完成此次的课程设计。
同时,我们也希望能在以后的学习当中逐渐地改善我们这次的设计。
六、设计心得
这为期两周的单片机课程设计真的是大学生活里的一项挑战。
我们本学期刚刚学习了单片机的相关原理与知识,还没有完全消化与熟悉便要用于实际操作,这确实让我们头疼了很久。
我们从最开始对这两个必用软件的一无所知到现在的熟练运用也是走过了很多曲折,有时甚至还在原地打转。
而在这个艰苦卓绝的过程中,真的要感谢我们无私奉献的老师,和那些对我们伸出援手的同学们。
大家都是一知半解,于是便坐在一起讨论;大家意见相悖,于是我们便各抒己见,再征求他人的意见和建议。
也算是皇天不负有心人吧,我们总算是在有限的时间内完成了这一项艰巨的任务。
课程设计是我们对单片机原理与应用这门课程知识综合应用的实践训练,这是我们人生中必不可少的一个过程。
“千里之行,始于足下。
”,通过这次课程设计,我们深深体会到这句千古名言的真正含义。
当我于今日学会脚踏实地迈开这一步,就是为明天能更好地学习新的知识打下夯实的基础。
通过这次单片机课程设计,我们在多方面都有所提高。
实践是认识的动力和最终目的,实践是检验真理的唯一标准。
我觉得做课程设计的同时也是对课本知识的巩固和加强,由于课本上的知识太多,平时课间的学习并不能帮助我们很好地理解和运用各个元件的功能,而且考试内容有限,所以在这次课程设计过程中,我们了解了很多元件的功能,并且对于其在电路中的使用也有了更多的认识。
认识来源于实践,平时看课本时,有些问题总是弄不明白,做完本次的课程设计,那些问题就都迎刃而解了。
而且还可以记住更多的东西。
比如一些芯片的功能,平时看课本,总是记不牢,而通过自己的动手实践会让我们对各个元件的印象更加深刻。
在这一闪即逝的两周里,我们综合运用各自在课堂上所学到的课程理论和课下自学的实际知识进行了一次单片机设计工作的实际训练,从而进一步培养和提高我们独立工作和团体协调工作的能力,巩固与扩充了单片机课程所学的内容,掌握到了单片机设计的方法和步骤,也掌握到了单片机设计的基本的技能,懂得了怎样去分析电路和设计程序,了解了单片机的基本结构,提高了计算能力、绘图能力、设计能力,熟悉了规范和标准,同时,对于各科相关的课程都有了全面的复习,独立思考和与他人合作的能力也有了比较大的提升。
在这次课程设计的过程中,体现出了团队设计的团结以及综合运用知识的能力,体会到了学以致用、突出自己劳动成果的喜悦心情,从中发现到了自己平时学习中的不足和薄弱环节,从而加以弥补。
转眼之间,这短短两周的课程设计就要结束了,这两周我过得虽然忙碌却也不得不说很充实。
因为通过这次的课程设计,我学习到了很多之前没接触过的新知识,对单片机也有了更深一层的了解与认识,并且把之前课堂上学习到的知识又重新梳理了一遍,除此之外,我也感觉到了自己知识的匮乏,在设计过程中遇到了许多困难,比如由于之前对单片机应用知识的不熟悉,对于程序的编写无从下手,以及对以前所学习的知识掌握得不够牢固等等,给了我很大的压力,也使我真正地感觉到了“学无止境”这句话的含义。
而除了学习到新的知识以外,我最大的收获就是养成了去图书馆查资料的好习惯。
以前遇到不懂的问题,大多数都抱以“得过且过”的态度,可是通过这次的课程设计,我深深地意识到了图书馆的重要性,我们作为山东大学的学生,有着最优越的资源,遇到没接触过的东西,走几分钟的路,就会看见几乎能解决我们所有问题的图书馆。
而这次的课程设计也让我学会了要珍惜身边现有的资源。
经过两个星期的课程设计,过程曲折可谓一语难尽。
生活就是这样,汗水预示着结果,也见证着收获。
在此期间我们曾经失落过,也曾经一度热情高涨。
从开始时满富盛激情到最后汗水背后的复杂心情,点点滴滴无不令我回味无长。
这次的课程设计虽然结束了,但在这次的设计中不仅检验了我所学到的知识,也培养了我如何去把握一件事情,如何去看待一件事情,又如何去完成一件事情。
在设计的过程中,与同伴分工设计,和其他同学一起相互探讨、相互学习、相互监督,也学会了合作,学会了运筹帷幄。
七、单片机的发展展望
现在可以说是单片机百花齐放,百家争鸣的时期,世界上各大芯片制造公司都推出了自己的单片机,从8位、16位到32位,数不胜数,应有尽有,有与主流C51系列兼容的,也有不兼容的,它们各具特色,互成互补,为单片机的应用提供广阔的天地。
纵观单片机的发展过程,可以预示单片机的发展趋势,大致有:
1、低功耗CMOS化
MCS-51系列的8031推出时的功耗达630mW,而现在的单片机普遍都在100mW左右,随着对单片机功耗要求越来越低,现在的各个单片机制造商基本都采用了CMOS(互补金属氧化物半导体工艺)。
像80C51就采用了HMOS(即高密度金属氧化物半导体工艺)和CHMOS(互补高密度金属氧化物半导体工艺)。
CMOS虽然功耗较低,但由于其物理特征决定其工作速度不够高,而CHMOS则具备了高速和低功耗的特点,这些特征,更适合于在要求低功耗象电池供电的应用场合。
所以这种工艺将是今后一段时期单片机发展的主要途径。
2、微型单片化
现在常规的单片机普遍都是将中央处理器(CPU)、随机存取数据存储(RAM)、只读程序存储器(ROM)、并行和串行通信接口、中断系统、定时电路、时钟电路集成在一块单一的芯片上,增强型的单片机集成了如A/D转换器、PMW(脉宽调制电路)、WDT(看门狗)、有些单片机将LCD(液晶)驱动电路都集成在单一的芯片上,这样单片机包含的单元电路就更多,功能就越强大。
甚至单片机厂商还可以根据用户的要求量身定做,制造出具有自己特色的单片机芯片。
此外,现在的产品普遍要求体积小、重量轻,这就要求单片机除了功能强和功耗低外,还要求其体积要小。
现在的许多单片机都具有多种