?? ipc-630-test.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));
}
}
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -