单片机课程设计指导书及报告.docx

上传人:b****4 文档编号:5505330 上传时间:2022-12-17 格式:DOCX 页数:18 大小:314.98KB
下载 相关 举报
单片机课程设计指导书及报告.docx_第1页
第1页 / 共18页
单片机课程设计指导书及报告.docx_第2页
第2页 / 共18页
单片机课程设计指导书及报告.docx_第3页
第3页 / 共18页
单片机课程设计指导书及报告.docx_第4页
第4页 / 共18页
单片机课程设计指导书及报告.docx_第5页
第5页 / 共18页
点击查看更多>>
下载资源
资源描述

单片机课程设计指导书及报告.docx

《单片机课程设计指导书及报告.docx》由会员分享,可在线阅读,更多相关《单片机课程设计指导书及报告.docx(18页珍藏版)》请在冰豆网上搜索。

单片机课程设计指导书及报告.docx

单片机课程设计指导书及报告

 

单片机课程设计指导书

 

电气与信息工程学院实验室

 

一、设计任务:

1.1外部脉冲自动计数,自动显示。

1.1.1设计一个255计数器:

0-255计数,计满后自动清0,重新计数(在数码管中显示)。

1.1.2设计一个50000计数器:

0-50000计数,计满后自动清0,重新计数(在数码管中显示)。

1.2设计一个出租车计费系统:

起步价为5元(2km以内),2km后,0.8元/0.5km;要求每500m刷新计费一次,在8位数码管中,前3位显示数码管显示里程数,后3位数码管显示价钱(角,元,十元,百元)

注:

要求首先采用PROTEUS完成单片机最小系统的硬件电路设计及仿真;程序仿真测试通过后,再下载到单片机实训板上执行。

二、单片机最小系统硬件资源介绍:

※89S51单片机;

※6位共阳极数码管;

※段码驱动器74HC573,位选译码器74HC138;

※4路独立式按键;

※外部晶振电路;

※ISP下载接口(Insystemprogram,在系统编程);

※DC+5V电源试配器(选配);

※ISP下载线(选配)。

单片机最小系统实训板硬件资源分布见图1元件布局图和图2电路原理图:

其中P1为外部电源输入座(DC+5V),S8为电源最小系统的电源开关,E1和C3为电源滤波,去耦电容。

D1为系统电源指示灯。

J2为ISP下载接口,S7系统复位按键。

CRY1,C1,C2为外部时针电路。

IC1为89S51(DIP-40),左上角为第一脚。

PRE1,PRE2。

为上拉排阻(阻值4.7k—10k)。

J5,J9,J6,J10分别对应单片机的P0,P1,P2,P3口。

便于二次开发。

6路共阳极数码管动态显示电路,P0口通过74HC573(起驱动和隔离作用,让电流通过74CH573流入公共地),来控制数码管的8路段码,P20-P22通过74HC138译码器(使用其中的6路)控制数码管的公共端(中间还有三极管做驱动器)。

这样设计的理由:

为了保证该单片机最小系统的二次开发的资源充足和合理性。

如果单只做一个动态显示电路,可以省去74HC573,和74HC138。

图1元件布局图

图2单片机最小系统原理图

三、设计思路:

1、255计数:

255可用8位二进制数表示,故本设计可直接采用可以重装载的计数器T1模式二进行计数。

然后对TL1的内容进行相应的二进制---十进制转换:

首先TL1的内容除以64H,所的商就是十进制的百位,然后用余数除以0AH,所得的商就是十进制数的十位,余数即相应的十进制的个位。

接着将相应的十进制数进行译码,并在LED数码管上显示出来。

每来一个脉冲其显示的结果加一,直加至255然后T1重新开始计数。

图3255计数程序流程图

 

四、课程设计报告要求:

1、统一要求用A4纸打印;

2、须包含以下内容:

(1)设计任务

(2)设计思路

(3)各个设计任务的PROTEUS硬件电路图

(4)各个设计任务的调试程序;要有注释

(5)心得体会;800字左右

附1:

PROTEUS仿真参考电路图

 

附2:

开发工具使用方法

1、伟福集成开发环境

第一次使用要做相关设置,双击上图屏幕左侧“CPU选择…”,在弹出的对话框中进行设置。

(1)目标文件设置

 

(2)编译器选择

2、下载工具EASY51PRO

 

课程设计一:

255计数器

一、设计任务:

设计一个255计数器:

0-255计数,计满后自动清0,重新计数(在数码管中显示)。

二:

设计思路:

255计数:

255可用8位二进制数表示,故本设计可直接采用可以重装载的计数器T0模式二进行计数。

然后对TL0的内容进行相应的二进制---十进制转换:

首先TL0的内容除以64H,所的商就是十进制的百位,然后用余数除以0AH,所得的商就是十进制数的十位,余数即相应的十进制的个位。

接着将相应的十进制数进行译码,并在LED数码管上显示出来。

每来一个脉冲其显示的结果加一,直加至255然后T0重新开始计数。

图3255计数程序流程图

 

三、设计任务的PROTEUS硬件电路图:

四、设计任务的调试程序:

ORG0000H

AJMPSTART

ORG0060H

START:

MOVDPTR,#TAB

MOVTMOD,#06H;置T0计数工作方式2

MOVTH0,#00H;设置TL0溢出后赋给TL0的值

MOVTL0,#00H;设置TL0初值

SETBTR0;开启T0计数

LOOP:

MOVA,TL0

MOVB,#64H;TL0除以100求百位的值

DIVAB

LCALLSEGB

MOVA,B

MOVB,#0AH;余数再除以10求十位的值

DIVAB

LCALLSEGS

MOVA,B;余数为个位

LCALLSEGG

JMPLOOP

SEGG:

MOVP2,#00H;个位数码管显示

MOVCA,@A+DPTR

MOVP0,A

LCALLDEL

RET

SEGS:

MOVP2,#01H;十位数码管显示

MOVCA,@A+DPTR

MOVP0,A

LCALLDEL

RET

SEGB:

MOVP2,#02H;百位数码管显示

MOVCA,@A+DPTR

MOVP0,A

LCALLDEL

RET

DEL:

MOVR7,#100;数码管显示的时间,防止显示输出错位

DEL1:

MOVR4,#60

DEL2:

DJNZR4,DEL2

DJNZR7,DEL1

RET

TAB:

DB3FH,06H,5BH,4FH;数码管0,1,2,3,4,5,6,7,8,9的编码

DB66H,6DH,7DH,07H

DB7FH,6FH

END

 

课程设计二:

50000计数器

一、设计任务:

设计一个50000计数器:

0-50000计数,计满后自动清0,重新计数(在数码管中显示)。

二:

设计思路:

50000计数:

50000可以16位二进制数表示,故本设计可用T1模式一进行计数。

脉冲总数x等于TH1*256+TL1,当x达到50000,就让TH1和TL1重新置零。

x除以10000等于万位的值,x除以1000的商得到两位数再除以10得到余数就等于千位的值,x除以100的商再除以10得到的余数等于百位的值,x除以10的商再除以10得到的余数等于十位的值,x除以10的余数等于个位的值。

所得的各个位的十进制的数再进行译码,用LED数码管显示。

三、设计任务的PROTEUS硬件电路图:

四、设计任务的调试程序:

#include

#defineucharunsignedchar

#defineuintunsignedint

ucharledshow[11]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x00};//共阴极数码管显示{0,1,2,3,4,5,6,7,8,9,无显示}与P0的输出

ucharSLCbit[5]={0x00,0x01,0x02,0x03,0x04};//P2口输出通过74ls138片选LED显示位

ucharCURbit[5];//表示当前所使用的led数码管位

voidT1init();//函数声明

voidchangcode();

voiddelay();

voiddelay()//延时程序

{

uinti,j;

for(i=0;i<20;i++)

for(j=0;j<20;j++);

}

voidT1inti()//计数器初始化

{

TMOD=0x50;//选择计数器T1,工作方式2

TH1=0;//设置加1计数器的计数器的计数初始值高字节

TL1=0;//设置加1计数器的计数器的计数初始值高低字节

TR1=1;//启动T1计数

}

voidchangecode()//赋值对应led数码管位的值

{

uintx;

x=TH1*256+TL1;

if(x<=50000)

{

CURbit[0]=x/10000;//万位的值

CURbit[1]=(x/1000)%10;//千位的值

CURbit[2]=(x/100)%10;//百位的值

CURbit[3]=(x/10)%10;//十位的值

CURbit[4]=x%10;//个位的值

}

else//超过50000重新赋值TH1,TL1

{

TH1=0;

TL1=0;

}

}

voidmain()//主函数

{

uintk;

T1inti();

while

(1)

{

changecode();

for(k=0;k<5;k++)

{

P0=ledshow[11];//使灯全灭,暂态

P2=SLCbit[k];//从低位依次到高位显示

P0=ledshow[CURbit[4-k]];//对应数码管显示

delay();

}

}

}

 

课程设计三:

出租车计费系统

一、设计任务:

起步价为5元(2km以内),2km后,0.8元/0.5km;要求每500m刷新计费一次,在8位数码管中,前3位显示数码管显示里程数,后3位数码管显示价钱(角,元,十元)

二:

设计思路:

出租车计费系统:

一般出租车的车轮直径为d=634.5mm,周长l=πd≈2m。

即来一个脉冲,表示出租车行驶了2m。

根据题意,里程数取万米,千米,百米三位,价钱取十元,元,角。

故里程数S=(2*x)/100,价钱M=(5+0.8*((x-1000)/250+1))*10,x表示的是脉冲数。

M%10是角,(M/10)%10是元,M/100是十元。

S%10是0.1km,(S/10)%10是km,S/100是10km。

元和km位要加小数点,其他的不加,所以数码管二进制码要有两种。

三、设计任务的PROTEUS硬件电路图:

四、设计任务的调试程序:

#include

#defineucharunsignedchar

#defineuintunsignedint

ucharledshow[11]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x00};//共阴极数码管显示{0,1,2,3,4,5,6,7,8,9,无显示}

ucharledfshow[11]={0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef,0x00};//共阴极数码管显示{0.,1.,2.,3.,4.,5.,6.,7.,8.,9.,无显示}

ucharSLCbit[6]={0x00,0x01,0x02,0x03,0x04,0x05};//P2口输出经74ls138片选led显示位

ucharCURbit[6];表示当前所使用的led数码管位

voidT1init();//函数声明

voidchangecode();

voiddelay();

voiddelay()//延时子程序

{

uinti,j;

for(i=0;i<20;i++)

for(j=0;j<30;j++);

}

voidT1init()//计数器T1初始化

{

TMOD=0x50;//选择计数器T1,工作方式1

TH1=0;//设置加1计数器的计数初值高字节

TL1=0;//设置加1计数器的计数初值低字节

TR1=1;//启动T1

}

voidchangecode()

{

uintx;//脉冲数

uintS;

uintM;

x=TH1*256+TL1;

if(x>1000)//超过2km的各数码管位数值

{

S=(2*x)/100;//里程数

M=(5+0.8*((x-1000)/250+1))*10;//价钱

CURbit[0]=M%10;角位

CURbit[1]=(M/10)%10;//元位

CURbit[2]=M/100;//十元位

CURbit[3]=S%10;//0.1km位

CURbit[4]=(S/10)%10;km位

CURbit[5]=S/100;10km位

}

else//2km内的各数码管位数值

{

S=(2*x)/100;

CURbit[0]=0;//角位

CURbit[1]=5;//元位

CURbit[2]=0;//十元位

CURbit[3]=S%10;//0.1km位

CURbit[4]=(S/10)%10;//km位

CURbit[5]=S/100;//10km位

}

}

voidmain()//主函数

{

uintk;

T1init();

while

(1)

{

changecode();

for(k=0;k<6;k++)

{

P0=ledshow[10];

P2=SLCbit[k];

if((k!

=1)&&(k!

=4))//除元位和km位的数码显示

{

P0=ledshow[CURbit[k]];

}

else元位和km位的数码显示

{

P0=ledfshow[CURbit[k]];

}

delay();

}

}

}

 

心得体会

短短两周的课程设计已经结束了,通过这次的课程设计锻炼了我们的实践能力,也是对我们以后的实际工作能力的具体训练和考察过程。

现在是一个高科技的时代,单片机已经成为当今计算机应用中空前活跃的领域,在生活中可以说是无处不在的。

因此对于我们这一专业的同学来说,学好单片机,并正确应用单片机是非常重要的。

此次单片机课程设计,从理论到实践,在整整两个星期里,学到了很多的东西。

同时不仅巩固了以前所学过的知识,而且还学到了很多在书本上所没有学到过的知识。

通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。

这次的课程设计还让我学会了如何去培养我们的创新精神,从而不断地战胜自己,超越自己。

更重要的是,我在这一设计过程中,学会了坚持不懈,不轻言放弃。

设计过程,好比是我们人类成长的历程,常有一些不如意,但毕竟这是第一次做,难免会遇到各种各样的问题。

在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固。

我们通过查阅大量有关资料,并在小组中互相讨论,交流经验和自学,若遇到实在搞不明白的问题就会及时请教老师,使自己学到了不少知识,也经历了不少艰辛,但收获同样巨大。

在整个设计中我懂得了许多东西,也培养了我独立工作的能力,树立了对自己工作能力的信心,相信会对今后的学习工作生活有非常重要的影响。

而且大大提高了动手的能力,使我充分体会到了在创造过程中探索的艰难和成功时的喜悦。

虽然这个设计做的也不太好,但是在设计过程中所学到的东西是这次课程设计的最大收获和财富。

单片机课程设计虽然结束了,但通过设计所学到的东西将长久存在。

相信这次设计带给我们的严谨的学习态度和一丝不苟的科学作风将会给我们未来的工作和学习打下一个更坚实的基础。

 

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 工程科技 > 电子电路

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1