📄 ledtest.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, ®[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, ®[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 + -