急~~~这个程序在这个电路上为什么模拟不出来

2019-07-15 20:50发布

#include<reg52.h>
sbit EN=P2^0;    //使能输出
sbit DIR=P2^1;    //方向控制
sbit PWM=P2^2;  //PWM输出
sbit zled=P2^6;  //正转信号灯
sbit fled=P2^7;  //反转信号灯
sbit sw1=P0^0;  //启停按钮
sbit sw2=P0^1;  //正反转按钮
sbit sw3=P0^2;  //加速按钮
sbit sw4=P0^3;  //减速按钮
unsigned char  table[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};
unsigned char i,j,k,temp=0,zkb=5,zkb1=0,speed=0;
void delay()   //延时10ms
{
  for(i=20;i>0;i--);
for(j=248;j>0;j--);
}
void Inittimer0(void)     //T0定时器初始化
{   
    TMOD = 0x00;      //设置定时器方式0
    TH0 = 0xef;        //高8位送初值
    TL0 = 0xdd;        //低8位送初值
    EA = 1;           //开中断总允许
    ET0 = 1;          //开T0中断允许
    TR0 = 1;          //启动T0开始定时
}
void main()           //主程序
{
InitTimer0();
EN=1;           //初始使能端输出0
DIR=1;          //方向端输出1
zled=0;         //正传信号灯端口输出0,灯亮
fled=1;         //反转信号灯输出1,灯不亮
while(1)
{
  P1=table[speed];  //启停
  if(sw1==0)     //判断启停键按下
  {
  delay();       //调用延时程序
  if(sw1==0)    //再判断,启停键按下
  {
  while(sw1==0); //启停键按下,使能端取反
  EN=~EN;
  }
  }
//正反转子程序
if(sw2==0)         //判断换向键是否按下
  {
  delay();
  if(sw2==0)
  {
  while(sw2==0);
  DIR=~DIR;       //换向键按下,方向端口取反
  fled=~fled;      //正传指示灯控制端取反
  zled=~zled;     //反转传指示灯控制端取反
  }
  }
//加速子程序
if(sw3==0)       //判断加速键是否按下
  {
  delay();
  if(sw3==0)
  {
  while(sw3==0);   //加速键按下
  if(speed>=5)     //判断转速是否大于5
  speed=5;       //大于5,保持5级转速
  else
  speed++;      //小于5,加速一级
  }
  }
  //减速子程序
if(sw4==0)    //判断减速键是否按下
  {
  delay();
  if(sw4==0)
  {
  while(sw4==0);  //减速键按下
  if(speed==1)   //转速为1,保持1级转速
  speed=1;
  else
  speed--;   //转速不为1,减速1级
  }
  }
}
}
void Timer0Interrupt(void) interrupt 1
{
  switch(speed)   //加减速按键按下,对应选择T0初值,进入终端产生不同频率脉冲
{
  case 1:TH0=0XDD;break;
  case 2:TH0=0XE1;break;
  case 3:TH0=0XE5;break;
  case 4:TH0=0XEa;break;
  case 5:TH0=0xf0;break;
}
    TL0 = 0xdd;   
if(zkb1>=10)
zkb1=0;
zkb1++;
if(zkb1<=5)
PWM=1;
else
PWM=0;
}
QQ图片20140221224615.jpg
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。