📄 keyboard_zlg.h
字号:
#include <stdio.h>#include <unistd.h>#include <fcntl.h> /* Îļþ²Ù×÷ */#include <sys/ioctl.h> /* ioctl()º¯Êý */#include "i2c.h" /* I2C ÃüÁî */#define I2C_ADDR 0x70 /* zlg7290´Ó»úµØÖ· */int fd;int zlg7290_init();int zlg7290_getkey(unsigned short *key);int zlg7290_sndcmd(unsigned char dat1, unsigned char dat2);void zlg7290_disp(unsigned char *buf, unsigned char num);int zlg7290_init(){ int ret,i; unsigned char buf[9]; fd = open("/dev/i2c/0", O_RDWR); /* ´ò¿ªÉ豸 */ if(fd == -1) { printf("Can't open I2C device!\n"); exit(-1); } ret = ioctl(fd, I2C_TENBIT, 0); /* Ö¸¶¨´Ó»úµØÖ·Îª7bit */ if (ret != 0) { printf("Can't set I2C address bit number.\n"); close(fd); exit(-1); } ret = ioctl(fd, I2C_SLAVE, I2C_ADDR >> 1); /* ÉèÖôӻúµØÖ·,7λµØÖ·,ÐëÓÒÒÆ1λ*/ if (ret != 0) { printf("Can't set I2C slave device address.\n"); close(fd); exit(-1); } /* ÉèÖÃI2C×ÜÏ߯µÂÊСÓÚ30KHz */ ret = ioctl(fd, I2C_S3C2410_SET_SPEED, 3); /* 3ΪI2C×ÜÏ߯µÂÊ·ÖÆµÖµ */ if (ret != 0) { printf("Can't set I2C speed.\n"); close(fd); exit(-1); } /* ¶ÁÈ¡I2C×ÜÏ߯µÂÊ */ ret = ioctl(fd, I2C_S3C2410_GET_SPEED, &i); if (ret != 0) { printf("Can't read I2C speed.\n"); close(fd); exit(-1); } printf("I2C Speed is:%dKHz\n", i); // S3C2410A // buf[7] = 0x05; buf[6] = 0x03; buf[5] = 0x0C; buf[4] = 0x02; buf[3] = 0x04; buf[2] = 0x01; buf[1] = 0x00; buf[0] = 0x0A; /* ÏÔʾ S3C2410A */ zlg7290_disp(buf, 8); }/*********************************************************************************************************** Function name: zlg7290_getkey** Descriptions: get the key value from zlg7290** ´Ózlg7290È¡µÃ°´¼ü¼üÖµ ** Input: unsigned short *key: the gotten key value** Output: 0 : OK -1: fail ** Created by: Ming Yuan Zheng Ö£Ã÷Ô¶ ** Created Date: 2006-01-09 **-------------------------------------------------------------------------------------------------------** Modified by:** Modified Date: **------------------------------------------------------------------------------------------------------********************************************************************************************************/int zlg7290_getkey(unsigned short *key){ unsigned char temp[2]; temp[0] = 1; temp[1] = 0; read: if (write(fd, temp, 1) != 1) /* ·¢ËÍ×ÓµØÖ· */ return -1; if (read(fd, temp, 2) != 2) /* ¶ÁÈ¡¼üÖµ */ return -1; *key = temp[0] + (temp[1] * 256); if(*key != 0) { return 0; } return 1;}/*********************************************************************************************************** Function name: zlg7290_sndcmd** Descriptions: send command to zlg7290** Ïòzlg7290·¢ËÍÃüÁî** Input: unsigned char dat1: command word 1 unsigned char dat2: command word 2** Output: 0 : OK -1: fail ** Created by: Ming Yuan Zheng Ö£Ã÷Ô¶ ** Created Date: 2006-01-09 **-------------------------------------------------------------------------------------------------------** Modified by:** Modified Date: **------------------------------------------------------------------------------------------------------********************************************************************************************************/int zlg7290_sndcmd(unsigned char dat1, unsigned char dat2){ unsigned char temp[3]; temp[0] = 0x07; temp[1] = dat1; temp[2] = dat2; if (write(fd, temp, 3) != 3) return -1; usleep(1000); return 0;}/*********************************************************************************************************** Function name: zlg7290_disp** Descriptions: control zlg7290 to driver led** ¿ØÖÆzlg7290Çý¶¯led** Input: unsigned char *buf: display buffer unsigned char num: display number** Output: NULL** Created by: Ming Yuan Zheng Ö£Ã÷Ô¶ ** Created Date: 2006-01-09 **-------------------------------------------------------------------------------------------------------** Modified by:** Modified Date: **------------------------------------------------------------------------------------------------------********************************************************************************************************/void zlg7290_disp(unsigned char *buf, unsigned char num){ unsigned char i; unsigned char temp[3]; for(i=0; i<num; i++) { temp[0] = 0x07; temp[1] = 0x60+i; temp[2] = *buf; buf++; write(fd, temp, 3); usleep(5000); }}/**************************************************************************** End Of File**************************************************************************/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -