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

📄 display.c

📁 PS/2键盘解码完全有单片机程序实现
💻 C
字号:
/*****************************************************************/ 
/*                                                               */                                                                
/*名称:           PS/2解码+LCD12864显示程序                     */                                                                                                                                                                           
/*功能:       1  解码键盘的串行数据,译出当前按键值             */
/*             2  在LCD12864上显示PS/2键盘上可显示的字符         */
/*             3  实现LCD12864的换行显示,退格等功能             */                                                   
/*难度等级:                   高                                */                                                                     
/* 作者:                 51kaifa                                */
/* 版权:           http://www.51kaifa.com                       */
/*编写日期:        2006.05.20                                   */                                                                                                                                                                                                             
/*****************************************************************/

#include <reg52.h>
#include  <string.h>
#include "tcode.h" //PS/2通码表
#define uchar unsigned char

/**********引脚定义*********/
sbit lck = P3^5; //锁存信号
sbit Key_CLK = P3^2; //PS/2键盘数时钟线
sbit Key_Data= P1^4; //PS/2键盘数据线


/********常用命令及参数定义********/
#define DISPON     0x3f
#define DISPOFF    0x3e
#define DISPFIRST  0xc0
#define SETX       0x40
#define SETY       0xb8
#define LCDBUZY    0x80
#define L          0x00
#define R          0x40
#define LIMIT      0x80

/**********全局变量************/
bit xy,simple,BF;
uchar cbyte, statu;
uchar IntNum=0; 
uchar KeyV=0,uGetvalue=0; 
static unsigned char Key_UP=0, Shift = 0;
static unsigned char DisNum = 0; //显示用指针


/**************函数******************/
void delay3s(void);
void WrL(uchar x);
void WrR(uchar x);
void Lcmcls(void);
void wtcom(void);
void Lcminit (void);
void Putpicture(void);
void VtoH8x16change(uchar *hzbuf);
void Puthalf(uchar *strch,uchar row,uchar col);
void Wrdata(uchar x,uchar row,uchar col);
void Locatexy(uchar row,uchar col);
void vWrite8x16Character(uchar *ch,uchar row,uchar col,bit flag);
void vWrite8x16String(uchar  *str,uchar col, uchar row, bit flag);
void Decode(unsigned char ScanCode);


extern unsigned char  code  help[];//开机显示的帮助信息
extern unsigned char  code  char_Table[95][16];//字符显示点阵


/***********主程序***************/
void main(void)
{   
    P2 = 0xff;
    EX0 = 1; //允许PS/2中断
    IT0 = 0; //低电平有效
    EA = 1;  //开中断
    Lcminit(); //初始化LCD
    Putpicture();
    delay3s();
    while(!BF);//检测接上键盘后准继续
    Lcmcls();//清屏
      do
		{
			if (BF)
				Decode(KeyV);//解码
 			else
				EA = 1; //开中断
		}
	while(1);
}

/***************微秒级延时*****************/
void delay(unsigned int  time)
{ unsigned int i;
    for(i=0;i<time;i++);
 }


/***************约3S延时********************/
void delay3s(void)
{
    delay(50000);
    delay(50000);
    delay(50000);
    delay(50000);
    delay(50000);
    delay(50000);
}

//***********初始化LCD*******************/

void Lcminit (void)
{ 
    cbyte=DISPOFF;
    WrL(cbyte);
    WrR(cbyte);
    cbyte=DISPON;
    WrL(cbyte);
    WrR(cbyte);
    cbyte=DISPFIRST;
    WrL(cbyte);
    WrR(cbyte);
    Lcmcls();
    Locatexy(0,0);
}


/***************LCD清屏********************/
void Lcmcls(void)
{ uchar  i,j;
    for(i=0;i<8;i++){
      delay(6);
        for(j=0;j<LIMIT;j++){
          delay(6);
          Wrdata(0x0,i,j);
         }
     }
}

/**************写左区***************/

void WrL(uchar x)
{
   
   P0=0xFF;//P0口送FF,准备读
   lck = 0;
   P1 = 0x2a;//ELCD=1

⌨️ 快捷键说明

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