基于51单片机的传送带产品计数器设计(LED显示)
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
{
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];}//当计数值与所置数相同时关闭电机,停止计数,当计数值不等时则将电机启动与关闭交由按键控制,所以不存在计数值超过置数值的情况
1.题目……………………………………………………………………………………………………1
2.电路原理图的设计……………………………………………………………………………………1
2.1传送带产品计数器(LED显示)电路原理图…………………………………………………1
2.2 LED显示模块……………………………………………………………………………………1
return p; // 返回所求的P值
}
void main(void)//主程序
{
uint q;
IT0=1;//负跳变触发
EA=1;//开总允许中断
EX0=1;//开INTO中断
TMOD=0X05;//置T0为计数器方式1
TL0=0x00;//置计数器初值
TH0=0x00;
while(1)//无限循环
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);
3.2 C51程序…………………………………………………………………………………………4
4.仿真即调试………………………………………………………………………………………………8
5.总论………………………………………………………………………………………………………8
参考文献……………………………………………………………………………………………………9
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;
1
设计题目传送带产品计数器的设计(LED显示)
功能要求:
用MCS-51系列单片机作为控制器;采用4位LED进行计数显示;采用光电传感器计数;用按键控制传送带电机的起停;用拨码盘预置计数值,计数到预定值时,传送带停止,按键后传送带继续运行。
2
硬件原理图如下图所示,包括显示模块,按键模块,电机控制模块,置数模块。
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;}
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};
5
参
2.2LED显示模块
使用4位LED数码管来显示数字,通过NPN管来驱动数码管。
2.3置数模块
使用8位薄码盘和5位薄码盘组合来组成最高13位的二进制数,即8191的最大置数值,很好的利用了4位数码管。
2.4
每个按键各接一根输入线,一根输入线上的按键工作状态不会影响其他输入线上的工作状态。软件设计采用查询方式和外部中断相结合的方法来设计,低电平有效。按键直接与89c51的I/O口线相连接,通过读I/O口的电平状态,即可识别出按下的按键。电路原理如图
}
}
void Int0(void) interrupt 0//中断服务程序,工作寄存器用0组
{
TL0=0x00;TR0=1;//重置计数值,重新开始计数
}
4
仿真原理图如上图。
当需要置数时,通过薄码盘拨动,8位薄码盘控制二进制数的低八位,5位薄码盘控制高8位。启动后,LED数码管会显示所置的数,按下开始键STAR,电动机开始运转,4位LED数码管显示0,然后按动计数键COUNT,按一下数码管显示数加1,直到所显示的数与当前所置的数相等时关闭电机和停止计数。而后可以按下RST键,所记的数清零并重新开始计数,此时可又通过按下计数键COUNT来计数。在这个过程中,可以按下STOP键来关闭电机,同时也停止了计数,再按下开始键STAR,则再继续接着刚停止时的数来开始计数。满足了设计题目的所有要求。
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;
2.3 置数模块…………………………………………………………………………………………2
2.4 按键模块…………………………………………………………………………………………3
2.5电机控制模块……………………………………………………………………………………3
3.软件系统设计
3.1软件系统的流程结构……………………………………………………………………………4
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
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;
uபைடு நூலகம்har l;
uchar m;
uint p=0;
if (L0==1) {a=1;} else {a=0;}//将电平信号变为数字的值
2.5 电机控制模块
利用光电耦合器和直流继电器来控制电机,其中二极管是用来保护三极管,而电容是用来减少火花的影响。如下图所示。
3
3.1
3
#include<reg51.h>
#define uchar unsigned char
#define uint unsigned int
sbit STAR_KEY =P3^6;//定义键与单片机的连接引脚
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;}
{
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;
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];}//当计数值与所置数相同时关闭电机,停止计数,当计数值不等时则将电机启动与关闭交由按键控制,所以不存在计数值超过置数值的情况
1.题目……………………………………………………………………………………………………1
2.电路原理图的设计……………………………………………………………………………………1
2.1传送带产品计数器(LED显示)电路原理图…………………………………………………1
2.2 LED显示模块……………………………………………………………………………………1
return p; // 返回所求的P值
}
void main(void)//主程序
{
uint q;
IT0=1;//负跳变触发
EA=1;//开总允许中断
EX0=1;//开INTO中断
TMOD=0X05;//置T0为计数器方式1
TL0=0x00;//置计数器初值
TH0=0x00;
while(1)//无限循环
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);
3.2 C51程序…………………………………………………………………………………………4
4.仿真即调试………………………………………………………………………………………………8
5.总论………………………………………………………………………………………………………8
参考文献……………………………………………………………………………………………………9
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;
1
设计题目传送带产品计数器的设计(LED显示)
功能要求:
用MCS-51系列单片机作为控制器;采用4位LED进行计数显示;采用光电传感器计数;用按键控制传送带电机的起停;用拨码盘预置计数值,计数到预定值时,传送带停止,按键后传送带继续运行。
2
硬件原理图如下图所示,包括显示模块,按键模块,电机控制模块,置数模块。
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;}
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};
5
参
2.2LED显示模块
使用4位LED数码管来显示数字,通过NPN管来驱动数码管。
2.3置数模块
使用8位薄码盘和5位薄码盘组合来组成最高13位的二进制数,即8191的最大置数值,很好的利用了4位数码管。
2.4
每个按键各接一根输入线,一根输入线上的按键工作状态不会影响其他输入线上的工作状态。软件设计采用查询方式和外部中断相结合的方法来设计,低电平有效。按键直接与89c51的I/O口线相连接,通过读I/O口的电平状态,即可识别出按下的按键。电路原理如图
}
}
void Int0(void) interrupt 0//中断服务程序,工作寄存器用0组
{
TL0=0x00;TR0=1;//重置计数值,重新开始计数
}
4
仿真原理图如上图。
当需要置数时,通过薄码盘拨动,8位薄码盘控制二进制数的低八位,5位薄码盘控制高8位。启动后,LED数码管会显示所置的数,按下开始键STAR,电动机开始运转,4位LED数码管显示0,然后按动计数键COUNT,按一下数码管显示数加1,直到所显示的数与当前所置的数相等时关闭电机和停止计数。而后可以按下RST键,所记的数清零并重新开始计数,此时可又通过按下计数键COUNT来计数。在这个过程中,可以按下STOP键来关闭电机,同时也停止了计数,再按下开始键STAR,则再继续接着刚停止时的数来开始计数。满足了设计题目的所有要求。
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;
2.3 置数模块…………………………………………………………………………………………2
2.4 按键模块…………………………………………………………………………………………3
2.5电机控制模块……………………………………………………………………………………3
3.软件系统设计
3.1软件系统的流程结构……………………………………………………………………………4
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
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;
uபைடு நூலகம்har l;
uchar m;
uint p=0;
if (L0==1) {a=1;} else {a=0;}//将电平信号变为数字的值
2.5 电机控制模块
利用光电耦合器和直流继电器来控制电机,其中二极管是用来保护三极管,而电容是用来减少火花的影响。如下图所示。
3
3.1
3
#include<reg51.h>
#define uchar unsigned char
#define uint unsigned int
sbit STAR_KEY =P3^6;//定义键与单片机的连接引脚
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;}
{
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;