基于51单片机的传送带产品计数器设计LED显示备课讲稿文档格式.docx

上传人:b****6 文档编号:19315659 上传时间:2023-01-05 格式:DOCX 页数:9 大小:378KB
下载 相关 举报
基于51单片机的传送带产品计数器设计LED显示备课讲稿文档格式.docx_第1页
第1页 / 共9页
基于51单片机的传送带产品计数器设计LED显示备课讲稿文档格式.docx_第2页
第2页 / 共9页
基于51单片机的传送带产品计数器设计LED显示备课讲稿文档格式.docx_第3页
第3页 / 共9页
基于51单片机的传送带产品计数器设计LED显示备课讲稿文档格式.docx_第4页
第4页 / 共9页
基于51单片机的传送带产品计数器设计LED显示备课讲稿文档格式.docx_第5页
第5页 / 共9页
点击查看更多>>
下载资源
资源描述

基于51单片机的传送带产品计数器设计LED显示备课讲稿文档格式.docx

《基于51单片机的传送带产品计数器设计LED显示备课讲稿文档格式.docx》由会员分享,可在线阅读,更多相关《基于51单片机的传送带产品计数器设计LED显示备课讲稿文档格式.docx(9页珍藏版)》请在冰豆网上搜索。

基于51单片机的传送带产品计数器设计LED显示备课讲稿文档格式.docx

用MCS-51系列单片机作为控制器;

采用4位LED进行计数显示;

采用光电传感器计数;

用按键控制传送带电机的起停;

用拨码盘预置计数值,计数到预定值时,传送带停止,按键后传送带继续运行。

2电路原理图的设计

2.1传送带产品计数器(LED显示)电路原理图

硬件原理图如下图所示,包括显示模块,按键模块,电机控制模块,置数模块。

2.2LED显示模块

使用4位LED数码管来显示数字,通过NPN管来驱动数码管。

2.3置数模块

使用8位薄码盘和5位薄码盘组合来组成最高13位的二进制数,即8191的最大置数值,很好的利用了4位数码管。

2.4按键模块

每个按键各接一根输入线,一根输入线上的按键工作状态不会影响其他输入线上的工作状态。

软件设计采用查询方式和外部中断相结合的方法来设计,低电平有效。

按键直接与89c51的I/O口线相连接,通过读I/O口的电平状态,即可识别出按下的按键。

电路原理如图

2.5电机控制模块

利用光电耦合器和直流继电器来控制电机,其中二极管是用来保护三极管,而电容是用来减少火花的影响。

如下图所示。

3软件系统设计

3.1软件系统的流程结构

3.2C51程序

#include<

reg51.h>

#defineucharunsignedchar

#defineuintunsignedint

sbitSTAR_KEY=P3^6;

//定义键与单片机的连接引脚

sbitSTOP_KEY=P3^7;

sbitL0=P1^0;

//定义SFR中引脚的位

sbitL1=P1^1;

sbitL2=P1^2;

sbitL3=P1^3;

sbitL4=P1^4;

sbitL5=P1^5;

sbitL6=P1^6;

sbitL7=P1^7;

sbitL8=P2^0;

sbitL9=P2^1;

sbitL10=P2^2;

sbitL11=P2^3;

sbitL12=P2^4;

sbitLED4=P2^5;

//定义四位数码管的千位

sbitLED3=P2^6;

sbitLED2=P2^7;

sbitLED1=P3^0;

sbitMOTOR=P3^5;

ucharn[2]={1,0};

ucharcode

dispcode[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff};

voiddelayms(uintx)//延时子程序

{

uchary;

while(x--)

{

for(y=0;

y<

123;

y++){;

}

}

ucharKeynum()//按键子程序1

ucharkey=0;

STAR_KEY=1;

STOP_KEY=1;

//置初值

if(STAR_KEY==0){delayms(10);

if(STAR_KEY==0)n[0]=0;

n[1]=1;

}//按下STAR键则n[0]=0;

n[1]=1

if(STOP_KEY==0){delayms(10);

if(STOP_KEY==0)n[0]=1;

n[1]=0;

}//按下STOP键则n[0]=1;

returnn[2];

//返回n值

voidxianshi(uinto)//显示子程序

P0=0xff;

P0=dispcode[o/1000];

LED4=1;

LED3=0;

LED2=0;

LED1=0;

delayms(5);

P0=dispcode[(o/100)%10];

LED4=0;

LED3=1;

P0=dispcode[(o/10)%10];

LED2=1;

P0=dispcode[o%10];

LED1=1;

uintqiuzhi()//求用拨码盘所置数的值的子程序

uchara;

ucharb;

ucharc;

uchard;

uchare;

ucharf;

ucharg;

ucharh;

uchari;

ucharj;

uchark;

ucharl;

ucharm;

uintp=0;

if(L0==1){a=1;

}else{a=0;

}//将电平信号变为数字的值

if(L1==1){b=1;

}else{b=0;

if(L2==1){c=1;

}else{c=0;

if(L3==1){d=1;

}else{d=0;

if(L4==1){e=1;

}else{e=0;

if(L5==1){f=1;

}else{f=0;

if(L6==1){g=1;

}else{g=0;

if(L7==1){h=1;

}else{h=0;

if(L8==1){i=1;

}else{i=0;

if(L9==1){j=1;

}else{j=0;

if(L10==1){k=1;

}else{k=0;

if(L11==1){l=1;

}else{l=0;

if(L12==1){m=1;

}else{m=0;

p=a+b*2+c*2*2+d*2*2*2+e*2*2*2*2+f*2*2*2*2*2+g*2*2*2*2*2*2+h*2*2*2*2*2*2*2+i*2*2*2*2*2*2*2*2+j*2*2*2*2*2*2*2*2*2+k*2*2*2*2*2*2*2*2*2*2+l*2*2*2*2*2*2*2*2*2*2*2+m*2*2*2*2*2*2*2*2*2*2*2*2;

returnp;

//返回所求的P值

voidmain(void)//主程序

uintq;

IT0=1;

//负跳变触发

EA=1;

//开总允许中断

EX0=1;

//开INTO中断

TMOD=0X05;

//置T0为计数器方式1

TL0=0x00;

//置计数器初值

TH0=0x00;

while

(1)//无限循环

{

q=qiuzhi();

//调用求值子程序求出所置的数

if(MOTOR==1){xianshi(q);

}else{xianshi(TL0);

Keynum();

TR0=n[1];

}//当电动机关闭时显示用薄码盘所置的数并停止计数,电机启动时则开始计数,并显示计数值

if(TL0==q){TR0=0;

MOTOR=1;

}else{Keynum();

MOTOR=n[0];

}//当计数值与所置数相同时关闭电机,停止计数,当计数值不等时则将电机启动与关闭交由按键控制,所以不存在计数值超过置数值的情况

}

voidInt0(void)interrupt0//中断服务程序,工作寄存器用0组

TR0=1;

//重置计数值,重新开始计数

4仿真及调试

仿真原理图如上图。

当需要置数时,通过薄码盘拨动,8位薄码盘控制二进制数的低八位,5位薄码盘控制高8位。

启动后,LED数码管会显示所置的数,按下开始键STAR,电动机开始运转,4位LED数码管显示0,然后按动计数键COUNT,按一下数码管显示数加1,直到所显示的数与当前所置的数相等时关闭电机和停止计数。

而后可以按下RST键,所记的数清零并重新开始计数,此时可又通过按下计数键COUNT来计数。

在这个过程中,可以按下STOP键来关闭电机,同时也停止了计数,再按下开始键STAR,则再继续接着刚停止时的数来开始计数。

满足了设计题目的所有要求。

5总论

参考文献

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 表格模板 > 合同协议

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1