并行口设计数字键盘实验

一、  实验内容

并行口实现数字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);

 }

}

posted @ 2015-12-22 13:22  hamburger  阅读(732)  评论(0编辑  收藏  举报