📄 osledkey.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 + -