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

📄 ledtest.c

📁 本字符设备驱动在Linux2.6中测试通过
💻 C
字号:
/*
	led-test.c, need insmod s3c2410-fpga.o first.
	author: wb <wbinbuaa@163.com>
	date:   2005-10-28 11:19
*/

#include <stdio.h>
#include <stdlib.h>
#include <fcntl.h>

//ZLG7290 addr, take the addr as the cmd in the ioctl too.
#define ZLG7290_ADDR_FlashOnOff		0x0c		
#define ZLG7290_ADDR_ScanNum				0x0d		
#define ZLG7290_ADDR_DpRam0			0x10		
#define ZLG7290_ADDR_DpRamBase		ZLG7290_ADDR_DpRam0		
#define ZLG7290_ADDR_DpRam1			(ZLG7290_ADDR_DpRamBase+0x01)		
#define ZLG7290_ADDR_DpRam2				(ZLG7290_ADDR_DpRamBase+0x02)		
#define ZLG7290_ADDR_DpRam3			(ZLG7290_ADDR_DpRamBase+0x03)		
#define ZLG7290_ADDR_DpRam4			(ZLG7290_ADDR_DpRamBase+0x04)		
#define ZLG7290_ADDR_DpRam5				(ZLG7290_ADDR_DpRamBase+0x05)		
#define ZLG7290_ADDR_DpRam6			(ZLG7290_ADDR_DpRamBase+0x06)		
#define ZLG7290_ADDR_DpRam7			(ZLG7290_ADDR_DpRamBase+0x07)		

#define ZLG7290LED_DEV		"/dev/zlg7290/0"
static int fd = -1;
#define DEBUG
#ifdef DEBUG
#define DPRINTF(x...)	printf("Debug:"##x)
#else
#define DPRINTF(x...)
#endif

struct LED_REG {
	unsigned char addr;	//寄存器接口方式
	unsigned char ctrl;
}__attribute__ ((packed)) ;

struct LED_MAP {
	char map;				//显示内容
	unsigned char raw;		//映射段码
};

struct LED_MAP ledmap[] ={
		{'0', 0xfc},
		{'1', 0x60},
		{'2', 0xda},
		{'3', 0xf2},
		{'4', 0x66},
		{'5', 0xb6},
		{'6', 0xbe},
		{'7', 0xe0},
		{'8', 0xfe},
		{'9', 0xf6},
	};

unsigned char led_map_table[128];
unsigned char  led_map(char map);
int led_clear(int fd,  unsigned char addr);
#define CYCLE_LEFT		(1)
#define CYCLE_RIGHT		(2)
int led_cycle(int fd, int direction);
struct LED_REG reg[8];

int main(int argc, char** argv)
{      int  m,n,q; 
	int i,j,k;
	if((fd=open(ZLG7290LED_DEV, O_RDWR))<0){
                printf("Error opening %s ZLG7290 device\n", ZLG7290LED_DEV);
                return 1;
        }
	
	led_map_init();								//led 段码映射
	//clear all leds
	for(i=0; i<=7; i++) {
		led_clear(fd, ZLG7290_ADDR_DpRam0+i);
	}

	for(i=0; i<=7; i++) {
		reg[i].addr=ZLG7290_ADDR_DpRam0+i;
		reg[i].ctrl=led_map('0'+i);					//设定LED 显存内容
		write(fd, &reg[i], sizeof(struct LED_REG));
	}   while(1)     {     for(m=0;m<10;m++)      {       for(n=0;n<8;n++)          {           q=(m+n)%10;           reg[n].addr=ZLG7290_ADDR_DpRam0+n;
           reg[n].ctrl=led_map('0'+q);	           write(fd, &reg[n], sizeof(struct LED_REG));            }        sleep(4);       }
     }
      close(fd);
	return 0;
}

int led_map_init()
{
	int i;
	for(i=0;i<sizeof(ledmap)/sizeof(ledmap[0]);i++){
		led_map_table[ledmap[i].map]=ledmap[i].raw;
	}
	return 0;
}

unsigned char  led_map(char map)
{
	return led_map_table[map];
}

int led_clear(int fd,  unsigned char addr)
{
	struct LED_REG reg;
	
	reg.addr=addr;
	reg.ctrl=0;
	ioctl(fd, reg.addr, reg.ctrl);
  }



⌨️ 快捷键说明

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