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

📄 kb_lcd.h

📁 LCD7920汉字液晶操作程序
💻 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 + -