并行口设计数字键盘实验

一、  实验内容

并行口实现数字0~9A~FLUPn总共19个键盘,将按键的结果用4位数码管(例如:7SEG-MPX-CA-BLUE)显示(可选——按键控制移位)出来。

二、  实验目的

掌握动态显示、动态扫描键盘的工作原理及硬、软件的设计、调试方法

掌握80C51接口硬件电路设计方法及软件编程方法

了解80C51外部中断的使用和编程方法

三、  实验设备

DELL台式机 + proteus版本6 + keilC51版本7

四、  实验电路图(可打印)

 

 

五、  程序流程图

 

 

六、程序源码(可打印)

#include <reg51.h>

 

void dlms( );

void Keys_Scan();

char PreKey=20,Key=20;

 

 

 

void dlms(char t)

{ char i;

         while(t--)

         {for( i=200;i>0;i--){}

         }

}//delay

 

 

void Keys_Scan()

{

        char Tmp;

         P2=0x00;

         P1 = 0x0f;

        

         Tmp = P1 ^ 0x0f; // 列:P1.0-P1.3输出1

         switch(Tmp)//读出列数

         {

                 case 1: Key = 0; break;

                   case 2: Key = 1; break;

                   case 4: Key = 2; break;

                   case 8: Key = 3; break;

                   default: Key= 20;

         }

 

         P1=0x00;

         P2 = 0x1f;

 

         Tmp = P2^0x1f; //>> 4 ^ 0x0f;//右移

         switch(Tmp)

         {

                 case 1: Key += 0; break;

                   case 2: Key += 4; break;

                   case 4: Key += 8; break;

                   case 8: Key += 12;break;

                   case 16:Key += 16;break;

                  default: Key=16;

         }

         dlms(5);

}

 

void main()

{

          char code  tab[]={0xc0,0xf9,0xa4,0xb0,

          0x99,0x92,0x82,0xf8,

          0x80,0x90,0x88,0x83,

          0xc6,0xa1,0x86,0x8e,

          0xc7,0xc1,0x8c,0x2b};

          P3=0x00;

   while(1)

         {   P1=0x00;

                    P2=0x1f;

                   if(P2!= 0x1f)

                   Keys_Scan();

                   if(PreKey!= Key)

                   {

                           P3 = ~tab[Key];

                             

                            PreKey = Key;

                   }

                   dlms(1000);

 }

}

转载于:https://www.cnblogs.com/johanxu/p/5066361.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值