对外部脉冲计数系统的设计计数器课程设计单片机.docx

上传人:b****7 文档编号:25154108 上传时间:2023-06-05 格式:DOCX 页数:14 大小:40.99KB
下载 相关 举报
对外部脉冲计数系统的设计计数器课程设计单片机.docx_第1页
第1页 / 共14页
对外部脉冲计数系统的设计计数器课程设计单片机.docx_第2页
第2页 / 共14页
对外部脉冲计数系统的设计计数器课程设计单片机.docx_第3页
第3页 / 共14页
对外部脉冲计数系统的设计计数器课程设计单片机.docx_第4页
第4页 / 共14页
对外部脉冲计数系统的设计计数器课程设计单片机.docx_第5页
第5页 / 共14页
点击查看更多>>
下载资源
资源描述

对外部脉冲计数系统的设计计数器课程设计单片机.docx

《对外部脉冲计数系统的设计计数器课程设计单片机.docx》由会员分享,可在线阅读,更多相关《对外部脉冲计数系统的设计计数器课程设计单片机.docx(14页珍藏版)》请在冰豆网上搜索。

对外部脉冲计数系统的设计计数器课程设计单片机.docx

对外部脉冲计数系统的设计计数器课程设计单片机

湖南工业大学

课程设计

资料袋

理学学院(系、部)2012~2013学年第1学期

课程名称单片机应用系统指导教师周玉职称副教授

学生姓名张思远专业班级电子科学102学号

题目对外部脉冲计数系统的设计

成绩起止日期2013年01月06日~2013年01月10日

目录清单

序号

材料名称

资料数量

备注

1

课程设计任务书

1

2

课程设计说明书

1

3

课程设计图纸

1

4张

4

5

6

湖南工业大学

课程设计任务书

2012—2013学年第1学期

理学院学院(系、部)电子科学专业102班级

课程名称:

单片机应用系统

设计题目:

对外部脉冲计数系统的设计

完成期限:

自2013年01月06日至2013年01月10日共1周

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

1.1.1设计一个255计数器:

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

1.1.2设计一个50000计数器:

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

注:

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

起止日期

工作内容

2013.01.06

讲述设计内容及基本原理

2013.01.07-2013.01.09

进行系统的设计

2013.01.10

进行系统的调试,检查

[1]刘苗生、潘宗预.单片机测控系统设计.中国物质出版社,2006年

[2]欧伟明、何静、凌云、刘剑.单片机原理与应用系统设计.电子工业出版社,2009年

指导教师(签字):

年月日

系(教研室)主任(签字):

年月日

附件三

(单片机应用系统)

设计说明书

(题目)

对外部脉冲计数系统的设计

起止日期:

2013年01月06日至2013年01月10日

学生姓名

张思远

班级

电子科学102

学号

成绩

指导教师(签字)

电气与信息工程学院

2012年12月10日

一、设计任务:

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

1.1.1设计一个255计数器:

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

1.1.2设计一个50000计数器:

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

注:

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

二、硬件设计介绍:

※STC89C52单片机;

※6位共阴或者共阴极数码管;

※外部晶振电路;

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

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

※ISP下载线(选配)

※6个PNP(NPN)三极管

※12个碳膜电阻

三、硬件设计思路

方案一:

五个1位7段数码管,无译码器

方案二:

五个1位7段数码管,译码器

方案三:

1个6位7段数码管,译码器

方案四:

1个6位7段数码管,无译码器

考虑实际中外围设备、资金、单片机资源利用率、节省端口数量,可实行性以及连接方便等问题,采用6为数码管(共阳或者共阴极)由于实际中没买到6位的,采用2个三位数码管并接组合一个6位数码管形式;由于实际P口驱动能力有限,故采用6位三极管增大驱动能力,已便足以使得6位数码管亮度明显正常工作,增加6个电阻限流保护数码管不被烧坏。

让数码管a-g7段分别接P1.6—P1.0,

6位位选分别接P2.5—P2.0。

方法一:

共阴极数码管

硬件图1.0所示:

通过npn管放大后,段选高电平有效,位选低电平有效

图1.0共阴极数码管硬件原理图

方法二:

共阳极数码管

原理图如图2.0:

段选低电平有效,位选低电平有效(通过pnp管连接,不再是高电平有效了,由于特意此接法,共阳极共阴极数码管只是差别段选控制,为程序修改提供极大的方便之处,故程序只需要修改段选地址即可,实现共阳极共阴极互换)

图2.0共阳极数码管硬件原理图

三、程序设计思路:

由于设计是255和50000计数器,对于计数器工作模式二,TL最大值为255,可以实现对255计数,但是对于50000得另寻他路,为了建立不限制计数器模型,改进程序的可更改性可移植性可读行,对计数器模式二另TL1=0FFH(以T1为例,下文不再说明),只要来一个脉冲,就跳转中断服务程序执行,而计数不是直接通过TL操作,而是采用多寄存器组合的方式,方便修改,本设计采用R5,R6,R7,三寄存器通过数学上的逻辑组合形成6位数,如R7的低4位记录个位,高4位记录十位,R7本身只记录到99,在进一则归零,向百位进一(R6),而显示是通过对R7/10取余取整(0-9)通过查表指令实现相应的数字显示,位选通过高频扫描,实现“连续显示”无需再进行BCD转换,其他R5R6同理。

极大的方便客户修改计数初值,灵活的实现计数。

对计数范围不限定且可系统模块化。

故对255和50000均适用

图3计数程序流程图(255、50000均适用)

四、硬件实物图

如图4.0

五、汇编程序(255、50000共用)

;对于255,设置R5=00,R6=02,,R7=55

;对于50000,设置R5=05,R6=00,R7=00

5.1对于共阴极数码管:

;----------------------------------------

ORG0000H

AJMPMIAN

ORG000BH

AJMPINTERP

ORG0030H

MIAN:

MOVR5,#00;为十万、万位

MOVR6,#00;千、百位

MOVR7,#00;十、个位

MOVTMOD,#06H

MOVTL0,#0FFH

MOVTH0,#0FFH

SETBTR0

SETBET0

SETBEA

XIANSHI:

MOVR0,#0BFH

MOVA,R7

LCALLCHANGE

MOVA,R6

LCALLCHANGE

MOVA,R5

LCALLCHANGE

SJMPXIANSHI

CHANGE:

MOVR1,A;位选移位,进行扫描。

R1保护操作值,暂存于R1

MOVA,R0

SETBC

RRCA

MOVR0,A

MOVA,R1

MOVB,#10

DIVAB

XCHA,B;组合整数部分余数部分

MOVDPTR,#0100H

MOVCA,@A+DPTR

MOVP2,R0

MOVP1,A

LCALLDELAY

MOVA,B

MOVR1,A

MOVA,R0

SETBC

RRCA

MOVR0,A

MOVA,R1

MOVCA,@A+DPTR;段选查表显示

MOVP2,R0

MOVP1,A

LCALLDELAY;延时10ms

RET

INTERP:

CJNER5,#05,RE1;计数值设置:

万位十万位

CJNER6,#00,RE1;计数值设置:

百位千位

CJNER7,#00,RE1;计数值设置个位十位

MOVR7,#0

MOVR6,#0

MOVR5,#0

RETI

RE1:

CJNER7,#99,LOOP1

MOVR7,#0

CJNER6,#99,LOOP2

MOVR6,#0

CJNER5,#99,LOOP3

MOVR5,#0

LOOP1:

INCR7

RETI

LOOP2:

INCR6

RETI

LOOP3:

INCR5

RETI

DELAY:

MOVR4,#10

DE1:

MOVR3,#50

DE2:

DJNZR3,DE2

DJNZR4,DE1

RET

ORG0100H

DB7EH,30H,6DH,79H,33H

DB5BH,5FH,70H,7FH,7BH

RED

;------------------------------------------------

;----------------------------

5.2对于共阳极数码管

只需将DB7EH,30H,6DH,79H,33H

DB5BH,5FH,70H,7FH,7BH

改成:

DB01H,4FH,12H,06H,4CH

DB24H,20H,0FH,00H,04H

即可

六、C51程序:

//对于255,设置c=00,b=02,,a=55

//对于50000,设置c=05,b=00,a=00

6.1对于共阴极数码管:

#include

#include

#include

//a位个位十位,b位百位千位c位万位十万位

chara,b,c;

//延时

DelayMS(intx)

{

chari;

while(x--)

{

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

}

}

//T1计数中断,工作方式2

Timer1_Interrupt()interrupt3using1

//计数操作模块

//a位个位十位,b位百位千位c位万位十万

{

if(a!

=99)

{

a++;

}

else

{

a=0;

if(b!

=99){

b++;

}

else{

b=0;

if(c!

=99){

c++;

}

else{

c=0;

}

}

}

if(c==0&&b==2&&a==55){//判断是否计数到255(c==5&&b==0&0&a==00)为计数50000

a=0;

b=0;

c=0;

}

}

voidmain()

//段选编码数组

{charcodeDISP[]={0x7E,0x30,0x6D,0x79,0x33,0x5B,0x5F,0x70,0x7F,0x7B};

charR0,R1;

P2=0XBF;//位选初值设置

TMOD=0X60;

TH1=0XFF;

TL1=0XFF;

TR1=1;

ET1=1;

EA=1;

while

(1){

P2=0XBF;//循环移位后,重赋初值

R0=a%10;

R1=a/10;

P2=_cror_(P2,1);//循环右移位选

P1=DISP[R0];//查数组显示

DelayMS(3);//

P2=_cror_(P2,1);

P1=DISP[R1];

DelayMS(3);

//

R0=b%10;

R1=b/10;

P2=_cror_(P2,1);

P1=DISP[R0];

DelayMS(3);//

P2=_cror_(P2,1);

P1=DISP[R1];

DelayMS(3);

R0=c%10;

P2=_cror_(P2,1);

P1=DISP[R0];

DelayMS(3);

}

}

//END

6.2对于共阳极数码管:

程序只需将

CharcodeDISP[]={0x7E,0x30,0x6D,0x79,0x33,0x5B,0x5F,0x70,0x7F,0x7B};

改成:

CharcodeDISP[]={0x01,0x4F,0x12,0x06,0x4C,0x24,0x20,0x0F,0x00,0x04};

即可。

七、PCB图

九、心得体会

在这次实验中,我学到很多东西,加强了我的动手能力,并且培养了我的独立思考能力。

特别是在做实验报告时,因为在做数据处理时出现很多问题,如果不解决的话,将会很难的继续下去。

例如:

数据处理时,遇到要进行数据获取显示,这就要求懂得数码管的工作,怎么个去控制,然后汇编程序怎么去实现数码管各个引脚的控制,对于多位数码管还得扫描显示。

我们做实验绝对不能人云亦云,要有自己的看法,要有自己独特的思路。

这样我们就要有充分的准备,若是做了也不知道是个什么实验,那么做了也是白做。

实验总是与课本知识相关的,在做设计前,首先你先想好最方便最实用最经济的硬件连接电路,然后用软件弥补不足之处,硬件是软件的躯体,而软件是硬件的血液,两者相辅相连,关系极为紧密。

硬件的不足可以适当用软件弥补,同样,良好的程序是建立在好性能的硬件上的。

在编写程序的时候,我觉得思路清晰,结构明确,最好具有模块化,建立模型,使得程序具有方便修改性,易于移植,且不受局限性,这样一来,程序灵活自如,结构明确易于别人看懂且为以后方便修改等。

首先只进行仿真时,接的带译码的数码管,最多也只能驱动6个1位数码管,而如果用1位数码管就浪费了很多资源不说,而给实际电路连接带来麻烦,所以后来考虑6位数码管,那么问题就的进行高频扫描,实现动态显示,先是加了译码器,最后位了节省资源,省去译码器而程序改写进行查表指令代替,省去了很多其他硬件。

仿真无误后,用杜邦线插上数码管等线路,发现数码管亮度微乎及微,因为单片机P口驱动能力有限,驱动一位数码管还可以,但是要驱动2位,3位乃至6位、9位就不行了,必须地扩大其驱动能力,所以,我接了三极管以增大其驱动能力。

买来了所需要的相应的电阻、三极管等,由于板子面子有限只有7cm×5cm,先在草稿上画好版图,布局以确定最佳布局。

焊接完后,激动人心的时候到了,结果接上电,在按下开关那一瞬间,晕了,C、E两端不亮啊,检查了程序,检查硬件有没有段,结果就是检查不出啊,后来看了三极管才发现原因了,有2个三极管和其他4个型号不一样

,我才知道,原来吧两种三极管混放在一起了,当做是同一型号用了,发现源泉后,马上换了2个三极管,问题解决了,可用迎来另外一个问题,虽然看上去没大问题但是,显示的时候有残影效果,通过各种测试,发现了个问题,原来我程序里每个数码管显示时间不够,也就是说延时不够,我扩大了常规显示效果即延时10ms左右,问题成功解决了,而且亮度也平均增强了。

很是cool,虽然弄了一个通宵,但是每个问题都解决了,实在是爽歪歪,有点累却是值得的,很感谢周老师认真心细的指导、对学生及其的负责,教育我们耐心、教诲我们独自思考能力,教会我们创新能力,我想作为周老师的学生很是幸运,是我们的好伙伴,感谢老师!

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

当前位置:首页 > 高中教育 > 理化生

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

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