127-PS2键盘输入1602液晶显示

  • Q8_758632
    了解作者
  • 30.6KB
    文件大小
  • rar
    文件格式
  • 0
    收藏次数
  • VIP专享
    资源类型
  • 0
    下载次数
  • 2022-06-14 10:02
    上传日期
127-PS2键盘输入1602液晶显示,单片机程序
127-PS2键盘输入1602液晶显示.rar
  • 127-PS2键盘输入1602液晶显示
  • ps2键盘1602显示.plg
    193B
  • main.c
    618B
  • ps2键盘1602显示.Opt
    1.4KB
  • ps2键盘11602显示.plg
    194B
  • obj
  • 1602.obj
    6.5KB
  • ps2键盘1602显示.plg
    193B
  • ps2键盘1602显示.hex
    2.9KB
  • ps2键盘1602显示.m51
    16.4KB
  • delay.lst
    1.9KB
  • delay.obj
    1.1KB
  • 1602.lst
    5.9KB
  • ps2键盘1602显示
    14.1KB
  • main.obj
    2.6KB
  • main.lst
    1.8KB
  • ps2.lst
    8.3KB
  • ps2.obj
    6.2KB
  • ps2键盘1602显示.uv2
    2.1KB
  • 1602.h
    769B
  • ps2键盘1602显示_Opt.Bak
    1.4KB
  • delay.h
    654B
  • 1602.c
    3KB
  • scancodes.h
    1.5KB
  • delay.c
    738B
  • ps2.h
    242B
  • ps2.c
    3.8KB
内容介绍
/*----------------------------------------------- 说明:此程序使用标准PS2键盘输入,LCD1602液晶屏输出显示。此样例仅作测试使用 晶振使用12M或者11.0592M,本键盘使用部分字母和数字测试,其他按键不能使用,用 户可以自行扩展。由于开发板和程序的各种参数,程序中没有使用奇偶校验,不保证没有 误码,校验程序请自行添加。 -------------------------------------------------*/ #include<reg52.h> //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义 #include "scancodes.h" #include "ps2.h" #include "1602.h" sbit Key_Data = P3^3 ; //定义Keyboard引脚 sbit Key_CLK = P3^2; //使用中断 bit BF=0; bit Shift; //定义上档键标志 bit Key_UP; //定义通码断码标志 unsigned char KeyV; unsigned char IntNum; unsigned char DisNum; /*----------------------------------------------- 外部中断读入信息 -----------------------------------------------*/ void Keyboard_out(void) interrupt 0 { if ((IntNum > 0) && (IntNum < 9)) { KeyV = KeyV >> 1; //因键盘数据是低>>高,结合上一句所以右移一位 if (Key_Data) KeyV = KeyV | 0x80; //当键盘数据线为1时到最高位 } IntNum++; while (!Key_CLK); //等待PS/2CLK拉高 if (IntNum > 10) { IntNum = 0; //当中断11次后表示一帧数据收完,清变量准备下一次接收 BF = 1; //标识有字符输入完了 EA = 0; //关中断等显示完后再开中断 } } /*----------------------------------------------- 解码信息 注意:如SHIFT+G为12H 34H F0H 34H F0H 12H 也就是说shift的通码+G的通码+shift的断码+G的断码 -----------------------------------------------*/ void Decode(unsigned char ScanCode) // { unsigned char TempCyc,Val; if (!Key_UP) //当键盘按下时 { switch (ScanCode) { case 0xF0 : // 当收到0xF0,Key_UP置1表示断码开始 Key_UP = 1; break; case 0x12 : // 左 SHIFT Shift = 1; break; case 0x59 : // 右 SHIFT Shift = 1; break; default: if(!Shift) //如果SHIFT没按下 { for (TempCyc = 0;(UnShifted[TempCyc][0]!=ScanCode)&&(TempCyc<59); TempCyc++); //查表显示 if (UnShifted[TempCyc][0] == ScanCode) { Val= UnShifted[TempCyc][1]; LCD_Write_Char(DisNum%16,DisNum/16,Val); DisNum++; if(DisNum==33) { LCD_Clear(); //清屏 DisNum=0; //重头写数据 } } } else //按下SHIFT { for(TempCyc = 0; (Shifted[TempCyc][0]!=ScanCode)&&(TempCyc<59); TempCyc++); //查表显示 if (Shifted[TempCyc][0] == ScanCode) { Val= Shifted[TempCyc][1]; LCD_Write_Char(DisNum%16,DisNum/16,Val); DisNum++; if(DisNum==33) { LCD_Clear(); //清屏 DisNum=0; //重头写数据 } } } break; } } else { Key_UP = 0; switch (ScanCode) //当键松开时不处理判码,如G 34H F0H 34H 那么第二个34H不会被处理 { case 0x12 : // 左 SHIFT Shift = 0; break; case 0x59 : // 右 SHIFT Shift = 0; break; } } BF = 0; //标识字符处理完了 } /*----------------------------------------------- ps2初始化(实际初始化外部中断) -----------------------------------------------*/ void PS2_Init(void) { IT1 = 0; //设外部中断1为低电平触发 EA = 1; //外部中断开 EX0 = 1; //开中断 } /*----------------------------------------------- 读取键盘值 -----------------------------------------------*/ void Read_KeyBoard(void) { if (BF) Decode(KeyV); else EA = 1; //开中断 }
评论
    相关推荐
    • 单片机课件
      单片机的课件及例题, 单片机的课件及例题, 单片机的课件及例题, 单片机的课 件及例题,
    • 爱上单片机
      一本电子爱好者都能看懂,会边看边笑的单片机入门书籍,作者杜洋曾在《无线电》上发表过“趣味单片机制作专题”、“单片机编程魔法学校”等深受读者喜爱、让无数单片机入门者热血沸腾的系列文章。本书通过生动的语言...
    • 单片机资料
      内含30个单片机应用开发的资料,包括配套单片机入门PPT。
    • 单片机课件
      单片机课的课件,对单片机的基础进行了全面的概述,也有非常精细的指导。
    • 单片机工具
      单片机工具 供单片机学习使用 免费资源 日后还会有更多资源 请联系我
    • 单片机
      单片机c 和汇编程序
    • 单片机课件
      单片机课件 ppt文件格式 介绍了单片机的结构、程序设计、定时器、中断等
    • 单片机教程
      这是一个单片机的教程,可以用于初次学习单片机的人学习。
    • 单片机入门
      很好的单片机学习资源,入门比较好适合对单片机的学习有兴趣的人,而且是名校的精彩讲解,
    • 单片机
      利用protues仿真实现基于51单片机的大棚温湿度检测系统设计