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

2019-01-12 10:53

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;

4

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)];LED4=0;LED3=1;LED2=0;LED1=0;delayms(5);

5

P0=0xff;

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

P0=dispcode[o];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*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;

return p; // 返回所求的P值

6

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

}

void main(void) //主程序 {

uint q; IT0=1; EA=1;

EX0=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];} //当计数值与所置数相同时关闭电机,停止计数,当计数值不等时则将电机启动与关闭交由按键控制,所以不存在计数值超过置数值的情况

} }

void Int0(void) interrupt 0 {

TL0=0x00;TR0=1; }

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

//中断服务程序,工作寄存器用0组

//无限循环

//负跳变触发 //开总允许中断 //开INTO中断

//置T0为计数器方式1 //置计数器初值

TMOD=0X05;

7

PAS5001-N

4 仿真及调试

仿真原理图如上图。

当需要置数时,通过薄码盘拨动,8位薄码盘控制二进制数的低八位,5位薄码盘控制高8位。启动后,LED数码管会显示所置的数,按下开始键STAR,电动机开始运转,4位LED数码管显示0,然后按动计数键COUNT,按一下数码管显示数加1,直到所显示的数与当前所置的数相等时关闭电机和停止计数。而后可以按下RST键,所记的数清零并重新开始计数,此时可又通过按下计数键COUNT来计数。在这个过程中,可以按下STOP键来关闭电机,同时也停止了计数,再按下开始键STAR,则再继续接着刚停止时的数来开始计数。满足了设计题目的所有要求。

8


基于51单片机的传送带产品计数器设计(LED显示)(2).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:会计学资料整理

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: