ledtest.c

来自「本原码为为《嵌入式Linux应用开发详解》一书的配套代码」· C语言 代码 · 共 45 行

C
45
字号
/*驱动LED的示范代码
这段代码只是示范性的,实际使用时应根据开发硬件作相应修改
*/
/*LEDTest.c*/
#include<stdio.h>
#include<signal.h>
#include <asm/param.h>
#include<linux/timer.h>
#include<asm/delay.h>
#include<asm/io.h>
void leddisp(unsigned long d);
struct time_list ledtimer;   //先定义一个长定时器数据结构
ledtimer.expires=2;/*在许多结构中Hz=100,jiffies每增加1,经过的时间为10ms,这里的扫描频率为50Hz,时间间隔为20ms,所以定expires为2*/
ledtimer.function=leddisp; //定义定时时间到了后的处理函数为leddisp()
void init_led()
{
	outb(0x01,0x00)   //关闭显示
	add_timer($ledtimer);//设置好定时器
}

/*定时器处理函数*/
void leddisp(unsigned long d)
{
	/*显示"2",其中p7置为高是为了使能3-8译码器。因为是第一位,位选线为
  000*/
	outw(0x01,0x82);
	udelay(1000);//在这一位上停留1ms,以增强发光亮度
	outw(0x01,0x90); //显示"0",位选线为001
	udelay(1000);
	outw(0x01,0xa0); 		//显示"0",位选线为010
	udelay(1000);
	outw(0x01,0x1b3); 		//显示"3",位选线为011
	udelay(1000);
	outw(0x01,0xc0); 		//显示"0",位选线为100
	udelay(1000);
	outw(0x01,0x1d8); 		//显示"8",位选线为101
	udelay(1000);
	outw(0x01,0xe2); 		//显示"2",位选线为110
	udelay(1000);
	outw(0x01,0xf5); 		//显示"5",位选线为111
	udelay(1000);
	outb(0x01,0x00) 		//一轮显示已经完了,消影输出
	add_timer(&timer_list);	//重新设置定时器
 }

⌨️ 快捷键说明

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