简易计数器.docx
《简易计数器.docx》由会员分享,可在线阅读,更多相关《简易计数器.docx(18页珍藏版)》请在冰豆网上搜索。
简易计数器
课程设计报告
课程名称:
单片机课程设计
专业:
广播电视工程班级:
B1201
姓名:
熊业昌学号:
12405040114
同组人:
朱舟、李佳星、吕杰
成绩:
完成日期:
2015年一月七日
任务书
题目:
简易计数器
设计内容及要求:
1、硬件设计
单片机主电路、数码管显示电路等
2、软件设计
系统流程图、各功能程序
3、安装调试
设计环境:
PROTEUS、Keil开发环境
基本目标:
(1)使用单片机实现简易计数器
(2)当从入口出投入物件时,能显示投入的个数(十以内,1位)
扩展功能:
(1)百以内计数(两位);
(2)超过量程,报警后,清零;
(3)达到所需数量,按压开关,清零;
(4)其他。
摘要
本文结合实际使用需求和课程设计课题的要求,简单论述了一种结合数码管显示器可以简单计数的单片机,类似地铁站的硬币收集装置。
该方案以AT89C51单片机、数码管显示器、简单计数开关为基础,重点对设计系统的硬件、软件的设计组成进行论述和分析。
整个计数器系统由四大模块组成:
最小系统、数码管显示器、清零开关、计数开关。
硬件设计在PROTEUS仿真软件完成,软件编程在KeilC软件上完成,最后完成联合仿真。
仿真完成无误后,连接实物,测试并完成课题。
关键词:
单片机、数码管显示器、弹片开关
目录
第一章:
设计说明5
第二章:
单片机主要原理5
第三章:
硬件设计7
第四章:
软件设计8
第5章:
调试与仿真10
第六章:
实物图11
第六章:
心得体会12
附录:
13
第1章:
设计说明
1.1:
设计要求
能够简单进行计数,并将数字显示在数码管显示器上。
对投入系统的硬币可以进行100以类的计数,并且可以随时完成清零操作。
1.2:
确定设计方案
由于红外开关设计较为复杂,所以使用弹片开关。
计数时,必须将硬币准确投进弹片开关,否则有可能没有启动开关,无法计数。
第2章:
单片机主要原理
由于该课程设计主要是AT89C51芯片,将对其进行纤细介绍。
2.1:
单片机概述
单片机微型计算机是微型计算机的一个重要分支,也是颇具生命力的机种。
单片机微型计算机简称单片机,特别适用于控制领域,故又称为微控制器。
2.2:
芯片简介
MSC-51芯片简介:
8051单片机包含中央处理器、程序存储器(ROM)、数据存储器(RAM)、定时/计数器、并行接口、串行接口和中断系统等几大单元及数据总线、地址总线和控制总线等三大总线。
引脚介绍:
VCC(40脚):
接+5V电源正端。
VSS(20脚):
接+5V电源地端。
XTAL1(19脚):
接外部石英晶体的一端。
在单片机内部,它是一个反相放大器的输入端,这个放大器构成了片内振荡器。
当采用外部时钟时,对于HMOS单片机,该引脚接地;对于CHMOS单片机,该引脚作为外部振荡信号的输入端。
P0口(39~32脚):
P0.0~P0.7统称为P0口。
在不接片外存储器与不扩展I/O口时,可作为准双向输入/输出口。
在接有片外存储器或扩展I/O口时,P0口分时复用为低8位地址总线和双向数据总线。
P1口(1~8脚):
P1.0~P1.7统称为P1口,可作为准双向I/O口使用。
对于52子系列,P1.0与P1.1还有第二功能:
P1.0可用作定时器/计数器2的计数脉冲输入端T2,P1.1可用作定时器/计数器2的外部控制端T2EX。
P2口(21~28脚):
P2.0~P2.7统称为P2口,一般可作为准双向I/O口使用;在接有片外存储器或扩展I/O口且寻址范围超过256字节时,P2口用作高8位地址总线。
P3口(10~17脚):
P3.0~P3.7统称为P3口。
除作为准双向I/O口使用外,还可以将每一位用于第二功能,而且P3口的每一条引脚均可独立定义为第一功能的输入输出或第二功能。
2.3:
单片机最小系统
单片机最小系统是支持主芯片正常工作的最小系统,是单片机工作的最基本配置,包括主控芯片、复位电路和晶振电路。
2.4:
七段共阴极数码管
其引脚从上到下为a、b、c、d、e、f、g,最下为GND。
第3章:
硬件设计
简易计数器系统主要包括:
最小系统、数码管显示器、清零开关、计数开关等。
下面简单进行说明。
3.1:
清零电路的设计
此开关主要用于清零操作。
当系统完成计数时,可以通过此开关完成清零,而不需要使系统达到最大数值才能完成清零操作。
3.2:
计数开关的设计
此开关为特殊开关,主要用来计数。
开关为弹片开关,当有硬币投入时,触发开关,完成计数。
3.3:
显示电路的设计
显示器用来显示硬币数,左边为十位,右边为个位。
3.4:
硬件模拟图
第4章:
软件设计
4.1:
系统模块图
此系统包括输入、显示、清除模块,并全部由单片机控制。
系统通过输入模块计数,然后在显示模块显示数字。
清除模块为辅助模块。
4.2:
系统总流程图
Y
N
N
Y
Y
N
第5章:
调试与仿真
根据所学内容,利用KeilC软件和PROTEUS软件进行联合仿真实验。
5.1:
KeilC软件的使用
1.打开KeilC软件,创建一个工程,先单击【工程】选项,在弹出的下拉菜单中选中【新建工程】选项,弹出【新建工程】对话框。
2.编辑源程序文件,选择【文件】菜单下的【新建】,出现文本编辑窗口。
在该窗口输入所要设计的源程序。
3.单击文本框左侧的“目标1”前的“+”号,展开文件夹,,可看到文件夹“源程序组1”,右侧源程序1图标,出现下拉菜单。
4.根据需要配置C51编译器,Debug调试器等各种选项。
5.编译程序,选择【工程】菜单下的【重新构造所有目标】选项,检查错误。
6.调试∕运行程序,编译完成后,选择【调试】菜单下的【启动∕停止调试】选项进行调试运行。
5.2:
PROTEUS仿真软件的使用
1.在ISIS平台上进行单片机系统电路设计、选择元器件、接插件、连接电路和电气检测等(简称PROTEUS电路设计);
2.在KeilC平台上进行单片机系统源程序设计、编辑、汇编编译、调试,最后生成目标代码文件(*.hex);
3.在ISIS平台上将目标代码文件加载到单片机系统中,并实现单片机系统的实时交互、协同仿真;
4.仿真正确后,安装实际单片机系统电路,并将目标代码文件(*.hex)下载到实际单片机中运行、调试。
若出现问题,可与PROTEUS设计与仿真相互配合调试,直至运行成功。
5.3:
调试结果图(部分)
开启清零开关,所有数据清零。
投入八枚硬币,即弹片开关起合八次。
数据溢出,显示错误。
数据溢出错误后清零,一切重启。
第六章:
实物图
弹片开关
第七章:
心得体会
通过这次课程设计,是我更加扎实的掌握了有关单片机和程序编程方面的理解,在设计方面虽然遇到了一些问题,但小组成员经过一遍又一遍的思考和检查终于找到了原因所在,调试的时候发现延时太高,原因是程序汇编时r3和r4数值过小,后期将他们分别调到190和100时,系统运行正常。
过而能改,善莫大焉。
在课程设计中,我们不断发现错误,不断改正,不断领悟,不断获取。
诚然好多地方我没有直接参与,但在汇编方面,经过同学的解释,我终于有了一点点的理解。
课程设计诚然是一门专业课,给予我很多专业知识和专业技能上的提高,同时又是一门思辨课,需要我们能够快速理解老师的问题并能够给予解答。
通过这次课程设计,我理解了单片机硬件连接所需注意的一些方面,比如电阻的阻值选择,最小系统的确定;还有软件汇编方面,我可以简单的了解程序运行是的规律。
最后,通过查询资料,能够简单了解这次课程设计的目的。
实验过程中,也对团队精神进行了考察,让我们在合作起来更加默契,最后看着程序运行的流畅无阻,我们也感到很骄傲。
此次设计也让我明白了思路及出路,有什么不明白的地方必须及时请教同组和查阅网上资料。
只要认真钻研,就没有无法解决的问题。
附录程序清单
org0000h;
start:
movp2,#3fh;
movp1,#3fh;
mova,#0h;
movb,#0h;
ljmpstop;
k1:
cjnea,#1h,k2;
movp1,#06h;
ljmpstop;
k2:
cjnea,#2h,k3;
movp1,#5bh;
ljmpstop;
k3:
cjnea,#3h,k4;
movp1,#4fh;
ljmpstop;
k4:
cjnea,#4h,k5;
movp1,#66h;
ljmpstop;
k5:
cjnea,#5h,k6;
movp1,#6dh;
ljmpstop;
k6:
cjnea,#6h,k7;
movp1,#7dh;
ljmpstop;
k7:
cjnea,#7h,k8;
movp1,#07h;
ljmpstop;
k8:
cjnea,#8h,k9;
movp1,#7fh;
ljmpstop;
k9:
cjnea,#9h,k0;
movp1,#6fh;
incb;
ljmpstop;
k0:
cjnea,#0h,k1;
xcha,b;
cjnea,#0ah,k10;
xcha,b;
movp1,#31h;
movp2,#79h;
acalldelay;
ljmpstart;
k10:
movp1,#3fh;
acallm1;
xcha,b;
ljmpstop;
stop:
acallpan;
ljmpk1;主程序结束
m1:
cjnea,#1h,m2;
movp2,#06h;
ret;
m2:
cjnea,#2h,m3;
movp2,#5bh;
ret;
m3:
cjnea,#3h,m4;
movp2,#4fh;
ret;
m4:
cjnea,#4h,m5;
movp2,#66h;
ret;
m5:
cjnea,#5h,m6;
movp2,#6dh;
ret;
m6:
cjnea,#6h,m7;
movp2,#7dh;
ret;
m7:
cjnea,#7h,m8;
movp2,#07h;
ret;
m8:
cjnea,#8h,m9;
movp2,#7fh;
ret;
m9:
cjnea,#9h,m0;
movp2,#6fh;
ret;
m0:
cjnea,#0h,m10;
movp2,#3fh;
ret;
m10:
ret;
delay:
movr2,#10;
de1:
movr3,#190;
de2:
movr4,#100;
de3:
djnzr4,de3;
djnzr3,de2;
djnzr2,de1;
ret;
pan:
mov0ffh,a;
mova,p0;
cjnea,#0h,pan1;
ljmpstart;
pan1:
mova,p3;
cjnea,#0ffh,l0;
mova,0ffh;
ljmppan;
l0:
mova,0ffh;
inca;
acalldelay;
cjnea,#0ah,l1;
mova,#0h;
sjmpl1;
l1:
ret;
end;