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

📄 lcm.c

📁 rfproV02发送程序和80C51演示程序
💻 C
字号:

/*----------------------------- Program Overview -------------------------------
                 Device Name:	AT89S52
                         ROM: 	8 K bytes
                         RAM: 	512 bytes
        Chip Basic Functions:	40pin, 32I/O, 16 bit Timer *3, 8 bit UART *1, Eight Interrupt Sources   
                    		4.0V to 5.5V Operating Range, OSC 11.0592 MHz (0.9216 us)
                    Complier:	keil C 750
                   Simulator:	keil C 750
                  Programmer:   
                   File Name:	lcm.c
              File Functtion:	lcm display function
                   Copyright:	XIAZHAOJUN
 First Version Finished Date:	2007.11.6
                      Others: 	
------------------------------- Modified Note ----------------------------------
                 Old Version:	
                 New Version:
                New CheckSum: 
                    Modifier:
               Modified Date:
          Modified Causation:
               Modified Mean: 
-------------------------------------------------------------------------------*/

//----------------------------- Include ----------------------------------------
#include <reg52.h>
//#include <stdio.h>  
//#include<intrins.h>
#include<lcm.h>
#include<com.h>
#include<key.h>
//#include<cmain.h>




//----------------------------- SFR Definition ---------------------------------
/*----------------------------------------------
LCD1602
|DB0-----P1.0 | DB4-----P1.4 | RW-------P3.3 |
|DB1-----P1.1 | DB5-----P1.5 | RS-------P3.2 |
|DB2-----P1.2 | DB6-----P1.6 | E--------P3.4 |
|DB3-----P1.3 | DB7-----P1.7 |
 VSS--GND
 VDD--VCC
 BLA--VCC
 BLK--GND
 VLCD接1K电阻到GND 
----------------------------------------------*/

sbit LCM_RW = P3^6;
sbit LCM_RS = P3^7;
sbit LCM_E = P3^4;

//----------------------------- Macro Definition -------------------------------

#define LCM_Data P1


#define uchar unsigned char
#define uint unsigned int

//----------------------------- Constant Definition ----------------------------
uchar lcm_md;

//----------------------------- Variable Definition ----------------------------


unsigned char data dsip_ra;
unsigned char data dsip_rb;

unsigned char data dsip_r0;
unsigned char data dsip_r1;

unsigned char data dsip_r4;
unsigned char data dsip_r5;


//----------------------------- Bit Definition ---------------------------------

bit b_disp;


//----------------------------- Program Code -----------------------------------


/*----------------------------- Subroutine -------------------------------------
        Name: lcm table
    Function: 
       Entry: 
        Exit: 
     Caution: 
-------------------------------------------------------------------------------*/
uchar code dsiptaba[14]={" XIA ZHAO JUN "};
uchar code dsiptabb[14]={"copyright 2007"};
uchar code dsiptabwait[9]={"wait...  "};


uchar code dsp_tab_line[10][9]=
{
	{"OFF Stop "},	//0
	{"OFF Up   "},	//1
	{"OFF Down "},	//2
	{"OFF Left "},	//3
	{"OFF Right"},	//4
	
	{"ON  Stop "},	//5
	{"ON  Up   "},	//6
	{"ON  Down "},	//7
	{"ON  Left "},	//8
	{"ON  Right"}	//9
};

uchar code dsp_tab_send[7][9]=
{
	{"Stop...  "},	//0
	{"Up...    "},	//1
	{"Down...  "},	//2
	{"Left...  "},	//3
	{"Right... "},	//4
	
	{"OFF...   "},	//5
	{"ON...    "}	//6

};


uchar code dsp_tab_send_OK[9]={"Send OK  "};		//0  
uchar code dsp_tab_ERR[9]=    {"COM Error"};	//6



/*----------------------------- Subroutine -------------------------------------
        Name: delay
    Function: 
       Entry: 
        Exit: 
     Caution: 
-------------------------------------------------------------------------------*/
void del_100us(void){
	uchar j;
	for(j=100;j>0;j--);	
}

void del_1ms(void){
	uchar j;
	for(j=10;j>0;j--){
		del_100us();
	}	
}

void del_10ms(void){
	uchar i;
	for(i=100;i>0;i--){	
		del_100us();
	}
}


void del_100ms(void){
	uchar i;
	for(i=10;i>0;i--){	
		del_10ms();
	}
}

static void short_delay(unsigned int i){
	while (i>0) i--;
}


/*----------------------------- Subroutine -------------------------------------
        Name: 1602 LCM busy
    Function: 
       Entry: 
        Exit: 
     Caution: 
-------------------------------------------------------------------------------*/
void ReadBusyLCM(void){
	bit result;
	do{
		LCM_RS = 0;
		LCM_RW = 1;
		LCM_E = 0;
		LCM_E = 1;
		LCM_Data=0xff;
		result = (bit)(LCM_Data&0x80);
		LCM_E = 0;
	}while (result == 1);
	del_1ms();
}

/*----------------------------- Subroutine -------------------------------------
        Name: lcm command
    Function: 
       Entry: 
        Exit: 
     Caution: 
-------------------------------------------------------------------------------*/
void WriteCommandLCM(unsigned char WCLCM,unsigned char BusyC){	 //BusyC为0时忽略忙检测
	if (BusyC){
		ReadBusyLCM(); //根据需要检测忙
	}
	LCM_E=0;
	LCM_RS=0;
	LCM_RW=0; 
	LCM_E=1; 
	LCM_Data=WCLCM;
	LCM_E=0;
}

/*----------------------------- Subroutine -------------------------------------
        Name: lcm write data
    Function: 
       Entry: 
        Exit: 
     Caution: 
-------------------------------------------------------------------------------*/
void WritedataLCM(unsigned char WCLM,unsigned char BuyC){
	if (BuyC){
		ReadBusyLCM(); //根据需要检测忙
	}
	LCM_E=0;
	LCM_RS=1;
	LCM_RW=0; 
	LCM_E=1; 
	LCM_Data=WCLM;
	LCM_E=0;
}

/*----------------------------- Subroutine -------------------------------------
        Name: lcm init
    Function: 
       Entry: 
        Exit: 
     Caution: 
-------------------------------------------------------------------------------*/
void LCMInit(void){		 //LCM初始化
	WriteCommandLCM(0x38,1); //显示模式设置,开始要求每次检测忙信号
	WriteCommandLCM(0x0C,1); // 显示开及光标设置
	WriteCommandLCM(0x06,1); // 显示光标移动设置
	WriteCommandLCM(0x01,1); //显示清屏
	short_delay(250);
}

/*----------------------------- Subroutine -------------------------------------
        Name: lcm write tab data
    Function: 
       Entry: 
        Exit: 
     Caution: 
-------------------------------------------------------------------------------*/
void LCMwritetab_rst(void){
	unsigned char i;
	WriteCommandLCM(0x01,1);
	del_100ms();
	for(i=0;i<9;i++)
        {
		WritedataLCM(dsp_tab_line[0][i],1);
	}
	
	WriteCommandLCM(0xc0,1);
	for(i=0;i<9;i++) {
		WritedataLCM(dsiptabwait[i],1);
	}
}

void LCMwritetab(void){
	unsigned char i;
	WriteCommandLCM(0x01,1);
	for(i=0;i<14;i++){
		WritedataLCM(dsiptabb[i],1);
	}
	
	short_delay(250);
	
	WriteCommandLCM(0xc0,1);
	for(i=0;i<14;i++) {
		WritedataLCM(dsiptaba[i],1);
	}
	
	del_100ms();
	LCMwritetab_rst();

}

/*----------------------------- Subroutine -------------------------------------
        Name: lcm write receive motor stats data
    Function: 
       Entry: 
        Exit: 
     Caution: 
-------------------------------------------------------------------------------*/
void LCMwritetrece_stasdat(unsigned char DData){
	unsigned char i;
	
	WriteCommandLCM(0x01,1);
	del_100ms();

	for(i=0;i<9;i++)
        {
		WritedataLCM(dsp_tab_line[DData][i],1);
	}
	
	WriteCommandLCM(0xc0,1);                 
	for(i=0;i<9;i++) {                       
        	WritedataLCM(dsiptabwait[i],1);  
	}    
}                                    

/*----------------------------- Subroutine -------------------------------------
        Name: lcm write send stats data ok
    Function: 
       Entry: 
        Exit: 
     Caution: 
-------------------------------------------------------------------------------*/
void LCMwritetsending_OK(unsigned char DData){
	
	unsigned char i;
	
	WriteCommandLCM(0x01,1);
	del_100ms();

	for(i=0;i<9;i++)
        {
		WritedataLCM(dsp_tab_line[DData][i],1);
	}


	WriteCommandLCM(0xc0,1);
	for(i=0;i<9;i++) 
	{
		WritedataLCM(dsp_tab_send_OK[i],1);
	}
}


/*----------------------------- Subroutine -------------------------------------
        Name: LCMwritetsending_out
    Function: 
       Entry: 
        Exit: 
     Caution: 
-------------------------------------------------------------------------------*/
void LCMwritetsending_out(unsigned char DData){
	
	unsigned char i;
	
	WriteCommandLCM(0x02,1);
	del_100ms();
	
	WriteCommandLCM(0xc0,1);
	for(i=0;i<9;i++) 
	{
		WritedataLCM(dsp_tab_send[DData][i],1);
	}
}

/*----------------------------- Subroutine -------------------------------------
        Name: lcm_initial
    Function: 
       Entry: 
        Exit: 
     Caution: 
-------------------------------------------------------------------------------*/	
void lcm_initial(void){
	
	LCMInit();
	LCMwritetab();
	b_disp=0;
	
}


/*----------------------------- Subroutine -------------------------------------
        Name: lcm
    Function: 
       Entry: 
        Exit: 
     Caution: 
-------------------------------------------------------------------------------*/	
void lcm(void){
	unsigned char lcdt;
	if(b_disp==1){
		b_disp=0;
		TR0=0;
	
		if(lcm_md==0x01){	// disp receive motor run data
		
			lcdt=(comdata&0x0f);	//dsp_tab_line
			comdata&=0x3f;
			if(comdata>0x0f){
				lcdt+=0x05;
			}
			LCMwritetrece_stasdat(lcdt);
		}
		
		if(lcm_md==0x02){	//接受到数据正确 显示ok	
		
				//dsp_tab_send_OK
				
			lcdt=(comdata&0x0f);	//dsp_tab_line
			comdata&=0x3f;
			if(comdata>0x0f){
				lcdt+=0x05;
			}
			LCMwritetsending_OK(lcdt);
		}
		
		if(lcm_md==0x03){	//显示 发送 状态
			
			lcdt=keytabdat;	//dsp_tab_send
			
			LCMwritetsending_out(lcdt);
		}
		
		if(lcm_md==0x04){	//显示 发送 状态
			
			comdata=0x00;
			LCMwritetab_rst();
		}
			
		TR0=1;
	}
		
} 


//void lcm(void){
//	unsigned char lcdtset;
//	if(b_disp==1){
//		b_disp=0;
//		
//		WriteCommandLCM(0x01,1);
//		
////	
//		lcdtset=(dsip_r0>>4);
//		lcdtset+=0x30;
//		if(lcdtset>0x39){
//			lcdtset+=0x07;
//		}
//		WritedataLCM(lcdtset,1); 	
//		
//		lcdtset=(dsip_r0&0x0f);
//		lcdtset+=0x30;
//		if(lcdtset>0x39){
//			lcdtset+=0x07;
//		}
//		WritedataLCM(lcdtset,1); 
//		
//		lcdtset=(dsip_r1>>4);
//		lcdtset+=0x30;
//		if(lcdtset>0x39){
//			lcdtset+=0x07;
//		}
//		WritedataLCM(lcdtset,1); 	
//		
//		lcdtset=(dsip_r1&0x0f);
//		lcdtset+=0x30;
//		if(lcdtset>0x39){
//			lcdtset+=0x07;
//		}
//		WritedataLCM(lcdtset,1);	
//
//		
////		
//		
//		lcdtset=(dsip_ra>>4);
//		lcdtset+=0x30;
//		if(lcdtset>0x39){
//			lcdtset+=0x07;
//		}
//		WritedataLCM(lcdtset,1); 	
//		
//		lcdtset=(dsip_ra&0x0f);
//		lcdtset+=0x30;
//		if(lcdtset>0x39){
//			lcdtset+=0x07;
//		}
//		WritedataLCM(lcdtset,1); 
//		
//		lcdtset=(dsip_rb>>4);
//		lcdtset+=0x30;
//		if(lcdtset>0x39){
//			lcdtset+=0x07;
//		}
//		WritedataLCM(lcdtset,1); 	
//		
//		lcdtset=(dsip_rb&0x0f);
//		lcdtset+=0x30;
//		if(lcdtset>0x39){
//			lcdtset+=0x07;
//		}
//		WritedataLCM(lcdtset,1);
////		
//		
//
//		
//		lcdtset=(dsip_r4>>4);
//		lcdtset+=0x30;
//		if(lcdtset>0x39){
//			lcdtset+=0x07;
//		}
//		WritedataLCM(lcdtset,1); 	
//		
//		lcdtset=(dsip_r4&0x0f);
//		lcdtset+=0x30;
//		if(lcdtset>0x39){
//			lcdtset+=0x07;
//		}
//		WritedataLCM(lcdtset,1); 
//		
//		lcdtset=(dsip_r5>>4);
//		lcdtset+=0x30;
//		if(lcdtset>0x39){
//			lcdtset+=0x07;
//		}
//		WritedataLCM(lcdtset,1); 	
//		
//		lcdtset=(dsip_r5&0x0f);
//		lcdtset+=0x30;
//		if(lcdtset>0x39){
//			lcdtset+=0x07;
//		}
//		WritedataLCM(lcdtset,1);
//		
//		
//	}
//		
//}
//

⌨️ 快捷键说明

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