⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 daodan.c

📁 一个关于模拟导弹发射系统的C51源程序
💻 C
字号:
#include<stdio.h>
#include<reg52.h>
#include<intrins.h>
#include<math.h>
#include <string.h>

unsigned char black = 0;
unsigned char speed = 10;
unsigned char input_char[6];
unsigned char state;
unsigned int jiaodu_step=0;
float jiaodu=180;
float yangjiao;
int tempa;
bit to_up; //直流电机是否向上运动,1为向上0为向下

unsigned char counter;	  //左电机步进数
unsigned int sum_counter;
unsigned int yangjiao_step;	//直流电机一次调整步数,

unsigned int second_counter;
unsigned int stop_counter;
unsigned char temp_counter;
unsigned char timer_num = 0;

unsigned char code jin[8]={0xe0,0xc0,0xd0,0x90,0xb0,0x30,0x70,0x60};//{0x0e,0x0c,0x0d,0x09,0x0b,0x03,0x07,0x06};
unsigned char code tui[8]={0x60,0x70,0x30,0xb0,0x90,0xd0,0xc0,0xe0};//{0x06,0x07,0x03,0x0b,0x09,0x0d,0x0c,0x0e};

sbit csb=P0^3;
sbit msi=P0^2;
sbit mso=P0^1;
sbit sck=P0^0;

sbit led= P1^0;
sbit key= P1^5;

sbit   INT_1=P0^0;
sbit   INT_2=P0^1;

void delay(unsigned int num)
{
unsigned int i;
for(i=0;i<10*num;i++);

}

unsigned int init61t()
{
     data unsigned char i,m;
     data unsigned int j,k;
     EA =0;
     sck=0;
     _nop_();
     _nop_();
     csb=0;
     m=0x10;
     for(i=0;i<8;i++)
     {
        msi=m&0x80;
        m=m<<1;
        sck=1;
        _nop_();
        _nop_();
        sck=0;
     }
     k=0;
     for(i=0;i<11;i++)
     {
        k=k<<1;
        j=mso;
        k=k|j;
        sck=1;
        _nop_();
        _nop_();
        sck=0;
    }
    csb=1;
    EA =1;
    return k;
}

void fangxiang_proc()
{
 float temp_jiaodu=0;
 unsigned char i=0;
 while(1)
 {
   if(temp_jiaodu<=jiaodu&&temp_jiaodu+0.9>jiaodu)
        {
         P2=0XFF;
         break;
        }
   P2=jin[i];
   i++;
   if(i==8)
        i=0;
   jiaodu_step++;
   temp_jiaodu=temp_jiaodu+0.9;
   delay(20);
 }
}

yangjiao_proc()
{
	float temp_yangjiao=0;
	delay(1000);

	while(1)
	{
		EA=1;
		if(abs(yangjiao-temp_yangjiao)<2)
		{
			EA=0;
			break;
		}
		if(abs(yangjiao-temp_yangjiao)<6)
			speed=10;
		else if(abs(yangjiao-temp_yangjiao)<12)
			speed=15;
		if(abs(yangjiao-temp_yangjiao)<18)
			speed=20;
		if(abs(yangjiao-temp_yangjiao)>18)
			speed=30;
		if(yangjiao_step>500)
		{
			EA=0;
			delay(1000);
			temp_yangjiao=0;//init61t();
		}
	}
}

void reset_proc()
{
	unsigned int i;
	while(key==0)
	{
		INT_1=0;
		INT_2=1;
		delay(30);
	}
        for(i=0;i<jiaodu_step;i++)
	{
		P2=tui[i%8];
		delay(20);
                if(i==jiaodu_step-1)
                P2=0xff;
	}
}

void adjust_proc()
{
	;
}

void t0_int() interrupt 1
{
	TR0=1;
	TH0=64565/256;
	TL0=64565%256;
	timer_num ++;
	if(to_up)
	{
		if(timer_num==speed)
		{
			INT_1=0;
			INT_2=0;
		}
		else if(timer_num==30)
		{
			yangjiao_step++;
			timer_num=0;
			INT_1=1;
			INT_2=0;
		}
	}
	else
	{
		if(timer_num==speed)
		{
			INT_1=0;
			INT_2=0;
		}
		else if(timer_num==30)
		{
			yangjiao_step++;
			timer_num=0;
			INT_1=0;
			INT_2=1;
		}
	}
}

main()
{
 int k;
 k=init61t();
 k=k-1024;
 TMOD=0x01;
 ET0=1;
 TH0=64536/256;
 TL0=64536%256;
 TR0=1;
 state=0;
 while(1)
 {
  switch(state)
  {
   case 0:
        led=1;
        fangxiang_proc();
        state ++;
        delay(100);
        break;
   case 1:
        led=1;
        yangjiao_proc();
        state ++;
        break;
   case 2:
        led=0;
        delay(1000);
        state++;
        break;
   case 3:
        led=1;
        reset_proc();
        state ++;
        break;
   case 4:
        led=1;
        adjust_proc();
        break;
   default:
        led=1;
        state =0;
        break;
  }
 }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -