单片机课程设计.docx
《单片机课程设计.docx》由会员分享,可在线阅读,更多相关《单片机课程设计.docx(17页珍藏版)》请在冰豆网上搜索。
单片机课程设计
鲁东大学
单片机课程设计
实训报告
题目基于51单计时计数器系统设计
姓名:
杨常伟
所在学院:
电子与电气工程学院
所学专业:
___电气工程及其自动化
班级:
08电气学2班
学号:
20082926113
完成时间:
2011年7月23日
单片机应用系统设计报告
一设计题目…………………………………………………………….3
二设计目的
2.1设计目的要求……………………………………………………3
2.2系统设计意义……………………………………………………3
三系统硬件图
3.1系统硬件电路原理图………………………………………………4
3.2各主要芯片及相应组成电路………………………………………5
四流程图………………………………………………………………8
五系统说明与分析
5.1设计步骤…………………………………………………………9
5.2单片机简要介绍…………………………………………………10
六源程序…………………………………………………………………11
七总结……………………………………………………………………14
八参考文献………………………………………………………………15
单片机应用系统设计报告
一、设计题目
计时/计数器系统设计
设计说明:
用80C51单片机定时/计数器和LED数码管显示计时时间。
要求某键按下去开始计时,再按一次停止计时;另一键按下去则将时间清零。
同时,在计数/定时到100时实现二极管的发光和蜂鸣器的报警,计数到10000显示器清零。
二、设计目的
该单片机最小应用系统设计目的及要求如下:
2.1设计目的要求
1采用单片机为核心器件,构成数字式电子秒表系统。
2用四位一体的数码管分别显示时间/次数(格式要求为XXXX)
3通过按键实现人机对话功能:
要求某键按下去开始计时,再按另一键停止计时;第三键按下去则将时间/次数清零。
4.掌握单片机汇编编程技术中的设计和分析方法;
5.学会使用并熟练掌握电路绘制软件Protel99SE(或DXP);
6.掌握电路图绘制及PCB图布线技巧。
2.2系统设计意义
1、在系统掌握单片机相应基础知识的前提下,熟悉单片机最小应用系统的设计方法及系统设计的基本步骤。
2、完成所需单片机最小应用系统原理图设计绘制的基础上完成系统的电路图设计。
3、完成系统所需的硬件设计制作,在提高实际动手能力的基础上进一步巩固所学知识。
4、进行题目要求功能基础上的软件程序编程,会用相应软件进行程序调试和测试工作。
5、用AT89C51,DAC0832设计出题目所要求的波形实现循环显示,并针对实际设计过程中软、硬件设计方面出现的问题提出相应解决办法。
6、通过单片机应用系统的设计将所学的知识融会贯通,锻炼独立设计、制作和调试单片机应用系统的能力;领会单片机应用系统的软、硬件调试方法和系统的研制开发过程,为进一步的科研实践活动打下坚实的基础。
三、系统硬件图
图1系统硬件电路原理图
3.1系统的硬件电路原理图
系统的硬件电路图如图1所示,从图中可以看到该电路主要有时钟电路、复位电路显示电路等组成。
电源电路有设备提供,在原理图上不在说明,本文简单介绍电源电路的组成原理。
3.2各主要芯片及相应组成电路
1)8051单片机:
2)时钟电路
该电路主要有电容C1、C2和晶振Y1组成。
其组成原理图如图2所示,图中XTAL1为芯片内部振荡电路的输入端,XTAL2为芯片内部振荡电路的输出端。
图2时钟电路
4)复位电路
单片机通常采用的复位方式有上电复位和按钮复位两种。
本次设计用的复位方式是按钮电平复位。
其原理图如图3所示。
当按下按钮SW时,电容对R6迅速放电,RESET端变为高电平,RESET松开后,电容通过电阻R6进行充电,RESET端恢复为低电平。
图3复位电路
绘制的相应PCB硬件电路图如下:
四流程图
略
五、系统说明与分析
5.1设计步骤
1.理解设计任务要求(通过阅读有关资料及调查研究);
2.对总体方案进行分析、论证;
3.系统硬件电路的设计;
4.系统控制软件的设计;
1)以功能明确、相互界面能清晰分割的软件程序为基础,确定主程序流程框图;
2)以主程序流程框图为基础,确定各模块程序算法及实现的功能,进一步确定各模块程序流程框图;
3)根据软件流程框图,用AT89C51汇编语言编写主程序和延时子程序;
4)系统软、硬件的调试;
5)编写课程设计说明书;
6)答辩验收。
5.28051单片机简要介绍
8051单片机包含中央处理器(CPU)、存储器(程序存储器ROM和数据存储器RAM)、定时/计数器、并行I/O接口(P1、P2、P3、P0共4个8位口)、一个双工串行接口和5个中断源等几大单元及数据总线、地址总线和控制总线三大总线等结构组成。
MCS-51系列单片机中的8031、8051及8751均采用40Pin封装的双列直接DIP结构,右图是它们的引脚配置,40个引脚中,正电源和地线两根,外置石英振荡器的时钟线两根,4组8位共32个I/O口,中断口线与P3口线复用。
现在我们对这些引脚的功能加以说明:
MCS-51系列单片机的内部结构示意图如图11所示。
图11MCS-51系列单片机的内部结构示意图
· Pin20:
接地脚。
· Pin40:
正电源脚,正常工作或对片内EPROM烧入程序时,接+5V电源。
· Pin19:
时钟XTAL1脚,片内振荡电路的输入端。
· Pin18:
时钟XTAL2脚,片内振荡电路的输出端。
8051的时钟有两种方式,一种是片内时钟振荡方式,但需在18和19脚外接石英晶体(2-12MHz)和振荡电容,振荡电容的值一般取10p-30p。
另外一种是外部时钟方式,即将XTAL1接地,外部时钟信号从XTAL2脚输入。
· 输入输出(I/O)引脚:
Pin39-Pin32为P0.0-P0.7输入输出脚,Pin1-Pin1为P1.0-P1.7输入输出脚,Pin21-Pin28为P2.0-P2.7输入输出脚,Pin10-Pin17为P3.0-P3.7输入输出脚。
· Pin9:
RESET/V pd 复位信号复用脚。
当8051通电,时钟电路开始工作,在RESET引脚上出现24个时钟周期以上的高电平,系统即初始复位。
初始化后,程序计数器PC指向0000H,P0-P3输出口全部为高电平,堆栈指针写入07H,其它专用寄存器被清“0”。
RESET由高电平下降为低电平后,系统即从0000H地址开始执行程序。
然而,初始复位不改变RAM(包括工作寄存器R0-R7)的状态。
· Pin30:
ALE/ 当访问外部程序器时,ALE(地址锁存)的输出用于锁存地址的低位字节。
而访问内部程序存储器时,ALE端将有一个1/6时钟频率的正脉冲信号,这个信号可以用于识别单片机是否工作,也可以当作一个时钟向外输出。
更有一个特点,当访问外部程序存储器,ALE会跳过一个脉冲。
如果单片机是EPROM,在编程其间, 将用于输入编程脉冲。
· Pin29:
当访问外部程序存储器时,此脚输出负脉冲选通信号,PC的16位地址数据将出现在P0和P2口上,外部程序存储器则把指令数据放到P0口上,由CPU读入并执行。
· Pin31:
EA/V pp 程序存储器的内外部选通线,8051和8751单片机,内置有4kB的程序存储器,当EA为高电平并且程序地址小于4kB时,读取内部程序存储器指令数据,而超过4kB地址则读取外部指令数据。
如EA为低电平,则不管地址大小,一律读取外部程序存储器指令。
显然,对内部无程序存储器的8031,EA端必须接地。
·在对8751的EPROM进行编程时,EA/Vpp 脚还需加上用于编程的电压。
六、源程序
C语言源程序编写如下:
#include
#include
#defineuintunsignedint
#defineucharunsignedchar
ucharcodetable[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
ucharDispBuf[10]={0,1,2,3,4,5,6,7};
sbitP1_0=P1^0;
sbitP1_1=P1^1;
sbitP1_3=P1^3;
sbitP1_4=P1^4;
sbitP2_1=P2^1;
sbitP2_2=P2^2;
sbitP2_4=P2^4;
sbitP2_5=P2^5;
sbitK3=P3^3;
sbitK2=P3^6;
sbitK1=P3^7;
uinti=0,a=0,b=0,c=0,d=0,e=0,f=0;
voiddelay(uintz)
{
for(z=0;z<1000;z++);
}
voidmain()
{
P1=0x00;
P3=0xff;
TMOD=0x01;//计数定时器初始化
TH0=0xd8;
TL0=0xf0;
EA=1;i=0;b=0;
ET0=1;
TR0=0;
while
(1)
{
if(K3!
=1)//K3键按下启动计数器
{
delay(9);//延时10ms去抖
if(K3!
=1)//确定是有键按下
{
while(K1!
=1);//等待键松开
TR0=1;//按键处理
}
}
}
}
voidtime_int(void)interrupt1
{
TH0=0xd0;
TL0=0xf0;
if(K2!
=1)//K2键按下暂停计数器
{
delay(10);//延时10ms去抖
if(K2!
=1)//确定是有键按下
{
while(K2!
=1);//等待键松开
TR0=0;//按键处理
while(K1!
=0)//K1键按下暂停计数器
{
e=4;
if(e!
=0)//计数器停止时显示当前值
{
P1_4=0;e--;
P0=DispBuf[3];delay(10);
P1=0xff;e--;P1_3=0;
P0=DispBuf[2];delay(10);
P1=0xff;e--;
P1_1=0;
P0=DispBuf[1];delay(10);
P1=0xff;e--;P1_0=0;
P0=DispBuf[0];delay(10);
P1=0xff;
}
}TR0=1;
}
}
i++;
if(i==10)
{
i=0;
c++;
if(c==10)P2_1=0;//当计数/计时到10时二极管发光
if(c==100)P2_2=0;//当计数/计时到100时另一个二极管发光
if(c==100)P2_5=0;//当计数/计时到100时二极管发光蜂鸣器报警
//数码管显示程序
DispBuf[0]=table[c/1000];
DispBuf[1]=table[((c%1000)/100)];
DispBuf[2]=table[(((c%1000)%100)/10)];
DispBuf[3]=table[(((c%1000)%100)%10)];
}
e=4;
if(e!
=0)
{P1_4=0;e--;
P0=DispBuf[e];delay(10);
P1=0xff;e--;P1_3=0;
P0=DispBuf[e];delay(10);
P1=0xff;e--;
P1_1=0;
P0=DispBuf[e];delay(10);
P1=0xff;e--;P1_0=0;
P0=DispBuf[e];delay(10);
P1=0xff;
}
}
七、总结
1、在设计系统过程中,学会用ProtelDXP画原理图和PCB图。
通过查阅相关的书籍,设计了电路原理图,经过仿真和反复的修改电路中元器件的参数得到了可行的电路图。
2、根据自己设计的PCB图开始电路板的制做,自己亲自动手制作电路板,在制板的过程中出现了较多问题,如腐蚀不彻底、PCB中焊盘设计过小、信号线的尺寸偏小等问题,又重新的做了一个电路板。
然后用万用表检测需要元器件的质量,进行元器件的焊接,整个过程中大大的提高了动手能力。
3、接下来是最关键的步骤——电路板的调试,软硬件相结合,开始将程序烧到硬件电路中,刚开始工作比较正常,达到了题目的要求,当程序运行几个循环后,发现开始出现错误。
输出的波形比较紊乱,然后进行故障的排查,检查硬件和软件都没有问题,再进行一次调试还是不行,通过查阅数模转换芯片的资料,发现问题的所在,自己将片选信号接到地上可能导致一直工作状态,出现程序紊乱的现象。
将片选信号接到单片机的一个管脚上,通过程序来控制数模转换芯片的工作状态。
经过再一次的调试,程序运行比较稳定。
运算放大器输出正常的波形。
4、经过学习单片机接口实验这门课,使自己对单片机有了更深入的了解,提高了自己的动手能力。
很感谢在整个课程学习中老师和师兄们的指导,以及同班同学的热心帮助。
八、参考文献
[1]谢维成,杨加国.单片机原理与应用及C51程序设计,2009.7.
[2]胡汉才.单片机原理及其接口技术[M].北京:
清华大学出版社,1996.
[3]XX文库,2011/7/23.