微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 求找那错了!~

求找那错了!~

时间:10-02 整理:3721RD 点击:

#include <reg52.h>

#include<intrins.h>

#define uchar unsigned char

#define uint unsigned int

uchar code ccw[]={0x08,0x04,0x02,0x01}; //逆时针旋转相序

//uchar code cw[]={0x01,0x02,0x04,0x08}; //顺时针旋转相序

//uchar codespeed[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d};

//uchar codetable[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,

                   //0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};//共阴极数码管显示表

uchar code table_anode[]={ //共阳极0~f数码管编码

0xc0,0xf9,0xa4,0xb0,//0~3

0x99,0x92,0x82,0xf8,//4~7

0x80,0x90,0x88,0x83,//8~b

0xc6,0xa1,0x86,0x8e //c~f

};

uchar codeccw8[]={0x08,0x0c,0x04,0x06,0x02,0x03,0x01,0x09};   //8拍旋转相序表

uint time,show1,show2,sym,temp,t,a,flag,i,j,rpm,n;

sbit inc=P3^2;//加速

sbit dec=P3^3;//减速

sbit keyccw=P3^4;//逆时针转

sbit keycw=P3^5;//顺时针转

sbit pause=P3^6;//暂停

sbit fir=P2^0;//第一数码管

sbit sec=P2^1;//第二数码管

void init();//初始化定时器0,1,串口

void direc();//按键控制转向

void speedctl();//按键控制转速

void display();//速度显示函数

void delaynms(uint aa);//1ms延时函数

void main()

{

                                                      init();

                                                      while(1)

                                                      {

                                                        speedctl();

                                                        direc();         

                                                        display();

                                                      }

}

void wind_init()

{

                                                      TMOD=0X21;//定时器1为方式2,定时器0为方式1

                                                      TH1=0xFD;

                                                      TL1=0xFD;

                                                      TH0=(65536-1000)/256;//1毫秒定时中断

                                                      TL0=(65536-1000)%256;

                                                      TR1=1;//启动定时器1

                                                      EA=1;//打开总中断

                                                      ET0=1;//允许定时器0中断

                                                      TR0=1;//启动定时器0

}

void speedctl()                                          

{

                                                      if(inc==0)                                                          //加速

                                                      {

                                                        n++;

                                                        if(n==11)

                                                               n=10;

                                                        while(!inc)

                                                               display();

                                                        time=0;

                                                      }

                                                      elseif(dec==0)                                               //减速

                                                      {

                                                        n--;

                                                        if(n==0)

                                                               n=1;

                                                        while(!dec)

                                                               display();

                                                        time=0;

                                                      }

                                                      switch(n)

                                                      {

                                                        case1:

                                                               t=937;                  //60/64转速一分钟一圈  里面转一圈937ms,基准速度一分钟一圈

                                                               rpm=1;

                                                               break;

                                                        case2:

                                                               t=312;

                                                               rpm=3;

                                                               break;

                                                        case3:

                                                               t=187;

                                                               rpm=5;

                                                               break;

                                                        case4:

                                                               t=133;

                                                               rpm=7;

                                                               break;

                                                        case5:

                                                               t=104;

                                                               rpm=9;

                                                               break;

                                                        case6:

                                                               t=85;

                                                               rpm=11;

                                                               break;

                                                        case7:

                                                               t=72;

                                                               rpm=13;

                                                               break;

                                                        case8:

                                                               t=62;

                                                               rpm=15;

                                                               break;

                                                        case9:

                                                               t=55;

                                                               rpm=17;

                                                               break;   

                                                        case10:

                                                               t=49;

                                                               rpm=19;

                                                               break;

                                                      }

                                                      

}

void direc()

{

                                                      if(keyccw==0)

                                                      {

                                                        flag=1;

                                                        time=0;  

                                                      }

                                                      elseif(keycw==0)

                                                      {

                                                        flag=2;

                                                        time=0;

                                                      }

                                                      elseif(pause==0)

                                                        flag=0;

}

void display()

{

                                                      fir=1;

                                                      sec=0;

                                                      P0=table_anode[rpm/10];

                                                      delaynms(17);

                                                      fir=0;

                                                      sec=1;

                                                      P0=table_anode[rpm%10];

                                                      delaynms(20);

}

void delaynms(uint aa)

{

                                                      ucharbb;

                                                      while(aa--)

                                                      {

                                                        for(bb=0;bb<250;bb++);     //1ms基准延时程序

                                                      }

}

void timer0() interrupt 1

{

                                                      TH0=(65536-1000)/256;

                                                      TL0=(65536-1000)%256;

                                                      time++;

                                                      if(flag==1)//逆时针转

                                                      {

                                                        if(time==t)

                                                        {

                                                               time=0;

                                                               P1=ccw;

                                                               i++;

                                                               if(i==4)

                                                                      i=0;

                                                        }

                                                      }

                                                      elseif(flag==2)//顺时针转

                                                      {

                                                        if(time==t)

                                                        {

                                                               time=0;               

                                                               if(i>0)

                                                                      i--;

                                                               elseif (i==0)

                                                                      i=3;

                                                               P1=ccw;                  

                                                        }            

                                                      }

}




没人回的么?求帮忙!~~~~

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top