单片机课程设计

  • 格式:doc
  • 大小:2.49 MB
  • 文档页数:20

单片机课程设计
一、设计任务:
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位数码管中,前4位显示数码管显示里程数,后
4位数码管显示价钱(角,元,十元,百元)
注:要求首先采用PROTEUS完成单片机最小系统的硬件电路
设计及仿真实现1.1外部脉冲计数;程序仿真测试通过后,
再下载到单片机实训板上执行1.2出租车计费系统。

二、单片机最小系统硬件资源介绍:
※89S51单片机;
※8位共阴极数码管;
※段码驱动器、位选译码器74HC573;
※4个独立式按键和4*4矩阵键盘;
※外部晶振电路;
※USB下载接口(In system program,在系统编程);
※液晶显示器1602(选配);
※8*8点阵显示(选配)。

※直流电机(选配)。

※红外遥控(选配)。

※AD/DA模块
单片机最小系统实训板硬件资源分布见光盘中的资料“2、MINI_V22电路图2”。

其中,8路共阴极数码管动态显示电路图如图1所示,P0口通过上面的74HC573(起驱动和隔离作用,并扩展了单片机的I/O端口),来控制数码管的8路段码,P0口通过下面的74HC573,来控制数码管的8路位选(低电平选中)。

为了保证P0口不会出现数据冲突,需要编程控制两个74HC573不能同时工作(P2.6接上面74HC573的LE端,1有效;P2.7接下面74HC573的LE端,1有效)。

例如:用最左边的数码管显示0
CLR P2.6
SETB P2.7
MOV P0,#0FEH;位选
CLR P2.7
SETB P2.6
MOV P0,#3FH;送0的字形码
图1 单片机数码管显示原理图
三、设计思路
1. 设计一个255计数器:0-255计数,计满后自动清0,重新计数(在数码管中显示)。

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

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

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

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

2.设计一个50000计数器:0-50000计数,计满后自动清0,重新计数(在数码管中显示)。

原理: 将TH1和TL1中的十六进制数转为BCD码,
入口:HT1,TL1中是 16 位二进制数,其中TH1中是高 8 位;
出口:R2 R3 R4 中是 BCD 码,其中R2中是万位,R3中是千、百位,R4
中是十、个位。

再转为对应的个.十.百.千.万位。

送到缓冲区。

接着调用显示子程序。

3.设计一个出租车计费系统:
起步价为5元(2km以内),2km后,0.8元/0.5km;要求每500m刷新计费一次,在8为数码管中,前4为显示数码管显示里程数,后4位数码管显示价钱(角,元,十元,百元)
原理:计数器每计数100个外部脉冲就产生中断,里程加1百米,大于两千米百位就和5和0比较,如果相等就调用价格计算子程序,价格加0.8元。

然后返回中断,调用里程和
价格显示子程序
四、PROTEUS硬件电路图和实际效果图
1、255计数器电路图
2、50000计数器
3、出租车计费系统
1、初始时候在2公里以内都是5元
图上的2表示1公里,费用5元
图上表示2公里收费5元
2、大于2公里每里路加0.8元
图上里程14里收费13.0元四、汇编源程序
1、255计数器(WA VE)
2、50000计数器
3、出租车收费系统
六、心得体会
作为一名电子与信息工程专业的大三学生,我觉得做单片机课程设计是十分有意义的,而且是十分必要的。

在已度过的大学时间里,我们大多数接触的是专业课。

我们在课堂上掌握的仅仅是专业课的理论知识,如何去锻炼我们的实践能力?如何把我们所学的专业基础课理论知识运用到实践中去呢?我想做类似的课程设计就为我们提供了良好的实践平台。

完成这次的单片机课程设计花费将近一周时间,但是却从理论到实践,学到了很多的东西。

同时不仅巩固了以前所学过的知识。

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

在这次课程设计后我发现自己在一点一滴的努力中对单片机的兴趣也在逐渐增加。

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

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

开始的第一天就自己做的是0到255的计数器,对于数码管显示数据这部分不是很熟悉,在TH、TL里面放个初值,然后启动定时/计数器就可以开始计数了,然后到了255个后又重新开始,但是怎么把所记的脉冲数显示出来却总是不大懂。

于是把书好好看了遍,对数码管显示熟悉之后就开始了设计。

这次的单片机课程设计遇到的最多的问题就是在程序的编写上,尤其是0到5000计数时,在那里卡了好久,一直就是TL和TH两个寄存器里的数据取不出来,自然就无法送到数码管显示,因为两个寄存器里的数据加一起有十六位,我们所用的单片机是8位机,最大只能赋值256,超过256就会发生错误,为此试过好多种方法,但是都不行,最后用的BCD转换才解决得。

通过温度报警系统单片机课程设计,加深了我对单片机指令系统,中断系统,放大器放大倍数,模数转换有了深刻的理解,开始我对 SJMP,LCALL这两种指令的返回点不清楚,我就把书上所有SJMP,LCALL指令对照起来看,然后再去同学,在她们的帮助下我对这些指令有了深刻的认识,在调试中断的时候,只产生了一次中断,原来中断没有返回;在调试换大器的放大倍数时候,是一份精细的工作,我整整用了一天的时间把它给弄好,完美满足了用户的需要,最后把能够更好的把此理论将理论应用到实际当中去,而且我还学会了如何去培养我们的创新精神,而且要有坚持不懈的精神。

还让我认识到单片机作为一门实践性很强的学科,动手能力是非常有必要而且必须的。

在这次课程设计中,遇到了不少问题,不过经过老师和寝室同学的指导,查阅各种资料,最后都一一解决了,比较顺利的完成了这次设计,在这里我感谢的莫小飞和李盼耐心指导和帮助。

在这短短的几天时间里,把之前学习的单片机只是都复习了一边,比之前有了一个更加清晰地理解,实践出真知这话真的一点不假,动过动手实践掌握的东西远比单纯课堂上听来的要深刻、要清晰。

通过这次的课程设计,我发现了遇到问题首先应该想的是如何自己解决,实在是想不到时候再通过自己去网上找资料,也可以在同学之间探讨,这样得来的远比直接问老师,听老师是如何解答的来得要深刻,要掌握的更扎实,在下次遇到类似问题的时候就可以有个清晰的解决问题的思路,以及此类问
题是因何产生的也会有个比较清晰地认识。

回顾起此次单片机课程设计,我感慨颇多,最重要的是感触是:遇到一个问题时,最重要的一件事就是马上思考检查问题出在哪边,而不是抱怨或者马上请教同学老师。

只有这样我们才能真正的学会单片机,才能越学越会。

自己的独立处理问题的能力才会得到提高。

还有无论编程中遇到什么问题,都不要怨天尤人。

无论自己的程序有多好,都不能骄傲。

只有这样做到不骄不躁,力量才会源源不断,才会有更多的灵感。