专注电子技术学习与研究
当前位置:单片机教程网 >> MCU设计实例 >> 浏览文章

很牛逼的5个端口接25个开关-电路+程序

作者:佚名   来源:本站原创   点击数:  更新时间:2012年02月21日   【字体:

  这是一个很牛逼的程序,历时2天成功的写出了驱动,单片机io资源得到了最大的利用.




下面是仿真图:

程序是基于pic单片机的,完整的源代码下载: http://www.51hei.com/f/5dk25.rar

#include"pic1687x.h"
#define uchar unsigned char

uchar emp_press()
{
 uchar w,n,dat=0x00;
 TRISC=0XFF;
 PORTC=0XFF;
 w=PORTC;
 if((w|0xe0)!=0xff)
   {
      if(RC4==0)
       dat=25;           

      if(RC3==0)
        dat=24;             

  if(RC2==0)
        dat=23;             

  if(RC1==0)
        dat=22;            

   if(RC0==0)
        dat=21;           }
 return dat;
}
void scan()
{

 static char n,dat,num;
   TRISC=0Xfe;
   PORTC=0Xfe;
   TRISB=0X00;

 num=PORTC;
if((~num)&(0x01<<1))dat=1 ;
else if((~num)&(0x01<<2))dat=2 ;
else if((~num)&(0x01<<3))dat=3 ;
else if((~num)&(0x01<<4))dat=4  ;

TRISC=0Xfd;
PORTC=0Xfd;
 num=PORTC;
if((~num)&(0x01<<0))dat=5 ;
else if((~num)&(0x01<<2))dat=6 ;
else if((~num)&(0x01<<3))dat=7 ;
else if((~num)&(0x01<<4))dat=8  ;
TRISC=0Xfb;
PORTC=0Xfb;
 num=PORTC;
if((~num)&(0x01<<0))dat=9 ;
else if((~num)&(0x01<<1))dat=10;
else if((~num)&(0x01<<3))dat=11 ;
else if((~num)&(0x01<<4))dat=12  ;
TRISC=0Xf7;
PORTC=0Xf7;
 num=PORTC;
if((~num)&(0x01<<0))dat=13 ;
else if((~num)&(0x01<<1))dat=14 ;
else if((~num)&(0x01<<2))dat=15 ;
else if((~num)&(0x01<<4))dat=16  ;
TRISC=0Xef;
PORTC=0Xef;
 num=PORTC;
if((~num)&(0x01<<0))dat=17 ;
else if((~num)&(0x01<<1))dat=18 ;
else if((~num)&(0x01<<2))dat=19;
else if((~num)&(0x01<<3))dat=20 ;
num=emp_press();
if(num)dat=num;
 PORTB=dat; 
for(n=0;n<100;n++);

}


void main()
{

while(1)scan();

}
关闭窗口

相关文章