專注電子技術(shù)學(xué)習(xí)與研究
當(dāng)前位置:單片機(jī)教程網(wǎng) >> MCU設(shè)計(jì)實(shí)例 >> 瀏覽文章

很牛逼的5個(gè)端口接25個(gè)開關(guān)-電路+程序

作者:佚名   來源:本站原創(chuàng)   點(diǎn)擊數(shù):  更新時(shí)間:2012年02月21日   【字體:

  這是一個(gè)很牛逼的程序,歷時(shí)2天成功的寫出了驅(qū)動(dòng),單片機(jī)io資源得到了最大的利用.




下面是仿真圖:

程序是基于pic單片機(jī)的,完整的源代碼下載: http://www.torrancerestoration.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();

}
關(guān)閉窗口

相關(guān)文章