零件计数器单片机实践报告.docx
《零件计数器单片机实践报告.docx》由会员分享,可在线阅读,更多相关《零件计数器单片机实践报告.docx(12页珍藏版)》请在冰豆网上搜索。
零件计数器单片机实践报告
河海大学计信学院08通信工程(常)
单片机课程设计报告
课程名称:
零件计数器
学号:
0862310229
姓名:
年级专业:
08通信工程
指导老师:
刘玉宏、刘燕
完成时间:
10.12.8
摘要:
本次单片机课程设计我组选择的题目是零件计数器,零件计数器本身在生产实践中具有很实际的用途,选择这个项目可以绕过我们更好的把课堂上学到的课本知识和理论内容与生产实践结合起来,提高对实际问题的动手操作能力以及解决问题的能力,进一步加深学生对于实际的电子元件电路功能的理解与运用,对于设计实际的实用程序来解决一系列生产生活遇到的问题的能力有着显著的家加强与提高。
零件计数器的功能是通过感应器对零件数量进行中断计数,并由数码管动态显示出来,并通过实用的程序将零件数目通过串口传送给PC机,还能够通过实时的检测电路将之与蜂鸣器连接起来,起到整十报警以及零件打包的功能。
关键字:
计数器,单片机,数码显示,串口通信
目录
1.设计内容
设计要求················································4
2.设计方案
2.1电路框图··············································4
2.2流程框图··············································5
2.3分段原理··············································5
2.4电路功能··············································6
3.计数器主程序
3.1分段程序及功能········································8
3.2问题及解决方案·······································12
4.附录
4.1软件介绍··············································13
4.2心得体会··············································15
4.3参考文献··············································15
1.设计内容
设计内容:
把接在INT0上的单稳信号当作零件信号,单片机计数一次,当计满十次时,蜂鸣器发出一声警告音,并使继电器闭合一次,产生零件打包动作。
要求和提高要求主要掌握外部中断和动态显示的应用,提高实时通过串口把零件数量发送给PC。
2.设计方案
2.1电路框图
电路总图与功能如图所示,每当来一次外部中断时,内部计数一次,并将数值通过4位共阴数码管动态显示出来。
而单片机的P2口可以选择四根不同的数码管来动态显示,通过视觉暂留达到同时显示的效果。
同时内部程序检测每当计数十次时,会形成一个继电器闭合的零件打包动作,并通过程序使得蜂鸣器发出警报。
2.2流程框图
否
是
是
编写零件计数程序时应当注意需要事先的几个功能,可以分段编写,最后通过主程序连接。
这段程序的重点便是一段循环中断计数程序,在数值加1的同时要给串口发出同样的信息,每当计数十次时还需要转到零件打包以及蜂鸣器程序中执行。
2.3分段原理
主程序:
主程序为中断初值设定程序,包括中断计数超出时的清零程序,中断以及时钟的设定,计数初值的计算以及波特率的计算,还有子程序的调用。
延时子程序:
包括两种不同的延时程序,分别是计数时需要的短延时以及蜂鸣器等需要的较长时间延迟。
数码管显示子程序:
包括P2口的数码管选择设定以及计数数值对应的数码管显示数值的设定,通过独特的计算方法将计数总值与四根不同的数码管显示一一对应起来。
外部中断0与串口数据发送子程序:
每来一次中断计数值加1,同时向串口发送一次此时的数值。
串口中断子程序:
串口数据发送的开始和停止程序。
2.4电路功能
2.4.1蜂鸣器及继电器原理
⏹蜂鸣器采用9012三极管驱动,其基极连接到RD端,当RD端为低电平时,三极管导通,蜂鸣器响,否则关断。
⏹继电器采用9013三极管驱动,其基极连接到WR端,当WRD端为低电平时,三极管关断,继电器不吸合,常闭触点闭合,常开触点打开,D1熄灭;反之则反。
2.4.2数码管显示原理
⏹4个并联7段共阴数码管,用于动态显示。
动态显示部分电路由4位一体的数码管LED1、单个数码管LED2和8个独立发光二极管L1-L7组成。
这3个部分都是共阴结构,并联在一起,连接在P0口上。
LED1用于完成LED动态显示实验,各个位选线为P24-P27,段码由P0口输出;LED2的COM端接地,完成LED静态显示实验;L1-L7,可以方便地读出P0输出的二进制数据,亦可做流水灯实验。
7407在此起驱动作用。
3.计数器主程序
3.1分段程序及功能
⏹#include
⏹unsignedinti=0,flag=0;
⏹voiddelay(void)//延时子程序
⏹{
⏹unsignedintj;
⏹for(j=0;j<1000;j++);//
⏹}
⏹voiddelay2(void)//延时子程序
⏹{
⏹unsignedintj;
⏹for(j=0;j<32000;j++);//
⏹}
延时时间的计算:
先将程序转变为汇编语言,通过每一条汇编语言所占据的机器周期时间的总和,便可以算出延时所花费的时间。
voiddisplay(void)//LED动态显示子程序
{
unsignedcharcode
LEDValue[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
//对应数字0——9的共阴数码管显示字符;
P0=LEDValue[i/1000];
P2=0xef;//选择P2^4引脚置零,该引脚对应的数码管显示
delay();
P0=LEDValue[(i/100)%10];
P2=0xdf;//选择P2^5引脚置零,该引脚对应的数码管显示
delay();
P0=LEDValue[(i/10)%10];
P2=0xbf;//原理同上
delay();
P0=LEDValue[i%10];
P2=0x7f;//原理同上
delay();
}//原理:
分时间片循环扫描,利用余辉及视觉暂留实现一组稳定的数据显示
voidcount()interrupt0//外部中断0子程序
{
i++;//计数信号
flag=1;//计数标志置位
SBUF=i;//对串行口发送计数值
}
//计数数值加1,同时将新得到的计数值传送给PC机。
voidsint(void)interrupt4//串行口中断子程序
{
while(!
TI);//等待串行口发送完毕
TI=0;//清除串行口发送结束标志
}
//产生计数信号、计数标志、并将计数值实时发给PC
串行口发送时,第一位是0,结束位是1
voidmain()
{
EA=1;//允许中断
ES=1;//允许串行中断
EX0=1;//允许外部中断0
IT0=1;//中断0为跳变触发
TR1=1;//启动T1定时器
TMOD=0x20;
//定时器T1为工作方式2,初值自动重装八位计数器
TH1=0xfd;//预备单元
TL1=0xfd;//计数初值设定,波特率9600
SCON=0x50;//串行口为方式1,10步异位收发(1+8+1)
PCON=0x00;//波特率不加倍
while
(1)
{
if(i>9999)//超出计数上限后清零
i=0;
if(flag==1&&i%10==0)
//每计数10次后蜂鸣器响一次,且闭合一次继电器
{
RD=0;//蜂鸣器响
WR=1;//继电器闭合
delay2();
RD=1;
WR=0;
flag=0;//计数标志清零
}
display();
}
}
3.2问题及解决方案
1.遇到的问题:
运用指数函数计数以及选择四根数码管显示,导致程序运行速度过慢,灯光闪烁。
改进方法:
改进后去掉指数函数,改用每一根数码管分别使用计算出显示数值的方法。
2.遇到的问题:
计数值达到时蜂鸣器持续响,直到按下第十一次计数按键方才停止。
解决方法:
在蜂鸣器程序中增加flag清零语句,中断中增加flag置位语句,可以让蜂鸣器在计数第十次时只响一声。
4.附录
4.1软件介绍
烧写程序:
(1)打开STC-ISP,如下图界面,在MCUType栏目下选中单片机,如STC89C51。
(2)根据您的9针数据线连接情况选中COM端口,波特率一般保持默认,如果遇到下载问题,可以适当下调一些,按图示选中各项。
(3)先确认硬件连接正确,按如图点击“打开文件”并在对话框内找到您要下载的HEX文件
(4)按下图选中两个条件项,这样可以使您在每次编译KEIL时HEX代码能自动加载到STC-ISP,点击“Download/下载” 。
(5)手动按下电源开关便即可把可执行文件HEX写入到单片机内,如图是正在写入程序截图。
(6)图示程序写入完毕,目标板开始运行程序结果。
串口调试:
1.设置串口参数:
串口号:
1-10;
波特率:
9600
2.接收数据:
点击打开/关闭串口区中的打开串口按钮。
4.2心得体会
通过本次的单片机课程设计,我深刻体会和理解了如何将所学的单片机理论知识和实际生产生活需要结合起来,进行实践运用的方法,极大的锻炼了我的实际动手和根据实际需要设计程序的能力。
通过设计零件计数器,我加深了对于课堂上所学知识的掌握和理解,对于串口通信以及中断程序的掌握更上一个台阶,中间的实践动手过程中通过对遇到的实际问题的思考和解决,极大的提升了我个人的实践水平以及综合素质。
4.3参考文献
1.《AVR单片机应用设计》
作者:
丁化成耿德根李君凯
出版社:
北京航空航天大学出版社
2.《单片机原理与应用设计》
书籍作者:
张毅刚,彭喜元 编著
图书出版社:
电子工业出版社
3.《C51单片机技术教程》
书籍作者:
田希晖,薛亮儒
人民邮电出版社,2007