按键盘数码管流动显示实验

要求:按下键盘,六个数码管流动显示按下的值。

连线:将片选CS0接到key_LED_CS上

#include  <reg52.h>

#define   LEDLen   6

xdata unsigned char OUTBIT _at_ 0x8002;   // 位控制口
xdata unsigned char OUTSEG _at_ 0x8004;   // 段控制口
xdata unsigned char IN     _at_ 0x8001;   // 键盘读入口

unsigned char LEDBuf[LEDLen];    // 显示缓冲
code unsigned char LEDMAP[] = {  // 八段管显示码 (点不显示,0-F)
  0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07,
  0x7f, 0x6f, 0x77, 0x7c, 0x39, 0x5e, 0x79, 0x71
};

code unsigned char KeyTable[] = {   // 键码定义
  0x16, 0x15, 0x14, 0xff,
  0x13, 0x12, 0x11, 0x10,
  0x0d, 0x0c, 0x0b, 0x0a,
  0x0e, 0x03, 0x06, 0x09,
  0x0f, 0x02, 0x05, 0x08,
  0x00, 0x01, 0x04, 0x07
};

void Delay(unsigned char CNT)
{
  unsigned char i;
  while (CNT-- !=0)
    for (i=100; i !=0; i--);
}

void DisplayLED()
{
  unsigned char i;
  unsigned char Pos;
  unsigned char LED;

  Pos = 0x20;       // 从左边开始显示
  for (i = 0; i < LEDLen; i++) {
    OUTBIT = 0;     // 关所有八段管
    LED = LEDBuf[i];
    OUTSEG = LED;
    OUTBIT = Pos;   // 显示一位八段管
    Delay(2);
    Pos >>= 1;      // 显示下一位
  }
}

unsigned char TestKey()
{
   OUTBIT = 0;            // 输出线置为0
   return (~IN & 0x0f);   // 读入键状态(高四位不用)
}

unsigned char GetKey()
{
  unsigned char Pos;
  unsigned char i;
  unsigned char k;

  i = 6;
  Pos = 0x20;     // 找出键所在列
  do {
    OUTBIT = ~ Pos;
    Pos >>= 1;
    k = ~IN & 0x0f;
  } while ((--i != 0) && (k == 0));

  // 键值 = 列 x 4 + 行
  if (k != 0)
  {
    i *= 4;
    if (k & 2)
      i += 1;
    else if (k & 4)
      i += 2;
    else if (k & 8)
      i += 3;

    OUTBIT = 0;
    do
      Delay(10); while (TestKey());  // 等键释放

    return(KeyTable[i]);  // 取出键码
  } else return(0xff);
}

void main()
{    unsigned int i=0;
   LEDBuf[0] = 0x00;  //如果设置为3F那么最初第一个数码管显示为0
   LEDBuf[1] = 0x00;
   LEDBuf[2] = 0x00;
   LEDBuf[3] = 0x00;
   LEDBuf[4] = 0x00;
   LEDBuf[5] = 0x00;

   while (1) {
     DisplayLED();
     if (TestKey())
     {

         LEDBuf[i++%6] = LEDMAP[GetKey() & 0x0f];
       //LEDBuf[5]=LEDMP[GetKey()&0x0f];
     }
   }
}

时间: 2024-09-27 12:09:08

按键盘数码管流动显示实验的相关文章

数码管流动显示(自己的单片机)

/********************************************************************************** *  标题:                  试验数码管上显示数字( 单片机直接实现位选 共阴极)        * *                                                                                  * *  连接方法:P0与J12 用8PIN排

按键数码管显示实验

要求:能够实现本单片机按下键盘,能够在数码管上显示键盘值. 连线:将片选CS0链接到KEY/LED CS. #define LEDLen 6 xdata unsigned char OUTBIT _at_ 0x8002;   // 位控制口 xdata unsigned char OUTSEG _at_ 0x8004;   // 段控制口 xdata unsigned char IN     _at_ 0x8001;   // 键盘读入口 unsigned char LEDBuf[LEDLen]

android 收回键盘的时候 会显示出上个activity的布局

问题描述 android 收回键盘的时候 会显示出上个activity的布局 如图 收回键盘的时候会显示上一个activity的布局 用的是noscrollListview + Scrollview 解决方案 Scrollview 解决方案二: Scrollview 解决方案三: Scrollview

ArcGIS API for Silverlight 地图元素点闪烁,线流动显示的处理方式

原文:ArcGIS API for Silverlight 地图元素点闪烁,线流动显示的处理方式 <Grid x:Name="LayoutRoot" Background="White"> <!--地图资源样式模版--> <Grid.Resources> <!--预警闪烁标记符号--> <esri:MarkerSymbol x:Name="DefaultMarkerSymbol"> &l

Delphi实现LED数码管仿真显示程序

在电子设备上广泛地使用LED数码管显示数据,在许多应用软件中也经常模拟LED数码管显示数据,使程序画面看起来很有特色.使用Delphi 程序实现LED数码管的仿真显示非常容易,具体步骤如下: 1.启动Delphi 4.0.在"Tools"工具菜单上选择Delphi的图象编辑器"Image Editor",建立一个新的位图,并设定位图的尺寸,宽为:48,高为:64.设定位图的底色为紫红色,前景色为红色.在位图上选择适当宽度的线条画出一个正方的8字,并将方型8字的各个拐

用PS制作遮罩效果之流动显示的文字

效果 制作步骤         注:更多精彩教程请关注三联photoshop教程栏目,三联PS群:182958314欢迎你的加入 分类: PS文字教程

Android 检测键盘显示或隐藏键盘的实现代码

Android 检测键盘是否显示及隐藏键盘的方法~~ Android 中对于键盘的隐藏与显示的文章很多,今天公司项目需求不仅需要键盘隐藏和显示还需要对键盘的状态进行检查,这里做一个简单的实现实例,供大家参考: 实现代码: package com.newland.util; import android.app.Activity; import android.view.View; import android.view.inputmethod.InputMethodManager; /** *

s3c2440嵌入式双机通讯实验

问题描述 s3c2440嵌入式双机通讯实验 ![CSDN移动问答][1] 用s3c2440嵌入式实验箱完成下面的任务: 1.使用一根RS232串口总线连接两个嵌入式开发试验箱,并完成相应的串口通信模块实现代码,使得两个试验箱能够进行串口通信. 2.一个实验箱上采用多线程方式完成数据的采集以及传输工作,一个线程负责采集键盘输入数据,一个线程负责串口通信.使用实验箱键盘作为输入媒介,实验需要用户在键盘上输入"4"个数字,采集线程完成数据的采集后,通信线程通过串口将数据发送至另一个实验箱.

实验5 IIC通讯与AD/接DA接口

1.利用单片机控制PCF8591的AD转换,控制AD0和AD1电位器,在数码光上显示DA转换的值. 2.利用单片机控制PCF8591的DA转换,让发光二极管D1由暗到亮变化,整个过程时间差不多2s左右,再由亮到暗变化,循环变化.   以下代码将1.2实验合并成一个实验. Lab6.1 #include<reg51.h> #include <I2C.H>   #define  PCF8591 0x90    //PCF8591 地址 #define uchar unsigned ch