基于51单片机的传送带产品计数器设计(LED显示)备课讲稿

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

基于51单片机的传送带产品计数器设计(L E D显示)

目录

1.题目 (1)

2.电路原理图的设计 (1)

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

2.2 LED显示模块 (1)

2.3 置数模块 (2)

2.4 按键模块 (3)

2.5 电机控制模块 (3)

3.软件系统设计

3.1 软件系统的流程结构 (4)

3.2 C51程序 (4)

4.仿真即调试 (8)

5.总论 (8)

参考文献 (9)

1题目

设计题目传送带产品计数器的设计(LED显示)

功能要求:

用MCS-51系列单片机作为控制器;采用4位LED进行计数显示;采用光电传感器计数;用按键控制传送带电机的起停;用拨码盘预置计数值,计数到预定值时,传送带停止,按键后传送带继续运行。

2 电路原理图的设计

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

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

2.2 LED显示模块

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

2.3 置数模块

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

2.4 按键模块

每个按键各接一根输入线,一根输入线上的按键工作状态不会影响其他输入线上的工作状态。软件设计采用查询方式和外部中断相结合的方法来设计,低电平有效。按键直接与89c51的I/O口线相连接,通过读I/O口的电平状态,即可识别出按下的按键。电路原理如图

2.5 电机控制模块

利用光电耦合器和直流继电器来控制电机,其中二极管是用来保护三极管,而电

容是用来减少火花的影响。如下图所示。

3软件系统设计

3.1 软件系统的流程结构

3.2 C51程序

#include

#define uchar unsigned char

#define uint unsigned int

sbit STAR_KEY =P3^6;//定义键与单片机的连接引脚sbit STOP_KEY =P3^7;

sbit L0=P1^0; //定义SFR中引脚的位

sbit L1=P1^1;

sbit L2=P1^2;

sbit L3=P1^3;

sbit L4=P1^4;

sbit L5=P1^5;

sbit L6=P1^6;

sbit L7=P1^7;

sbit L8=P2^0;

sbit L9=P2^1;

sbit L10=P2^2;

sbit L11=P2^3;

sbit L12=P2^4;

sbit LED4=P2^5; //定义四位数码管的千位

sbit LED3=P2^6;

sbit LED2=P2^7;

sbit LED1=P3^0;

sbit MOTOR=P3^5;

uchar n[2]={1,0};

uchar code

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

void delayms(uint x) //延时子程序

{

uchar y;

while(x--)

{

for(y=0;y<123;y++){;}

}

}

uchar Keynum() //按键子程序1

{

uchar key=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;n[1]=0;

return n[2]; //返回n值

}

void xianshi(uint o) //显示子程序

{

P0=0xff;

P0=dispcode[o/1000];LED4=1;LED3=0;LED2=0;LED1=0;delayms(5);

P0=0xff;

P0=dispcode[(o/100)%10];LED4=0;LED3=1;LED2=0;LED1=0;delayms(5);

P0=0xff;

P0=dispcode[(o/10)%10];LED4=0;LED3=0;LED2=1;LED1=0;delayms(5);

P0=0xff;

P0=dispcode[o%10];LED4=0;LED3=0;LED2=0;LED1=1;delayms(5);

}

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

{

uchar a;

uchar b;

uchar c;

uchar d;

uchar e;

uchar f;

uchar g;

uchar h;

uchar i;

uchar j;

uchar k;

uchar l;

uchar m;

uint p=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

相关文档
最新文档