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

📄 main.c

📁 这是我用AT89C51单片机做的定时控制器,最多可以输出八个不同时间段的脉冲.并且用TS1602 LCD显示出来.文件中包括源程序电路图和仿真电路图
💻 C
字号:
#include <reg52.h>
#include <intrins.h>
#include "port.h"
#include "TS1620.h"
#include "delay.h"

#define uchar unsigned char
#define uint  unsigned char

unsigned char Step_Total;
unsigned char Step_Current;
unsigned char Timer1;
unsigned char b;

/*
#define LED_Port P2
#define LCD_Port P0       
*/
/******************LED PORT************************/
/*
sbit LED1=P2^0;
sbit LED2=P2^1;
sbit LED3=P2^2;
sbit LED4=P2^3;
sbit LED5=P2^4;
sbit LED6=P2^5;
sbit LED7=P2^6;
sbit LED8=P2^7;


/******************CONTROL PORT*********************/
/*
sbit Run_Stop=P1^3;
sbit Auto_Man=P1^4;
sbit SW      =P1^5;
sbit Gas     =P1^7;

/******************LCD PORT*************************/
/*
sbit rs      =P1^0;
sbit rw      =P1^1;
sbit ep      =P1^2;
*/
unsigned char code Timer_Data[8]={20,40,60,80,100,120,140,160};
unsigned char code Timer_S[8]   ={1,2,3,4,5,6,7,8};
unsigned char code LED[8]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};

unsigned char code LCD_Line2[8][16]=
{
	{"Step1:      1s"},
	{"Step2:      2s"},
	{"Step3:      3s"},
	{"Step4:      4s"},
	{"Step5:      5s"},
	{"Step6:      6s"},
	{"Step7:      7s"},
	{"Step8:      8s"}
};

unsigned char code LCD_Line1[2][10]=
{
	{"Auto step"},
    {"Manu step"}
};
 
//20=1s  20*x=xS


void Port_Init( )
{
	P0=0xFF;
	P1=0xFF;                 //
	Gas1=0;
	P2=0xFF;

	P3=0xFF;
	EA=0;
	TMOD=0x01;
	TR0=0;
	ET0=1;
    TH0=0x3C;                     //50ms
	TL0=0xB0;
	EA=1;
}
/*
unsigned char Scan_Key(  )
{

	return(1);
}

unsigned char Make_Key( )
{
	return(1);
}
*/

unsigned char Model_Selcet( )
{
	unsigned char a;
	unsigned char b;
	delay(10);
	P3=0xFF;
	nc(20);
	a=P3;
	delay(10);
	b=P3;
	if(a==b)
	{  
 	   if(a>=8)
		Step_Total=0;
       else
        Step_Total=a;
      switch(a)
		{
			case 0xFC: Step_Total=1;break;
		//	case 0xFD: Step_Total=2;break;
			case 0xF5: Step_Total=3;break;
			case 0xF3: Step_Total=4;break;
			case 0xED: Step_Total=5;break;
			case 0xDD: Step_Total=6;break;
			case 0xBD: Step_Total=7;break;
			case 0x7D: Step_Total=8;break;
			default: Step_Total=0;
		}
	 }

    return(Step_Total);
}

void Auto_Model( )
{
    unsigned char i;

	PutStr(0,0,LCD_Line1[0]);
    Send_charstr(12,0,Step_Total);
	for(i=0;i<Step_Total;i++)
	{
		while(SW==0);					 //
    	delay(10);                     //
    	while(SW==1)                     //
    	delay(1);                      //
    	while(SW==1)                 //
    	delay(10);			  	 	 //
		while(SW==0)                   //
    	delay(10);
		PutStr(0,1,LCD_Line2[i]);
	   // Send_charstr(4,1,k);
        Timer1=0;
		TH0=0x3C;                     //50ms
	    TL0=0xB0;
		TR0=1;
		_nop_( );
		_nop_( );
	    Gas1=1;	
		P2=LED[i];
		_nop_( );
		_nop_( );
		while(Timer1!=Timer_Data[i]);
		TR0=0;
		_nop_( );
		_nop_( );
		Gas1=0;                  //
		Timer1=0;
		TH0=0x3C;
		TL0=0xB0;
	 }
}

void Man_Model( )
{	
	PutStr(0,0,LCD_Line1[1]); 
	if(SW==0)
		{
			delay(10);
			if(SW==0)
				Gas1=1;
			 else
			 	Gas1=0;
		}
}

void main( )
{	  
	Timer1=0;         //时间计数 
    Step_Total=0;     //总步数
	Step_Current=0;   //当前的步数

    Port_Init( );
	lcd_init();

//	Send_charstr(0,1,Step_Total);


//	Step_Total=Model_Selcet( );
//	Send_charstr(0,1,Step_Total);
//	PutStr(0,0,LCD_Line2[0]);
    Step_Total=Model_Selcet( );
	Send_charstr(0,16,Step_Total);

	while(1)
	{   
	    if(Auto_Man==1)   
	    	Auto_Model( );
		else
		    Man_Model( );
			
	}
}

void timer0( ) interrupt 1          
{
	TH0=0x3C;                     //50ms
	TL0=0xB0;
	Timer1++;
}





⌨️ 快捷键说明

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