您当前的位置:五五电子网电子知识单片机-工控设备PIC单片机PIC单片机扩展8255A并口 正文
PIC单片机扩展8255A并口

PIC单片机扩展8255A并口

点击数:7711 次   录入时间:03-04 11:58:09   整理:http://www.55dianzi.com   PIC单片机
#include <pIC.h>
__CONFIG(0x3B31);
#define A0 RB0
#define A1 RB1
#define CS RB2
#define LE RD0
#define WR RD6
#define RD RD7
const unsigned char tab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e,0xff};//0-F-全灭-共阳极数码管
unsigned char tmp[]={0,0,0,0,0,0,0,0};
void delay1ms(unsigned int x)
{
 unsigned char i;
 for(;x>0;x--)
  for(i=0;i<165;i++); 
}
void init()
{
 TRISB=0x00;
 PORTB=0x00;
 TRISD=0x00;
 PORTD=0x00;
 LE=0;WR=1;RD=1;     //关373,禁止8255读写
}
void init_8255()
{
 LE=1;A1=1;A0=1;CS=0;   //开373,发送写控制器命令,CS片选允许
 LE=0;       //锁住373,保持A1.A0,CS
 PORTB=0x80;      //发送控制命令
 WR=0;       //打开写入8255信号
 NOP();NOP();
}
void write_data(unsigned char comm,unsigned char data)  //comm:0=A,1=B,2=C
{
 if(comm==0)
 {
  WR=1;
  LE=1;A1=0;A0=0;CS=0;
  LE=0;
  PORTB=data;
  WR=0;
  NOP();NOP();
 }
 if(comm==1)
 {
  WR=1;
  LE=1;A1=0;A0=1;CS=0;
  LE=0;
  PORTB=data;
  WR=0;
  NOP();NOP();
 }
 if(comm==2)
 {
  WR=1;
  LE=1;A1=1;A0=0;CS=0;
  LE=0;
  PORTB=data;
  WR=0;
  NOP();NOP();
 }  
}
void display()
{
 unsigned char i,LED;
 LED=0x01;
 for(i=0;i<8;i++)
 {
  write_data(0,tab[tmp[i]]); 
  write_data(1,LED); 
  LED<<=1;
  delay1ms(2);
  write_data(1,0x00);    
 }
}
void main()
{
 unsigned char i,j,RR[24];
 init();
 init_8255();
 while(1)
 {
  for(i=0;i<24;i++)   //全部赋值为16,即显示为空,此处可精减,但演示用无所谓了
   RR[i]=16;
  RR[8]=2;RR[9]=0;RR[10]=0;RR[11]=9;RR[12]=0;RR[13]=7;RR[14]=1;RR[15]=2;
  for(j=0;j<16;j++)
  {
   for(i=0;i<8;i++)  //将RR[16]开始内部赋值tmp[]
    tmp[i]=RR[16+i];
   for(i=0;i<23;i++)
    display();
   for(i=23;i>0;i--)  //此处将RR[]右移一位数组
    RR[i+1]=RR[i]; 
  }
 }  
}


本文关键字:单片机  PIC单片机单片机-工控设备 - PIC单片机