我们要求做一个
仿真,要求是:
用MCS-51系列单片机作为控制器;采用2位LED进行计数显示(00~99);采用光电传感器计数(仿真用按键代替); 用按键控制传送带电机的起停; 用拨码盘预置计数值,计数到预定值时,传送带停止,按键后传送带继续运行。有紧急按钮停止运行。这是我写的程序,没有错误,但仿真时LED数码管不显示,求大神指导下
#include<reg52.h>
#include"delayms.h"
#define uchar unsigned char
#define unit unsigned int
sbit LED1=P2^0;//十位
sbit LED2=P2^1;//个位
sbit motor=P3^0;
sbit KEY=P3^2;
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;
uchar code dispcode[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff};
uint shuzhi()//拨码盘数值函数
{
uchar a;
uchar b;
uchar c;
uchar d;
uchar e;
uchar f;
uchar g;
uchar h;
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;}
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+g*2*2*2*2*2*2*2+h*2*2*2*2*2*2*2*2;
return p;
}
uchar KeyScanNUM(void)
{
uchar key=1; //无键按下key=1
KEY=1;
if (KEY==0 )
{
delayms(10);
if (KEY==0) key=0;
else key=1;
}
return key;
}
void main(void)
{
uint i;
IT0=1; //负跳变触发
EA=1; //开总允许中断
EX0=1; //开INTO中断
TMOD=0x05;
TL0=0x00;
TH0=0;
TR0=1;
while(1)
{
i=shuzhi(); //拨码盘数值
P0=0xff;
P0=dispcode[TL0/10];LED1=1;LED2=0;delayms(10);
P0=0xff;
P0=dispcode[TL0%10];LED1=0;LED2=1;delayms(10);
KeyScanNUM();
TR0=1;
if (TL0==i)
{TR0=0;motor=1;} //当计数值与所置数相同时关闭电机,停止计数,当计数值不等时则将电机启动与关闭交由按键控制
else
{KeyScanNUM();motor=0;}
}
}
void Int0(void) interrupt 0 //中断服务程序,工作寄存器用0组
{
TL0=0x00;TR0=1; //重置计数值,重新开始计数
}
-
这是仿真运行的图
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
一周热门 更多>