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

📄 ipc-630-test.c

📁 研祥 ipc-630 LCD test program
💻 C
字号:
/*******************************************************************************
*                                                                            
*	Filename:	ipc-630-test.c
*
*  	Author:		Sunny Zeng
*  	Company:    	EVOC Technology Inc.
*		Case:		IPC-8117
*		Device:		NET-1713CVD5NA
*   Date:       	2008/5/4
*		Modifier:	
*		Modify Date:    
*   Visions:   	1.0
*   Compiled Using redhat 9.0
*	
*******************************************************************************/

#include<stdlib.h>
#include<stdio.h>
#include<string.h>
#include<sys/io.h>
#include<sys/time.h>
#include<sys/types.h>
#include<unistd.h>

#include<errno.h>
#include<error.h>

//define MAXPAGE and MAX_CHAR_LEN
#define MAXPAGE 5
#define MAX_CHAR_LEN MAXPAGE*40

//define FRAME_HEAD, FRAME_END and FRAME_CTL
#define FRAME_HEAD 0xFC
#define FRAME_END 0xFD
#define FRAME_CTL 0xFE

//define ports
#define spp_data 0x378
#define spp_state spp_data+1
#define spp_ctrl spp_data+2

//data to lcd
unsigned char g_cbuff[MAX_CHAR_LEN+1];

//==============================================================================
//Subroutine:	, send_char, send a char to lcd
//Function:		
//==============================================================================
char send_char(unsigned char c)
{
	unsigned char ch;
	long i;

	// wait s7=0
	for(i=0;i<1000000;i++)
	{
		ch=inb(spp_state);
       	if((ch&0x80)==0) break;
	}
	if(i>=1000000) return -1;  

	//send char
  outb(c,spp_data);
	outb(0xcf,spp_ctrl);	//set c0=1

	// wait s7=1
	ch=inb(spp_state);
	for (i=0;i<10000;i++) {
		ch=inb(spp_state);
		if ((ch&0x80)==0) continue;
		break;                      // wait s7=1
	}
	if (i>=10000) return -1;

	// set c0=0
	outb(0xce,spp_ctrl);	
	return 0;
}

//==============================================================================
//Subroutine:	send_frame, sned a string to the lcd(at offset)
//Function:		
//==============================================================================
char send_frame(unsigned char offset,unsigned char *str)
{
	int len,i,ret;

	//offset >? MAX_CHAR_LEN
	if(offset>MAX_CHAR_LEN) return -1;

	//string length
	len=strlen(str);
	outb(0xce,spp_ctrl);

	//send frame head
	ret=send_char(FRAME_HEAD);
	if (ret!=0) return -2;

	//send offset
	ret=send_char(offset);
	if (ret!=0) return -3;

	//send string
	for (i=0;i<len;i++) {
		ret=send_char(str[i]);
		if (ret==0) continue;
		return -4;
	}

	//send frame end
	ret=send_char(FRAME_END);
	if (ret<=-1) return -5;

    printf("send_frame:len=%d \n",len);
	return 0;
}

//==============================================================================
//Subroutine:	send_cmd, sned command to the lcd(at offset)
//Function:		
//==============================================================================
char send_cmd(unsigned char cmd)
{
	int len,i,ret;

	outb(0xce,spp_ctrl);

	//send frame head	
	ret=send_char(FRAME_HEAD);
	if (ret!=0) return -1;

	//send frame control
	ret=send_char(FRAME_CTL);
	if (ret!=0) return -2;

	//send frame end
    ret=send_char(cmd);
	if (ret!=0) return -3;

	return 0;
}

void main(void)
{
	int i;
	char cmd[MAX_CHAR_LEN]="\
Linux 9.0           \
IPC-8117            \
NET-1713CVD5NA      \
EVOC                \
SHENZHEN            \
GUANGDONG           \
2008.5.4            \
14:10               \
SUNNY               \
ZENG                \
";

	char* str;
	char index;
	int ret;

	unsigned char offset;
	unsigned char ctrl = 0x0;

	offset =0;

	ret=iopl(3);
	if(ret!=0)
	{
		printf("iopl error:%s\n",strerror(errno));
		exit(1);
	}


		printf("IPC-630 Test(Ver:B1) \n");
		

//        printf("Input command(0x00~0xff) \n(bit0:Red Led On \n bit1:Green Led On \n bit2:Beep On \n bit3:Auto Page \n bit7:Reset)\n: ");

	//auto page
	ctrl=0x08;
        ret = send_cmd(ctrl);
        if(ret==0)
            printf("send send_cmd ok!\n");
				else
            printf("send send_cmd failed! \n");


		
		
/*		printf("Input character offset on lcd(0~199): ");
		
		
		//get offset
		scanf("%d",&offset);
    printf("offset =%d \n  ",offset);
    
    //get string
		printf("Input string to be displayed on lcd:");
		scanf("%s",cmd);
*/
		strcpy(g_cbuff,cmd);

		//send data to lcd
		ret=send_frame(offset,g_cbuff);
		if(ret==0)
            printf("send send_frame ok!\n");
		else
            printf("send send_frame failed! \n");

	
	ret=iopl(0);
	if(ret!=0)
	{
		printf("iopl error:%s\n",strerror(errno));
	}	
	
}

⌨️ 快捷键说明

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