基于8051单片机的自动计数器.docx
- 文档编号:9747714
- 上传时间:2023-02-06
- 格式:DOCX
- 页数:26
- 大小:1.63MB
基于8051单片机的自动计数器.docx
《基于8051单片机的自动计数器.docx》由会员分享,可在线阅读,更多相关《基于8051单片机的自动计数器.docx(26页珍藏版)》请在冰豆网上搜索。
基于8051单片机的自动计数器
基于8051单片机的自动计数器
一、课题背景
(一)计数器的发展及应用背景
随着计数器技术的不断发展与进步,计数器的种类越来越多,应用的范围越来越广。
现计数器的种类以增加到:
电磁计数器、电子计数器、机械计数器(拉动机械计数器、转动机械计数器、按动机械计数器、测长机械计数器)、液晶计数器等。
计数器的应用范围也遍布印刷、纺织、印染、针织、电缆、电讯、军工、轻工、机械、开关、断路器、矿山、实行多班制的纺织行业的织布机、织带机、制线、制带、造纸、制革、薄膜、高压开关电器产品、试验设备,印刷设备、短路器、医疗、纺织、机械、仓库和码头的货运、行人及车辆过往的数量计数、冶金、食品、国防、包装、配料、石油、化工、发电、机床、仪表、自动化控制等行业。
(二)传感器
“能感受规定的被测量件并按照一定的规律转换成可用信号的器件或装置,通常由敏感元件和转换元件组成”。
传感器是一种检测装置,能感受到被测量的信息,并能将检测感受到的信息,按一定规律变换成为电信号或其他所需形式的信息输出,以满足信息的传输、处理、存储、显示、记录和控制等要求。
它是实现自动检测和自动控制的首要环节,对系统的测控质量起着决定作用。
测控系统的自动化程度越高,对传感器的依赖性越大。
随着21世纪信息化时代的到来,传感器与传感器技术的重要性更为突出。
信息社会的特征是人类社会活动和生产活动的信息化。
现代信息科学的三大支柱是信息的采集、传输与处理技术,即传感器技术、通信技术和计算机技术。
传感器既是现代信息的源头或“感官”,又是信息社会赖以生存和发展的物质和技术基础。
传感器与传感器技术正日益广泛地应用于航空航天、资源勘探、石油化工、交通通信、灾害预报、安全防卫、环境保护、医疗卫生和日常生活等各个领域,从而促进现代科学技术的迅速发展。
随着科学技术的发展,现在已经出现了如下的传感器:
电阻应变式、电感式、电容式、压电式、热电式、光电式、数字式、磁敏、光纤、气敏、湿敏传感器等。
本次课程设计采用的传感器是光纤传感器。
本实验采用的是本实验采用的是导光型多模光纤,它由两束光纤组成半圆分布的Y型传感器探头,一束光纤端部与光源相接来传递发射光,另一束端部与光电转换器相接来传递接收光,两光纤束混合后的端部是工作端亦即探头,当它与被测体相距X时,由光源发出的光通过一束光纤射出后,经被测体反射由另一束光纤接收,通过光电转换器转换成电压,该电压的大小与间距X有关,因此可以用于测量位移。
利用光纤位移传感器在被测物体的反射光强弱明显变化时所产生的相应的信号,经电路处理转换成相应的脉冲信号即可测量转速和进行计数。
反射型光纤位移传感器的原理图和输出电压与位移之间的关系:
(三)数字单片机的技术发展
1、内部结构的变化
单片机在内部已集成了越来越多的部件,这些部件包括一般常用的电路,例如:
定时器,比较器,A/D转换器,D/A转换器,串行通信接口,Watchdog电路,LCD控制器等功能器件,使它的功能越来越强大和应用范围越来越广泛。
现在有的单片机已采用所谓的三核(TrCore)结构。
这是一种建立在系统级芯片(Systemonachip)概念上的结构。
这种单片机由三个核组成:
一个是微控制器和DSP核,一个是数据和程序存储器核,最后一个是外围专用集成电路(ASIC)。
这种单片机的最大特点在于把DSP和微控制器同时做在一个片上。
把它和传统单片机结合集成大大提高了单片机的功能。
这是目前单片机最大的进步之一。
2、功耗、封装及电源电压的发展
现在新的单片机的功耗越来越小,特别是很多单片机都设置了多种工作方式,这些工作方式包括等待,暂停,睡眠,空闲,节电等工作方式。
现在单片机的封装水平已大大提高,随着贴片工艺的出现,单片机也大量采用了各种合符贴片工艺的封装方式出现,以大量减少体积。
扩大电源电压范围以及在较低电压下仍然能工作是今天单片机发展的目标之一。
目前,一般单片机都可以在3.3~5.5V的条件下工作。
而一些厂家,则生产出可以在2.2~6V的条件下工作的单片机。
3、工艺上的发展
现在的单片机基本上采用CMOS技术,但已经大多数采用了0.6?
m以上的光刻工艺,有个别的公司,如Motorola公司则已采用0.35?
m甚至是0.25?
m技术。
这些技术的进步大大地提高了单片机的内部密度和可靠性。
单片机的另外一个名称就是嵌入式微控制器。
目前,把单片机嵌入式系统和Internet连接已是一种趋势。
要实现嵌入式设备和Internet连接,就需要把传统的Internet理论和嵌入式设备的实践都颠倒过来。
为了使复杂的或简单的嵌入式设备,例如单片机控制的机床、单片机控制的门锁,能切实可行地和Internet连接,就要求专门为嵌入式微控制器设备设计网络服务器,使嵌入式设备可以和Internet相连,并通过标准网络浏览器进行过程控制。
二、课题的发展趋势
自单片机出现至今,单片机技术已走过了近20年的发展路程。
纵观20年来单片机发展历程可以看出,单片机技术的发展以微处理器(MPU)技术及超大规模集成电路技术的发展为先导,以广泛的应用领域为动力,表现出较微处理器更具个性的发展趋势。
单片机的应用在后PC时代得到了前所未有的发展,但对处理器的综合性能要求也越来越高。
综观单片机的发展,以应用需求为目标,市场越来越细化,充分突出以“单片”解决问题,而不像多年前以MCS51/96等处理器为中心,外扩各种接口构成各种应用系统。
单片机系统作为嵌入式系统的一部分,主要集中在中、低端应用领域(嵌入式高端应用主要由DSP、ARM、MIPS等高性能处理器构成),在这些应用中,目前也出现了一些新的需求,主要体现在以下几个方面:
(一)以电池供电的应用越来越多,而且由于产品体积的限制,很多是用钮扣电池供电,要求系统功耗尽可能低,如手持式仪表、水表、玩具等。
(二)随着应用的复杂,对处理器的功能和性能要求不断提高。
既要外设丰富、功能灵活,又要有一定的运算能力,能做一些实时算法,而不仅仅做一些简单的控制。
(三)产品更新速度快,开发时间短,希望开发工具简单、廉价、功能完善。
特别是仿真工具要有延续性,能适应多种MCU,以免重复投资,增加开发费用。
(四)产品性能稳定,可靠性高,既能加密保护,又能方便升级。
三、课程设计研究的要求及主要内容应解决的问题
要求:
(一)利用光纤传感器采集信号。
(二)对采集的信号进行放大整形,产生脉冲信号。
(三)利用单片机对脉冲信号进行计数,最终通过LCD显示屏显示出来。
(四)整个系统有较强的抗干扰能力。
设计方案需要解决的问题:
基于单片机构成的自动计数器需要解决的主要内容包括:
传感器的安装,如何设计采集信号的放大电路,MCS-51单片机用何种方式对外部计数脉冲进行计数,如何控制LCD显示屏显示最终的计数结果等。
四、整体设计方案
(一)设计方案选择
方案一:
采用多种数字逻辑电路来实现逻辑控制、主门、门控、计数单元的设计要求,这样设计的电路整体比较复杂,而且不宜完成发挥部分的功能要求。
所以方案一不采用。
方案二:
可以采用FPGA来实现逻辑控制、主门、门控、计数单元的设计要求,并且设计方便,但由于对FPGA的技术原理掌握不够熟练,所以放弃方案二。
方案三:
系统采用8051为核心的单片机控制系统,可以实现原理图中的逻辑控制、主门、门控、计数以及显示的设计要求,故采用方案三。
(二)设计框图
(三)总体设计原理的概述
采用光纤传感器采集需要被计数物体的信号(主要是将物理信号转换为电压信号),每当一个计数物体通过光纤传感器,则光纤传感器的输出端输出一个不太规则的脉冲信号,该信号输入到放大器(UA741)中,经过10左右的放大输出,将放大的信号输入到整形电路(555)进行整形,使它输出标准的矩形脉冲,将矩形脉冲通过8051单片机的14(T0)引脚输入到单片机中,通过单片机的处理、计数以及控制最终通过LCD1602的显示屏把计数结果显示出来。
(四)硬件电路原理图(protel99se截图)
复位电路的硬件设计:
振荡电路的硬件设计:
振荡电路的振荡频率为12MHZ
(五)原理图完成之后的电气规则检测(protel99se截图)
电气规则检测之后生成的网络表
[C1RAD0.10.1uf]
[C2RAD0.11uf]
[C3RAD0.11uf]
[C4RAD0.122uf]
[D1DIODE0.41N45]
[D2DIODE0.41N45]
[D3DIODE0.41N34]
[D4XTAL104-07-01]
[R0VR4100K]
[R1AXIAL0.39.1K]
[R2AXIAL0.310K]
[R3AXIAL0.3100K]
[R4AXIAL0.310K]
[R5AXIAL0.31k]
[U1DIP-8741]
[U2DIP-8555]
[U3DIP408051]
[U4SIP16Component_1]
[V0POLAR1.2VSIN]
[V1POLAR1.2+12V]
[V2POLAR1.2-12V]
(+5C4-2U2-4U2-8U3-31U4-0U4-14)
(GNDC1-2C3-2D4-2R2-1R4-2R5-1U2-1U3-20U4-1U4-2U4-15V0-2V1-2V2-1)
(NetC1_1C1-1U2-5)
(NetC2_2C2-2D4-1)
(NetD1_1D1-1V1-1)
(NetD2_2D2-2V2-2)
(NetD3_2D3-2R4-1U2-2U2-6)
(NetR1_2R1-2U1-3)
(NetR2_2R2-2R3-1U1-2)
(NetU1_1R0-1U1-1)
(NetU1_4D2-1R0-3U1-4)
(NetU1_5R0-2U1-5)
(NetU1_6D3-1R3-2-6)
(NetU1_7D1-2U1-7)
(NetU2_3U2-3U3-14)
NetU3_1U3-1U4-6)(NetU3_2U3-2U4-7)
(NetU3_3U3-3U4-8)
(NetU3_4U3-4U4-9)
(NetU3_5U3-5U4-10)
(NetU3_6U3-6U4-11)
(NetU3_7U3-7U4-12)
(NetU3_8U3-8U4-13)
(NetU3_9C4-1-2U3-9)
(NetU3_15U3-15U4-4)
(NetU3_16U3-16U4-5)
(NetU3_17U3-17-3)
(NetU3_18C2-1U3-18)
(NetU3_19C3-1U3-19)
(NetV0_1R1-1V0-1)
VCC
U3-40
画PCB板之前加载网络表(protel99se截图)
(六)PCB板(protel99se截图)
五、仿真过程
(一)模拟采集信号仿真输入设置:
(二)信号放大输出仿真:
(三)信号整形输出仿真:
(四)计数结果仿真:
六、重要元器件的介绍
(一)UA741集成运算放大器:
1和5为偏置(调零端),2为正向输入端,3为反向输入端,4接地,6为输出,7接电源8空脚
(二)555定时器:
555定时器是一种模拟和数字功能相结合的中规模集成器件。
一般用双极性工艺制作的称为555,用CMOS工艺制作的称为7555,除单定时器外,还有对应的双定时器556/7556。
555定时器的电源电压范围宽,可在4.5V~16V工作,7555可在3~18V工作,输出驱动电流约为200mA,因而其输出可与TTL、CMOS或者模拟电路电平兼容。
它的各个引脚功能如下:
1脚:
外接电源负端VSS或接地,一般情况下接地。
8脚:
外接电源VCC,双极型时基电路VCC的范围是4.5~16V,CMOS型时基电路VCC的范围为3~18V。
一般用5V。
3脚:
输出端Vo 2脚:
低触发端 6脚:
TH高触发端
4脚:
是直接清零端。
当此端接低电平,则时基电路不工作,此时不论TR、TH处于何电平,时基电路输出为“0”,该端不用时应接高电平。
5脚:
VC为控制电压端。
若此端外接电压,则可改变内部两个比较器的基准电压,当该端不用时,应将该端串入一只0.01μF电容接地,以防引入干扰。
7脚:
放电端。
该端与放电管集电极相连,用做定时器时电容的放电。
(三)单片机8051的介绍:
8051单片机包含中央处理器、程序存储器(ROM)、数据存储器(RAM)、定时/计数器、并行接口、串行接口和中断系统等几大单元及数据总线、地址总线和控制总线等三大总线,现在我们分别加以说明:
1、中央处理器:
中央处理器(CPU)是整个单片机的核心部件,是8位数据宽度的处理器,能处理8位二进制数据或代码,CPU负责控制、指挥和调度整个单元系统协调的工作,完成运算和控制输入输出功能等操作。
2、数据存储器(RAM):
8051内部有128个8位用户数据存储单元和128个专用寄存器单元,它们是统一编址的,专用寄存器只能用于存放控制指令数据,用户只能访问,而不能用于存放用户数据,所以,用户能使用的RAM只有128个,可存放读写的数据,运算的中间结果或用户定义的字型表。
3、程序存储器(ROM):
8051共有4096个8位掩膜ROM,用于存放用户程序,原始数据或表格。
4、定时/计数器(ROM):
8051有两个16位的可编程定时/计数器,以实现定时或计数产生中断用于控制程序转向。
5、并行输入输出(I/O)口:
8051共有4组8位I/O口(P0、P1、P2或P3),用于对外部数据的传输。
6、全双工串行口:
8051内置一个全双工串行通信口,用于与其它设备间的串行数据传送,该串行口既可以用作异步通信收发器,也可以当同步移位器使用。
7、中断系统:
8051具备较完善的中断功能,有两个外中断、两个定时/计数器中断和一个串行中断,可满足不同的控制要求,并具有2级的优先级别选择。
8、时钟电路:
8051内置最高频率达12MHz的时钟电路,用于产生整个单片机运行的脉冲时序,但8051单片机需外置振荡电容。
(四)单片机的40个引脚大致可分为4类:
电源、时钟、控制和I/O引脚。
1、电源:
⑴VCC-芯片电源,接+5V;
⑵VSS-接地端;
2、时钟:
XTAL1、XTAL2-晶体振荡电路反相输入端和输出端。
3、控制线:
控制线共有4根,
(1)ALE/PROG:
地址锁存允许/片内EPROM编程脉冲
(2)ALE功能:
用来锁存P0口送出的低8位地址
(3)PROG功能:
片内有EPROM的芯片,在EPROM编程期间,此引脚输入编程脉冲。
(4)PSEN:
外ROM读选通信号。
(5)RST/VPD:
复位/备用电源。
(6)RST(Reset)功能:
复位信号输入端。
(7)VPD功能:
在Vcc掉电情况下,接备用电源。
(8)EA/Vpp:
内外ROM选择/片内EPROM编程电源。
(9)EA功能:
内外ROM选择端。
(10)Vpp功能:
片内有EPROM的芯片,在EPROM编程期间,施加编程电源Vpp。
4、I/O线
80C51共有4个8位并行I/O端口:
P0、P1、P2、P3口,共32个引脚。
P3口还具有第二功能,用于特殊信号输入输出和控制信号(属控制总线)
七、系统软件设计
主程序先是开始,然后赋初值,本设计采用的是动态显示,所以在赋玩初值后显示程序不断被调用。
(一)主程序流程图
(二)C语言源程序
#include
#defineucharunsignedchar
#defineuintunsignedint
unsignedcharcounter;//定义一个变量用来计数
uchari;
sbitlcdrs=P3^5;
sbitlcdrw=P3^6;
sbitlcden=P3^7;
ucharcodet0[]="thejishuzhi";
ucharcodet1[]="is";
ucharcodewenduxianshi[]="0123456789";
//利用一个温度表解决温度显示乱码相当于一字符串
sbitDQ=P3^1;//定义脉冲输入端口
//液晶显示模块
voiddelay(uintz)
{
uintx,y;//两个参数
for(x=90;x>1;x--)
for(y=z;y>1;y--);
}
voidwrite_com(ucharcom)
{
lcdrs=0;//判断模块忙与否
P2=com;
delay(5);
lcden=1;//此处判断为忙,所以延时以等待模块不忙的状态
delay(5);
lcden=0;
}
voidwrite_date(uchardate)
{
lcdrs=1;
P2=date;
delay(5);
lcden=1;
delay(5);
lcden=0;
}
voidinit_lcd()
{
lcden=0;
lcdrw=0;
write_com(0x38);//不检测忙信号
write_com(0x01);//显示清屏
write_com(0x06);//显示光标移动设置
write_com(0x0c);//显示开光标设置
write_com(0x80+0x01);//第一行的显示位置
for(i=0;i<16;i++)
{
write_date(t0[i]);
delay(0);
}
write_com(0x80+0x41);//第二行的显示位置
for(i=0;i<16;i++)//每行16字
{
write_date(t1[i]);
delay(0);
}
}
//计数脉冲采集模块
voidtmpDelay(intnum)//延时函数
{
while(num--);
}
/*****************************************************************************
*/
voidInit_DS18B20()//初始化脉冲输入端口
{
unsignedcharx=0;
DQ=1;//DQ复位
tmpDelay(6);//稍做延时
DQ=0;//单片机将DQ拉低
tmpDelay(80);//精确延时大于480us
DQ=1;//拉高总线
tmpDelay(14);//延时等待
x=DQ;//稍做延时后如果x=0则初始化成功x=1则初始化失败
tmpDelay(20);//此处延时是为了防止DS18B20判断进入死循环
}
unsignedcharReadOneChar()//读一个字节
{
unsignedchari=0;
unsignedchardat=0;
for(i=8;i>0;i--)
{
DQ=0;//给脉冲信号
dat>>=1;//右移一位
DQ=1;//给脉冲信号
if(DQ)
dat|=0x80;//设置显示位置?
tmpDelay(4);
}
return(dat);
}
voidWriteOneChar(unsignedchardat)//写一个字节
{
unsignedchari=0;
for(i=8;i>0;i--)
{
DQ=0;
DQ=dat&0x01;
tmpDelay(5);
DQ=1;
dat>>=1;
}
}
voidjishu(void)
{
counter=0;//初始化counter为0
TMOD|=0x06;//将T0设置为8位自动重装模式
TH0=0xFF;//初始化TH0=0xFF
TLO=0xFF;//初始化TLO=0xFF
EA=1;//开CPU中断
ET0=1;//开T0中断
TR0=1;//T0开始计数
while
(1)//无限循环
{
p1=counter;//在P1端口显示数据
}
}
voidisr_t0(void)interrup0
{
counter++;
}
voidisr_t0(void)interrupt0T0的中断服务函数
{
TH0=0xFF;
TLO=0xFF;
counter++;
if(counter==200)
{p1=!
p1;
}
}
voiddisplay()
{
unsignedintnum,num1;//定义的时候用uchar宏定义就会出错
unsignedintshi,ge,xiaoshu;//这里的num,shi,ge,xiaoshu
必须用unsignedint无符号整数来表示,用unshignedchar字符型则显示错误
num=Readtemp();//将读得的值赋给NUM
num1=num/10;//缩小十倍
if(num1>40)
{d1=0;d2=1;delay(500);}
if(num1<15)
{d1=1;d2=0;delay(500);}
else
{d1=1;d2=1;}
shi=num/100;
ge=num/10%10;
xiaoshu=num%10;
write_com(0x80+0x40+6);
write_date(wenduxianshi[shi]);
write_com(0x80+0x40+7);
write_date(wenduxianshi[ge]);
write_com(0x80+0x40+8);
write_date(0x2e);
write_com(0x80+0x40+9);
write_date(wenduxianshi[xiaoshu]);
}
voidmain()
{
init_lcd();
while
(1)
{
display();
delay(10);
}
}
八、结论
这次课程设计让我受益匪浅。
通过这次设计我对自己在大学三年时间里所学的知识得到了全面的回顾,并充分发挥对所学知识的理解和对课程设计的思考及书面表达能力,最终完成了这份报告。
撰写报告的过程也是专业知识的学习过程,它使我运用已有的专业基础知识,对其进行设计,分析和解决一个理论问题或实际问题,把知识转化为能力的实际训练。
培养了我运用所学知识解决实际问题的能力。
通过这次课程设计我发现,只有理论水平提高了,才能够
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 8051 单片机 自动 计数器