#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单片机