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

📄 fgsdfgfgsfpt0611.c

📁 PT0611打印机代码,可用于学习用,如果有需要可以下载
💻 C
字号:
/**********************************this program is written for pirnt rolling papaer ************************/
/********************************** Kingteller   version V2.0 **********************************************/
/********************************** version	change on2006/6/16**********************************************/
/********************************** Written by Ludonghua ***************************************************/
/********************************** Started on  2005/2/17 **************************************************/
/********************************** modified on  2005/2/17 *************************************************/
/********************************** channge  on  2006/6/16 *************************************************/
#include "AT89x52.h"
#include "string.h"
#include "stdio.h"
#include "absacc.h"
#include "intrins.h"
#include "ctype.h"

#define  uint unsigned int
#define  uchar unsigned char
//#define	 PWML  0x55
#define	 PWML  0x80			//PWML更改前为0x61输出电压为9.1V;更改后为0x80,输出电压为12.5V;更改日期为2006.8.15
#define	 T2TIME_H 	0XB8	
#define	 T2TIME_L	0X00

/*********************  interrelated function and parameter **********************************/
void delayms(uint ms);
void cpu_init(void);
void parameter_init(void);

uchar read_status(uchar tt);//读传感器状态  
void StartMotor (void);			//启动卷纸电机
/*********************parameter define*************************************/
uint mainproc=0;                 //main loop counter
bit out_of_paper_flag=0;							//out of paper flag
bit motor_run_timeout_flag=0;				//motor run time out flag
bit front_sensor_flag=0;							//front sensor status
bit back_sensor_flag=0;							//back sensor status
uint motor_run_delay_time=0;
bit PWM_flag=0;
bit motor_start_flag=0;

bit en_motor_flag=1;//       one to enable motor run;
bit extern_motor_enable_flag=1; //another one to enable motor run

uint motor_delay_time=0;
bit motor_delay_time_flag=0;

uchar error_time=0;

/********************* I/O port define **********************************/
sbit WDOG               = 0x97;//P1^7;
sbit OUT_OF_PAPER       = 0x96;//P1^6;           //OUT OF PAPER SENSOR INPUT
sbit MOTOR_OUT1         = 0x90;//P1^0;            //Motor控制脚1
sbit MOTOR_OUT2         = 0x91;//P1^1;            //Motor控制脚2
sbit FRONT_SENSOR       = 0x94;//P1^4;            //前端传感器
sbit BACK_SENSOR        = 0x95;//P1^5;            //后端传感器
sbit ERROR_OUT          = 0xa0;//= 0xB1;	//				//alter 2005-8-12
sbit NOPAPER_ERR		= 0x92;//P1^2;						// ERROR out  if error set to 0;// add 2005-0704


bit pc_temp=0;
sbit EN_CHECK						= 0xb0;//if this bit is 0,stop motor;
bit  PC_EN_MOTOR				=1;
void pc_en_check(void);

uchar key_scan_time=0;
void test_button(void);
void test_motor_drive(void);          //if button press down,start motor
bit key_button_down_flag=0;
uint button_delaytime=0;							//button press down and motor run time out
bit button_delaytime_flag=0;


sbit LED=0xb4;												//test button1
sbit PAPER_IN =0xb5;									// test button2
uchar paper_in_time=0;
/************************************ cpu initialize *******************/

void cpu_init(void)
{
/*t2 initialization*/
 RCAP2H=T2TIME_H;
 RCAP2L=T2TIME_L;
 TL2=T2TIME_L;
 TH2=T2TIME_H;
 T2CON=0x00;
 T2MOD=0x00;

/*t2 initialization*/
  TMOD = 0x21 ;   /* 初始化CPU内部控制寄存器 */
 	PCON = 0x00 ;
	TL0  = 0x48 ;	/* 10 ms */
	TH0  = 0xff ;
	TR1=0;
	
	IP=0X02;
  IE=0x82;
  ET2=1;
  TR2=1;
  TR0 = 0 ;
  ET0=0;
  ES=0;
  ET1=0;

}

void parameter_init(void)
{
 
mainproc = 0 ;
MOTOR_OUT1=0;
MOTOR_OUT2=0;
ERROR_OUT=1;
PWM_flag=0;
motor_run_timeout_flag=0;
ERROR_OUT=1;

}
/******************** main program *********************************************/ 
main()
{ 
	 delayms(500);
   cpu_init();
   parameter_init();
 // motor_run_delay_time=200;
    while(1)
   {
   //	pc_en_check();
   	
   if((en_motor_flag)&&(extern_motor_enable_flag)&&PC_EN_MOTOR)
    {
   	if((read_status(0)==1)&&(!PWM_flag))
   		{
   			StartMotor ();
   		
   			motor_run_delay_time=1000;
   		
   		}
			
   	}
   
		if(read_status(0)==3)
				{
					MOTOR_OUT1 = 0;
					MOTOR_OUT2 = 0;
					PWM_flag = 0;                 //取消PWM功能
					
				
				}
		if(read_status(1)==5)
				{
					NOPAPER_ERR=0;
					_nop_();
					_nop_();
					_nop_();
					NOPAPER_ERR=0;
					//********************no papaer,stop motor****2005-8-31**********
					MOTOR_OUT1 = 0;
					MOTOR_OUT2 = 0;
					PWM_flag = 0;                 //取消PWM功能
					en_motor_flag=0;
				}
		else if(read_status(1)==6)
				{
					en_motor_flag=1;
					NOPAPER_ERR=1;
					_nop_();
					_nop_();
					_nop_();
					NOPAPER_ERR=1;
					en_motor_flag=1;
					
				}
			
			if(read_status(0)==4)		//if motor run error
				{
					MOTOR_OUT1 = 0;
					MOTOR_OUT2 = 0;
					PWM_flag = 0;                 //取消PWM功能
					ERROR_OUT=0;
					_nop_();
					_nop_();
					_nop_();
					_nop_();
					_nop_();
					ERROR_OUT=0;
				
				}
			
		if((read_status(0)==1)&&(read_status(1)==5))
			{
				MOTOR_OUT1 = 0;
				MOTOR_OUT2 = 0;
				PWM_flag = 0;
				en_motor_flag=0;
				
				_nop_();
				_nop_();
				_nop_();
				MOTOR_OUT1 = 0;
				MOTOR_OUT2 = 0;
				PWM_flag = 0;
				en_motor_flag=0;
				
			}
			
		if(motor_run_timeout_flag)
			{
				motor_run_timeout_flag=0;
				
				MOTOR_OUT1 = 0;
				MOTOR_OUT2 = 0;
				PWM_flag = 0;
				ERROR_OUT=0;
		
				_nop_();
				_nop_();
				_nop_();
				MOTOR_OUT1 = 0;
				MOTOR_OUT2 = 0;
				PWM_flag = 0;
				ERROR_OUT=0;
			
				extern_motor_enable_flag=0;
			}
		
 		test_button();
		if(button_delaytime_flag)
			{
				button_delaytime_flag=0;
				MOTOR_OUT1 = 0;
				MOTOR_OUT2 = 0;
				PWM_flag = 0;
				
				_nop_();
				_nop_();
				_nop_();
				MOTOR_OUT1 = 0;
				MOTOR_OUT2 = 0;
				PWM_flag = 0;
			key_button_down_flag=0;
			}

 		if(key_button_down_flag)				// if button down,enable all funtion //add 08-04
 			{
 				test_motor_drive();
 				extern_motor_enable_flag=1;			//add 08-04		
 				PC_EN_MOTOR=1;									////add 08-04
 				en_motor_flag=1;								//add 08-04
 				ERROR_OUT=1;
 				_nop_();
				_nop_();
				ERROR_OUT=1;
				key_button_down_flag=0;
 			}
    mainproc = 0 ;
       
   }

}

/*********************************************************************************************/
/*                                 毫秒延时                                                  *
/*********************************************************************************************/
void delayms(uint ms)
{
	uint idata tem1,tem2;

        for(tem1=0;tem1<ms;tem1++)
        {
        	for(tem2=0;tem2<120;tem2++)
			{;}
			
        }
}

/************************ send a char ***************************/

/************************* serial interrupt ****************************************************/

void serial( ) interrupt 4
{
	;
}

/************************* timer0 interrupt ****************************************************/

void T0_int (void) interrupt 1  
{
  TH0  = 0xff; 
  if (PWM_flag)                        //PWM功能
 			{
 				if (motor_start_flag)              //已经启动了电机
 					{
 						motor_start_flag = 0;
 						MOTOR_OUT1 = 0;
						MOTOR_OUT2 = 0;          
						TL0 = PWML;   //关闭时间
 					} 
 				else
 					{
 					  motor_start_flag = 1;
 						MOTOR_OUT1 = 0;
						MOTOR_OUT2 = 1;       //开启Motor电源
						TL0 = 256 - PWML;       //
 					}
 			}
 	else
 		{
 			TR0=0;
 			ET0=0;
 		}

}

/************************* timer2 interrupt ****************************************************/
void T2_int (void) interrupt 5 
{
TF2=0;  
mainproc ++ ;
if(mainproc < 12000 )       // one minute long not to be executed ,reset. 
WDOG=~WDOG; 
if(PWM_flag)
 	{
	if(motor_run_delay_time)
		{
		motor_run_delay_time--;
		if(motor_run_delay_time==0)
			{
			motor_run_timeout_flag=1; 
			}
		else
			{
				motor_run_timeout_flag=0;
			}
		}
	if(button_delaytime)
		{
			button_delaytime--;
			if(button_delaytime==0)
			{
			button_delaytime_flag=1;
			}
			else
			{
			button_delaytime_flag=0;
			}
		
		}
	}


}
/*********************************** operation function **************************************************/
 void StartMotor (void)
 	{
 		      
		motor_start_flag = 1;
		PWM_flag = 1;
		TR0=1;ET0=1;
		TH0=0XFF;
		TL0=256-PWML;
		MOTOR_OUT1 = 0;
		MOTOR_OUT2 = 1; 
 				
 	}
 	
//*****************************read sensor status************************************
//************
uchar read_status(uchar tt)
{
	while(1)
		{
			front_sensor_flag=FRONT_SENSOR;
			back_sensor_flag=BACK_SENSOR;
			out_of_paper_flag=OUT_OF_PAPER;
			delayms(2);
			if((front_sensor_flag==FRONT_SENSOR)&&(back_sensor_flag==BACK_SENSOR)&&(out_of_paper_flag==OUT_OF_PAPER))
			break;
		}	

	if(tt==0)
	{
		if((front_sensor_flag==0)&&(back_sensor_flag==1))  				//paper out纸松
			return(1);
		else if ((front_sensor_flag==1)&&(back_sensor_flag==1))		//纸松(中间位置)
			return(2);
		else if ((front_sensor_flag==1)&&(back_sensor_flag==0))		//纸紧
			return(3);
		else return(4);
	}
	else if(tt==1)
	{
		if(out_of_paper_flag==0)				//have NO paper
		return(5);
		else
		return(6);											// have  paper
		
	}	
}

//*******************************test button down********************************
void test_button(void)
{
	if(LED==0)
	key_scan_time++;
	if(key_scan_time==1)
	{
		
		key_button_down_flag=1;
		key_scan_time=0;
	}
	
	if(PAPER_IN==0)
	paper_in_time++;
	if(paper_in_time==1)
	{
		
		key_button_down_flag=1;
		paper_in_time=0;
	}
	

}

//**************************test motor_drive*******************************
void test_motor_drive(void)
{
		//*********************if no papaer stop motor****2005-8-31********
	
	//*********************if no papaer stop motor****2005-8-31********
	if(read_status(1)==6)
	{
	if((read_status(0)==1)&&(!PWM_flag))
   		{
   			StartMotor ();
   			
   			button_delaytime=500;
   		
   		}
   }
   /*
   if(read_status(0)==3)
				{
					MOTOR_OUT1 = 0;
					MOTOR_OUT2 = 0;
					PWM_flag = 0;                 //取消PWM功能
					key_button_down_flag=0;
				}
	 
	*/
}

//**************************PC EN CHECK*********************************
/*
void pc_en_check(void)
{
	while(1)
		{
			pc_temp=EN_CHECK;
			delayms(2);
			if(pc_temp==EN_CHECK)
			break;
		}
	if(pc_temp==0)
   		{
   			PC_EN_MOTOR=0;
   		}
   	else
   		{
   			PC_EN_MOTOR=1;
   		}
	
	
}

*/

⌨️ 快捷键说明

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