📄 kb_lcd.h
字号:
/****************************************************************************
* *
* File: KB.H (Header for KB.C) *
* *
* Created: 09.01.06 *
* *
* Author: 王凤秀 *
* *
* Compiler: KEIL C51 V6.23 *
* *
* Description: MP3调度机键盘模块程序. *
* *
*****************************************************************************
* *
* Version | Date | Description *
* --------+----------+----------------------------------------------------- *
* V1.0 | 09.01.06 | 原始文本 *
* *
****************************************************************************/
#ifdef _KB_LCD_GLOBALS
#define _KB_LCD_EXT
#else
#define _KB_LCD_EXT extern
#endif
enum KB_STATUS {
IDLE, //当前键盘空闲,或键入的键已经取走了
P_IDLE, //当前键盘空闲.但是最后键入的键尚未取走.
PUSH //键盘正处于按下状态
};
//端口定义
sbit K_LED = P3 ^ 6; //有按键时亮
sbit C_LED = P3 ^ 7; //SPI通信时亮.
//通信接口管脚分配
// 1.Vcc
// 2.KL_READY(P1^7)--初始化为高电平;
// 3.KL_DATA(模块使用P1^5)--初始化为高电平;
// 4.KL_DATA_READY(P1^6)--初始化为高电平;
// 5.KL_INT(P3^2)--初始化为高电平;
// 6.KL_REQ(P3^5)--初始化为高电平;
// 7.KL_SCK(P3^3)--初始化为低电平;
// 8.RSV0(P3^4),保留.
// 9.GND
// 10.GND.
sbit KL_READY = P1 ^ 7;
sbit KL_DATA = P1 ^ 5;
sbit KL_DATA_READY = P1 ^ 6;
sbit KL_INT = P3 ^ 2;
sbit KL_REQ = P3 ^ 5;
sbit KL_SCK = P3 ^ 3;
//背光端口定义
sbit BL_PORT = P3 ^ 1;
//定义时钟液晶屏端口
sbit LCD_scl = P2 ^ 3;
sbit LCD_sda = P2 ^ 4;
//LED端口定义
sbit KB_Indicator =P3 ^ 6; //有键盘按下时亮
sbit SPI_Indicator =P3 ^ 7; //SPI通信时亮
//宏定义
#define Dis_ALE() AUXR |= 0x01
//看门狗 For AT89S52
#define TOGGLE_WD() WDTRST=0x1E;WDTRST=0xE1
#define ON 1
#define OFF 0
//常数定义
#define RBufferLen 0x10
#define TBufferLen 0x10
//#define C_TH0 0xDF
#define C_TH0 0xB1
#define C_TL0 0xDF //10MS延迟常数,晶体=4.9Mhz.
#define T_400MS 0x28 //40*10=300MS
#define T_500MS 0x32 //半秒延迟用.
#define T_2500MS 0xFA //2.5秒延迟,显示日历用.
#ifdef _KB_LCD_GLOBALS
uchar code CODE_TAB[16] ={
0xFC, //0
0x60, //1
0xDA, //2
0xF2, //3
0x66, //4
0xB6, //5
0xBE, //6
0xE0, //7
0xFE, //8
0xF6, //9
0xEE, //A
0x3E, //b
0x9C, //C
0x7A, //d
0x9E, //E
0x8E //F
};
#endif
// Global Variables
_KB_LCD_EXT bdata uchar Tran_KB_Status; //正在传送数据字
_KB_LCD_EXT bdata uchar Receive_KB_Status; //正在传送数据字
#ifdef _KB_LCD_GLOBALS
sbit Receive_Bit = Receive_KB_Status ^ 0; //准备送出的位
sbit Tran_Bit = Tran_KB_Status ^ 7; //准备送出的位
#endif
//_KB_LCD_EXT enum KB_STATUS Last_KB_Status; //保存在本次键盘扫描之前,键盘所处的状态.
//_KB_LCD_EXT uchar data Last_KB_Code;
_KB_LCD_EXT uchar data DorT_Cnt;
sbit c1 = P2 ^ 5; //键盘列端口
sbit c2 = P2 ^ 6;
sbit c3 = P2 ^ 7;
sbit RS = P2 ^ 0; //LCD命令数据
sbit RW = P2 ^ 1; //LCD读写
sbit E = P2 ^ 2; //LCD使能
//code uchar new[]={"0123456789ABCDE"};
//uchar newh;
_KB_LCD_EXT uchar data new_kb_code;
_KB_LCD_EXT uchar data old_kb_code;
_KB_LCD_EXT uchar data c;
_KB_LCD_EXT bit flag_kb;
_KB_LCD_EXT bit flag_kb_error;
//SPI通信单元
_KB_LCD_EXT bit Reply_Flag; //=TRUE则命令有应答信息.
_KB_LCD_EXT bit CmdValid; //命令有效
_KB_LCD_EXT bit Half_Second_Flag; //半秒信号
_KB_LCD_EXT uchar idata RBuffer[RBufferLen]; //SPI总线命令接收缓冲区
_KB_LCD_EXT uchar idata TBuffer[TBufferLen]; //SPI总线命令发送缓冲区
_KB_LCD_EXT uchar data RIndex; //接收缓冲区指针
_KB_LCD_EXT uchar data TIndex; //发送缓冲区指针
_KB_LCD_EXT uchar data RBIndex; //接收缓冲区位指针
_KB_LCD_EXT uchar data TBIndex; //发送缓冲区位指针
_KB_LCD_EXT uint data SPI_Cnt; //SPI总线出错延迟计数
//_KB_LCD_EXT uchar data P1_Mirror; //P1口的当前值
//_KB_LCD_EXT uchar data P2_Mirror; //P2口的当前值
_KB_LCD_EXT uchar data Cmd; //存放 当前SPI总线命令.
//_KB_LCD_EXT uchar data Cur_KB; //存放当前的键盘扫描码
//_KB_LCD_EXT uchar data Old_KB; //存放上次的键盘扫描码
_KB_LCD_EXT uchar idata New_DateTime[7]; //存放当前 时/分/秒/标记单元
//标记单元依次是:"进","出","外","归","拔",后秒点,"置"和"插"(对应于B7....B0).
//前秒点总是亮的
_KB_LCD_EXT uchar lipage ,guangpage, page,high;
_KB_LCD_EXT bit flag_li,flag_guang,flag_function;
_KB_LCD_EXT uchar li_guang_count;
_KB_LCD_EXT bit Afunction; //功能键标志
_KB_LCD_EXT bit Bfunction;
//_KB_LCD_EXT uchar page;
_KB_LCD_EXT code uchar lichar[]={"播0播1播2播3"};
_KB_LCD_EXT code uchar guangchar[]={"置0"};
#ifdef _KB_LCD_GLOBALS
uchar bdata datetime_buffer[7]; //内存中存放日期和时间段信息的缓冲区;
sbit F_RUN=datetime_buffer[0]^0; //进
sbit F_OUT=datetime_buffer[1]^0; //出
sbit F_OUTER=datetime_buffer[2]^0; //外
sbit F_FIRSTC=datetime_buffer[3]^0; //:
sbit F_RTN=datetime_buffer[4]^0; //归
sbit F_POP=datetime_buffer[5]^0; //拔
sbit F_LASTC=datetime_buffer[6]^7; //:
sbit F_SET=datetime_buffer[6]^6; //置
sbit F_PUSH=datetime_buffer[6]^5; //插
bit DorT; //=TRUE 显示年月日 =FALSE 显示时分秒
#else
extern uchar bdata datetime_buffer[7];
#endif
_KB_LCD_EXT bit Auto_Watch; //自动跑钟标志.
_KB_LCD_EXT uchar Watch_Cnt;
_KB_LCD_EXT uchar data Timer0Cnt;
_KB_LCD_EXT bit Tran_Flag; //=TRUE 正在传送 =FALSE 传送空闲
_KB_LCD_EXT bit Speed_Flag; //=TRUE 收到速度计数
_KB_LCD_EXT data uchar Tran_count; //传送位数计数单元
_KB_LCD_EXT bdata uchar KB_Status;
//_KB_LCD_EXT uchar KB_Code; //存放键盘扫描码
//_KB_LCD_EXT uchar Old_KB_Code; //存放上次键盘扫描码
_KB_LCD_EXT uchar Gutmp; //全局临时工作变量
// Global Prototypes
_KB_LCD_EXT uchar singal[13]={" "};
_KB_LCD_EXT bit big;
_KB_LCD_EXT void delay_8us_NOP(void);
_KB_LCD_EXT void delay_50us(uchar _50us);
_KB_LCD_EXT void delay_1ms(uchar _1ms);
_KB_LCD_EXT uchar Get_KB(void);
_KB_LCD_EXT void SPI_Reply(void);
_KB_LCD_EXT void kb(void);
_KB_LCD_EXT void kbchuli(void);
_KB_LCD_EXT uchar scankbcode(void);
_KB_LCD_EXT void main(void);
_KB_LCD_EXT void init(void);
_KB_LCD_EXT void Scan_KB(void);
_KB_LCD_EXT void cmd_execution(void);
void delay_50us_NOP(void);
// Interrupt Service Routines
void isr_int0(void);
void isr_Timer0(void);
void Get_TimeCode(void);
void LCD_Refresh(void);
void INC_Second(void);
uchar Bcd_To_Bin(uchar _DATA);
uchar Bin_To_Bcd(uchar _DATA);
_KB_LCD_EXT void delay_ms(void);
_KB_LCD_EXT void d_us(void);
_KB_LCD_EXT void lcd_send_data(uchar d);
_KB_LCD_EXT void clear(uchar LandR,uchar _Len);
_KB_LCD_EXT void lcd_display(uchar row,uchar col,uchar * string);
_KB_LCD_EXT void displaychar(void);
_KB_LCD_EXT void lcd_send_com(uchar d);
_KB_LCD_EXT void lcd_display_Str(uchar row,uchar col,uchar * string);
_KB_LCD_EXT void lcd_display_char(uchar row,uchar col,_Len,uchar * string);
_KB_LCD_EXT void wait_LCD_NBusy(void);
_KB_LCD_EXT uchar LCD_Get_COM(void);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -