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

📄 osledkey.c

📁 基于微芯力公司的STR71x开发平台的ARM7
💻 C
字号:
#include "71x_lib.h"
//#include "ledkey.h"

void OSLedCodeDisp(u8 digit,u8 num);
void OSEnableLedKey(void);
void OSScanLed(void);


static u8 *LedSeg=(u8*)0x660f8000;		//LED SEG output
static u8 *LedSel=(u8*)0x660f0000;		//LED digit select, bitmap, active  low


//=========================================================================
//7-seg LED display functions
//=========================================================================

//a:0x01, b:0x02, c:0x04, d:0x08, e:0x10, f:0x20, g:0x40, p:0x80
//常用显示符号的LED7段编码
u8 OSSegCode[32]={0x3f /*'0'*/,	0x06 /*'1'*/,	0x5b /*'2'*/,	0x4f /*'3'*/,
				0x66 /*'4'*/,	0x6d /*'5'*/,	0x7d /*'6'*/,	0x07 /*'7'*/,
				0x7f /*'8'*/,	0x6f /*'9'*/,	0x77 /*'A'*/,	0x7c /*'b'*/,
				0x39 /*'C'*/,	0x5e /*'d'*/,	0x79 /*'E'*/,	0x71 /*'F'*/,
				0x38 /*'L'*/,	0x76 /*'H'*/,	0x73 /*'P'*/,	0x80 /*'.'*/,
				0x00 /*' '*/,	0x40 /*'-'*/,	0x08 /*'_'*/,	0x00 /*' '*/,
				0x00 /*' '*/,	0x00 /*' '*/,	0x00 /*' '*/,	0x00 /*' '*/,
				0x00 /*' '*/,	0x00 /*' '*/,	0x00 /*' '*/,	0x00 /*' '*/ };

//用于最新的一批板子:段选低电平有效,位选高电平有效
static u8 OSLedcode[6];
static u8 OSLedselCnt=0;	//

//按序号显示数字和常用符号
//num :序号 0-31,  digit : LED位0-5,right to left
//num>31时,显示num/32的余数+小数点
void OSLedCodeDisp(u8 digit,u8 num)
{
	u32 dot=0;
	
	if(num>31){dot=0x80;}
	if(digit>5) digit=5;
	
	OSLedcode[digit]=~(OSSegCode[(0x1f&num)]|dot);	//save the code

//	*LedSeg=ledcode[digit];			//update seg data
//	*LedSel=ledselbitmap;			//select the led to display ON
	
}
//显示原始LED段编码
//seg :编码 0-255,  digit : LED位0-5,right to left
void OSLedSegDisp(u8 digit,u8 seg)
{
//	int k=1;
	
	if(digit>5) digit=5;
//	k=k<<digit;
	
	OSLedcode[digit]=~seg;	//save the code
//	ledselbitmap|=(k);		//set this led ON
	
//	*LedSeg=ledcode[digit];	//update seg data
//	*LedSel=ledselbitmap;	//select the led to display ON
	
}
void OSScanLed(void)
{
	u32 bit=0x01<<OSLedselCnt;
	*LedSel&=~bit;
	if(++OSLedselCnt>5) OSLedselCnt=0;
	*LedSeg=OSLedcode[OSLedselCnt];
	bit=0x01<<OSLedselCnt;
	*LedSel|=bit;
}


//=========================================================================
// scankey functions
//=========================================================================


//扫描键盘得到的按键序号 0-15,扫描码[],键盘显示数字()与行列对应关系 
//			d3				d2				d1				d0 
//p2.12		12[0x1000](1)	8 [0x0100](2)	4[0x0010](3)	0[0x0001](4)
//p2.13		13[0x2000](5)	9 [0x0200](6)	5[0x0020](7)	1[0x0002](8)
//p2.14		14[0x4000](9)	10[0x0400](0)	6[0x0040](A)	2[0x0004](B)
//p2.15		15[0x8000](C)	11[0x0800](D)	7[0x0080](E)	3[0x0008](E)
//
//注意行扫描输出为低电平有效,在扫描函数中取反得到上述扫描码
//

//static u8 OSLabeledKey[16]={4,8,0xb,0xf,3,7,0xa,0xe,2,6,0,0xd,1,5,9,0xc};

/****************************************************
使能键盘输入功能,注意在71x_conf.h中打开编译开关:
#define _EMI
#define _GPIO
#define _GPIO2
*****************************************************/
void OSEnableLedKey(void)
{
	GPIO_Config(GPIO2, 0x000F, GPIO_AF_PP);	//enable CS0-CS3
	EMI_Config(3, EMI_ENABLE | EMI_WAITSTATE(5) | EMI_SIZE_16); 	//enable bank3
	GPIO_Config(GPIO2, 0xf000, GPIO_IN_TRI_TTL);					//set P2.12-P2.15 as input
}


⌨️ 快捷键说明

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