基于单片机的计数器设计docWord文档格式.docx
《基于单片机的计数器设计docWord文档格式.docx》由会员分享,可在线阅读,更多相关《基于单片机的计数器设计docWord文档格式.docx(15页珍藏版)》请在冰豆网上搜索。
计数器的应用范围也遍布印刷、纺织、印染、针织、电缆、电讯、军工、轻工、机械、开关、断路器、矿山、实行多班制的纺织行业的织布机、织带机、制线、制带、造纸、制革、薄膜、高压开关电器产品、试验设备,印刷设备、短路器、医疗、纺织、机械、仓库和码头的货运、行人及车辆过往的数量计数、冶金、食品、国防、包装、配料、石油、化工、发电、机床、仪表、自动化控制等行业。
目录
第一章系统的功能要求·
·
4
1.1系统设计的要求及主要内容应解决的问题·
第二章方案论证·
2.1设计方案选择·
2.2设计原理·
5
第三章系统硬件电路设计·
6
3.1最小系统设计·
3.2原理图·
9
3.3电路仿真·
10
第四章系统程序设计·
12
4.1系统软件设计流程图·
4.2程序·
13
第五章调试及性能分析·
14
5.1系统性能测试与功能说明·
5.2软件调试问题及解决·
参考文献·
附件计数器程序·
15
实物电路图·
16
第一章系统的功能要求
要求:
1.整个系统有较强的抗干扰能力.
2.计数范围:
00~99.
3.将计数值准确显示出来.
应解决问题:
基于单片机构成的产品自动计数器研究的主要内容包括:
如果构成检测电路、MCS-51单片机用何种方式对外部计数脉冲进行计数显示控制、LED显示驱动模块的选择、MCS-51单片机的扩展。
在这个设计中主要需要解决的问题便是如何提高MCS-51单片机的抗干扰能力以及稳定性。
第2章方案论证
2.1设计方案选择
方案一:
采用多种数字逻辑电路来实现逻辑控制、主门、门控、计数单元的设计要求,这样设计的电路整体比较复杂,而且不宜完成发挥部分的功能要求。
所以方案一不采用。
方案二:
可以采用FPGA来实现逻辑控制、主门、门控、计数单元的设计要求,并且设计方便,但由于对FPGA的技术原理掌握不够熟练,所以放弃方案二。
方案三:
系统采用8051为核心的单片机控制系统,实现原理图中的逻辑控制、主门、门控、计数的设计要求
单片机计数器的方式控制寄存器TMOD中的GATE位=1时,可以很方便的进行INT0引脚的外部输入信号的时间间隔测量。
且单片机的控制电路很容易实现扩展,比如语音模块、测温I2C模块、时钟模块、A/D模块等。
故采用方案三。
2.2设计原理
利用AT89S52单片机来制作一个手动计数器,在AT89S52单片机的P3.7管脚接一个轻触开关,作为手动计数的按钮,用单片机的P2.0-P2.7接一个共阴数码管,作为00-99计数的个位数显示,用单片机的P0.0-P0.7接一个共阴数码管,作为00-99计数的十位数显示;
硬件电路图如图2-1所示:
图2-1硬件电路图
系统板上硬件连线
1)把“单片机系统”区域中的P0.0/AD0-P0.7/AD7端口用8芯排线连接到“四路静态数码显示模块”区域中的任一个a-h端口上;
P0.0/AD0对应着a,P0.1/AD1对应着b,……,P0.7/AD7对应着h。
2)把“单片机系统”区域中的P2.0/A8-P2.7/A15端口用8芯排线连接到“四路静态数码显示模块”区域中的任一个数码管的a-h端口上;
3)把“单片机系统”区域中的P3.7/RD端口用导线连接到“独立式键盘”区域中的SP1端口上.
第3章系统硬件电路的设计
3.1最小系统设计
图3-1单片机最小系统的结构图
单片机的最小系统是由电源、复位、晶振、/EA=1组成,下面介绍一下每一个组成部分。
1.电源引脚
Vcc 40 电源端;
GND 20 接地端;
工作电压为5V
2.外接晶体引脚
19脚悬空,18脚为外部振荡信号
图3-2晶振连接的内部、外部方式图
XTAL1是片内振荡器的反相放大器输入端,XTAL2则是输出端,使用外部振荡器时,外部振荡信号应直接加到XTAL1,而XTAL2悬空。
内部方式时,时钟发生器对振荡脉冲二分频,如晶振为12MHz,时钟频率就为6MHz。
晶振的频率可以在1MHz-24MHz内选择。
电容取30PF左右。
系统的时钟电路设计是采用的内部方式,即利用芯片内部的振荡电路。
AT89单片机内部有一个用于构成振荡器的高增益反相放大器。
引脚XTAL1和XTAL2分别是此放大器的输入端和输出端。
这个放大器与作为反馈元件的片外晶体谐振器一起构成一个自激振荡器。
外接晶体谐振器以及电容C1和C2构成并联谐振电路,接在放大器的反馈回路中。
对外接电容的值虽然没有严格的要求,但电容的大小会影响震荡器频率的高低、震荡器的稳定性、起振的快速性和温度的稳定性。
因此,此系统电路的晶体振荡器的值为12MHz,电容应尽可能的选择陶瓷电容,电容值约为22μF。
在焊接刷电路板时,晶体振荡器和电容应尽可能安装得与单片机芯片靠近,以减少寄生电容,更好地保证震荡器稳定和可靠地工作。
3.复位 RST 9
在振荡器运行时,有两个机器周期(24个振荡周期)以上的高电平出现在此引腿时,将使单片机复位,只要这个脚保持高电平,51芯片便循环复位。
复位后P0-P3口均置1引脚表现为高电平,程序计数器和特殊功能寄存器SFR全部清零。
当复位脚由高电平变为低电平时,芯片为ROM的00H处开始运行程序。
复位是由
外部的复位电路来实现的。
片内复位电路是复位引脚RST通过一个斯密特触发器与复位电路相连,斯密特触发器用来抑制噪声,它的输出在每个机器周期的S5P2,由复位电路采样一次。
复位电路通常采用上电自动复位和按钮复位两种方式,此电路系统采用的是上电与按钮复位电路。
当时钟频率选用6MHz时,C取22μF,Rs约为200Ω,Rk约为1K。
复位操作不会对内部RAM有所影响。
图3-3常用复位电路图
4.输入输出引脚
(1)P0端口[P0.0-P0.7]P0是一个8位漏极开路型双向I/O端口,端口置1(对端口写1)时作高阻抗输入端。
作为输出口时能驱动8个TTL。
对内部Flash程序存储器编程时,接收指令字节;
校验程序时输出指令字节,要求外接上拉电阻。
在访问外部程序和外部数据存储器时,P0口是分时转换的地址(低8位)/数据总线,访问期间内部的上拉电阻起作用。
(2)P1端口[P1.0-P1.7]P1是一个带有内部上拉电阻的8位双向I/0端口。
输出时可驱动4个TTL。
端口置1时,内部上拉电阻将端口拉到高电平,作输入用。
对内部Flash程序存储器编程时,接收低8位地址信息。
(3)P2端口[P2.0-P2.7]P2是一个带有内部上拉电阻的8位双向I/0端口。
对内部Flash程序存储器编程时,接收高8位地址和控制信息。
在访问外部程序和16位外部数据存储器时,P2口送出高8位地址。
而在访问8位地址的外部数据存储器时其引脚上的内容在此期间不会改变。
(4)P3端口[P3.0-P3.7]P2是一个带有内部上拉电阻的8位双向端口。
3.2原理图
图3-4电路总图
数码管的介绍
在本任务中用两位数码管显示当前数值的十,个,采用动态显示方式。
两位数码管的相同段并联在一起,由一个6位I/O(P1口)输出字形码控制显示某一字形,每个数码管的公共端由另外一个I/O口(P0口)输出的字位码控制,即数码管显示的字形是由单片机I/O口输出的字形码确定,而哪个数码管点亮是由单片机I/O口输出的字位码确定的。
数码管有共阴极和共阳极两种,
对于共阳数码管,字形驱动输出0有效,字位驱动输出1有效;
而对于共阴数码管则相反,即:
字形驱动输出1有效,字位驱动输出0有效
数码管使用条件:
a、使用电压段:
根据发光颜色决定;
b、小数点:
根据发光颜色决定
c、使用电流:
静态:
总电流80mA(每段10mA);
动态:
平均电流4-5mA峰值电流100mA
数码管使用注意事项说明:
(1)数码管表面不要用手触摸,不要用手去弄引角;
(2)焊接温度:
260度;
焊接时间:
1s
(3)表面有保护膜的产品,可以在使用前撕下来。
3.3电路仿真
在PROTEUS绘制好原理图后,调入已编译好的目标代码文件:
*.HEX,可以在PROTEUS的原理图中看到模拟的实物运行状态和过程。
用PROTUES软件,画出M=99的计数器仿真图,得到的图如下所示
图3-11仿真图
第四章软件设计
程序设计内容
(1.单片机对按键的识别的过程处理
(2.单片机对正确识别的按键进行计数,计数满时,又从零开始计数;
(3.单片机对计的数值要进行数码显示,计得的数是十进数,含有十位和个位,我们要把十位和个位拆开分别送出这样的十位和个位数值到对应的数码管上显示。
如何拆开十位和个位我们可以把所计得的数值对10求余,即可个位数字,对10整除,即可得到十位数字了。
(4.通过查表方式,分别显示出个位和十位数字。
4.1系统软件设计流程图
主程序先是开始,然后赋初值,本设计采用的是动态显示,所以在赋玩初值后显示程序不断被调用。
开始
初始化
计数----(按键)
显示
图4-1主程序流程图
4.2程序
#include<
AT89S52.H>
unsignedcharcodetable[]={0x3f,0x06,0x5b,0x4f,0x66,
0x6d,0x7d,0x07,0x7f,0x6f};
unsignedcharCount;
voiddelay10ms(void)
{
unsignedchari,j;
for(i=20;
i>
0;
i--)
for(j=248;
j>
j--);
}
voidmain(void)
Count=0;
P0=table[Count/10];
P2=table[Count%10];
while
(1)
{
if(P3_7==0)
delay10ms();
Count++;
if(Count==100)
}
while(P3_7==0);
第五章调试及性能分析
5.1系统性能测试与功能说明
走时:
默认为计数状态,显示两位数,时间会按实际时间以秒为最小单位变化,从00—99的计数,按复位键,重00开始,重新计数。
5.2软件调试问题及解决
软件程序的调试一般可以将重点放在分模块调试上,统调是最后一环。
软件调试可以采取离线调试和在线调试两种方式。
前者不需要硬件仿真器,可借助于软件仿真器即可;
后者一般需要仿真系统的支持。
本次课题,keil软件来调试程序,通过各个模块程序的单步或跟踪调试,使程序逐渐趋于正确,最后统调程序。
仿真部分采用protus6professional软件,此软件功能强大且操作较为简单,可以很容易的实现各种系统的仿真。
首先打开protus6professional软件,在元件库中找到要选用的所有元件,然后进行原理图的绘制;
绘制好后再选择wave6000已经编译好的*.hex文件,选择运行,观察显示结果,根据显示的结果和课题的要求再修改程序,再运行查,直到满足要求。
参考文献
[1]《单片机系统设计及工程应用》雷思孝等西安电子科技大学出版社
[2]《电路基础》吴大正西安电子科技大学出版社
[3]《c++程序与设计语言》揣锦华等西安电子科技大学出版社
[4]《MCS—51/96系列单片机原理及应用》孙涵芳北京航空航天大学出版社
计数器程序
实物电路图