如图所示,使用89C51单片机、74HC374、74HC32、8*8点阵模块构成8*24的LED点阵显示器,能从串口接收来自虚拟终端的数字、字符,并在点阵屏上显示出来,每接收一个字符,就将显示屏上现在的字符左移一位,新接收的字符显示上屏幕的最右侧。
请大家帮忙看看这个怎么做,新手小白,自己做了好多次,虚拟终端发送在点阵上显示那一块一直搞不出来,谢谢各位了
单片机源程序如下:
- #include
- #include
- #include
- #define uchar unsigned char
- #define uint unsigned int
- #define ulong unsigned long
- #define PA XBYTE[0xfeff]
- #define PB XBYTE[0xfdff]
- #define PC XBYTE[0xfbff]
- #define PCN XBYTE[0x7fff]
- uchar code ASCII_TAB[480] = //0X20~0X7F之间 ASCII码对应的点阵数据表
- { 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x9e, 0x00, 0x00,
- 0x00, 0x0e, 0x00, 0x0e, 0x00,
- 0x28, 0xfe, 0x28, 0xfe, 0x28,
- 0x48, 0x54, 0xfe, 0x54, 0x24,
- 0x46, 0x26, 0x10, 0xc8, 0xc4,
- 0x6c, 0x92, 0xaa, 0x44, 0xa0,
- 0x00, 0x0a, 0x06, 0x00, 0x00,
- 0x00, 0x38, 0x44, 0x82, 0x00,
- 0x00, 0x82, 0x44, 0x38, 0x00,
- 0x28, 0x10, 0x7c, 0x10, 0x28,
- 0x10, 0x10, 0x7c, 0x10, 0x10,
- 0x00, 0xa0, 0x60, 0x00, 0x00,
- 0x10, 0x10, 0x10, 0x10, 0x10,
- 0x00, 0xc0, 0xc0, 0x00, 0x00,
- 0x40, 0x20, 0x10, 0x08, 0x04,
- 0x7C, 0xA2, 0x92, 0x8A, 0x7C,
- 0x84, 0xC2, 0xA2, 0x92, 0x8C,
- 0x42, 0x82, 0x8A, 0x96, 0x62,
- 0x30, 0x28, 0x24, 0xFE, 0x20,
- 0x4E, 0x8A, 0x8A, 0x8A, 0x72,
- 0x78, 0x94, 0x92, 0x92, 0x60,
- 0x02, 0xE2, 0x12, 0x0A, 0x06,
- 0x6C, 0x92, 0x92, 0x92, 0x6C,
- 0x0C, 0x92, 0x92, 0x52, 0x3C,
- 0x00, 0x6C, 0x6C, 0x00, 0x00,
- 0x00, 0xAC, 0x6C, 0x00, 0x00,
- 0x10, 0x28, 0x44, 0x82, 0x00,
- 0x28, 0x28, 0x28, 0x28, 0x28,
- 0x00, 0x82, 0x44, 0x28, 0x10,
- 0x04, 0x02, 0xA2, 0x12, 0x0C,
- 0x64, 0x92, 0xF2, 0x82, 0x7C,
- 0xFC, 0x22, 0x22, 0x22, 0xFC,
- 0xFE, 0x92, 0x92, 0x92, 0x6C,
- 0x7C, 0x82, 0x82, 0x82, 0x44,
- 0xFE, 0x82, 0x82, 0x44, 0x38,
- 0xFE, 0x92, 0x92, 0x92, 0x82,
- 0xFE, 0x12, 0x12, 0x12, 0x02,
- 0x7C, 0x82, 0x92, 0x92, 0xF4,
- 0xFE, 0x10, 0x10, 0x10, 0xFE,
- 0x00, 0x82, 0xFE, 0x82, 0x00,
- 0x40, 0x80, 0x82, 0x7E, 0x02,
- 0xFE, 0x10, 0x28, 0x44, 0x82,
- 0xFE, 0x80, 0x80, 0x80, 0x80,
- 0xFE, 0x04, 0x18, 0x04, 0xFE,
- 0xFE, 0x08, 0x10, 0x20, 0xFE,
- 0x7C, 0x82, 0x82, 0x82, 0x7C,
- 0xFE, 0x12, 0x12, 0x12, 0x0C,
- 0x7C, 0x82, 0xA2, 0x42, 0xBC,
- 0xFE, 0x12, 0x32, 0x52, 0x8C,
- 0x8C, 0x92, 0x92, 0x92, 0x62,
- 0x02, 0x02, 0xFE, 0x02, 0x02,
- 0x7E, 0x80, 0x80, 0x80, 0x7E,
- 0x3E, 0x40, 0x80, 0x40, 0x3E,
- 0x7E, 0x80, 0x70, 0x80, 0x7E,
- 0xC6, 0x28, 0x10, 0x28, 0xC6,
- 0x0E, 0x10, 0xE0, 0x10, 0x0E,
- 0xC2, 0xA2, 0x92, 0x8A, 0x86,
- 0x00, 0xFE, 0x82, 0x82, 0x00,
- 0x04, 0x08, 0x10, 0x20, 0x40,
- 0x00, 0x82, 0x82, 0xFE, 0x00,
- 0x08, 0x04, 0x02, 0x04, 0x08,
- 0x80, 0x80, 0x80, 0x80, 0x80,
- 0x00, 0x02, 0x04, 0x08, 0x00,
- 0x40, 0xA8, 0xA8, 0xA8, 0xF0,
- 0xFE, 0x90, 0x88, 0x88, 0x70,
- 0x70, 0x88, 0x88, 0x88, 0x40,
- 0x70, 0x88, 0x88, 0x90, 0xFE,
- 0x70, 0xA8, 0xA8, 0xA8, 0x30,
- 0x10, 0xFC, 0x12, 0x02, 0x04,
- 0x18, 0xA4, 0xA4, 0xA4, 0x7C,
- 0xFE, 0x10, 0x08, 0x08, 0xF0,
- 0x00, 0x88, 0xFA, 0x80, 0x00,
- 0x40, 0x80, 0x88, 0x7A, 0x00,
- 0xFE, 0x20, 0x50, 0x88, 0x00,
- 0x00, 0x82, 0xFE, 0x80, 0x00,
- 0xF8, 0x08, 0x30, 0x08, 0xF8,
- 0xF8, 0x10, 0x08, 0x08, 0xF0,
- 0x70, 0x88, 0x88, 0x88, 0x70,
- 0xF8, 0x28, 0x28, 0x28, 0x10,
- 0x10, 0x28, 0x28, 0x30, 0xF8,
- 0xF8, 0x10, 0x08, 0x08, 0x10,
- 0x90, 0xA8, 0xA8, 0xA8, 0x40,
- 0x08, 0x7E, 0x88, 0x80, 0x40,
- 0x78, 0x80, 0x80, 0x40, 0xF8,
- 0x38, 0x40, 0x80, 0x40, 0x38,
- 0x78, 0x80, 0x60, 0x80, 0x78,
- 0x88, 0x50, 0x20, 0x50, 0x88,
- 0x18, 0xA0, 0xA0, 0xA0, 0x78,
- 0x88, 0xC8, 0xA8, 0x98, 0x88,
- 0x00, 0x10, 0x6C, 0x82, 0x00,
- 0x00, 0x00, 0xFE, 0x00, 0x00,
- 0x00, 0x82, 0x6C, 0x10, 0x00,
- 0x10, 0x10, 0x54, 0x38, 0x10,
- 0x10, 0x38, 0x54, 0x10, 0x10};
- uchar dbuf[5]={'A','B','C','D','E'};
- void delay(void)
- {
- uchar i;
- for(i=0;i<250;i++);
- }
- uchar sh[5];
- void disp()
- { uchar dat;
- uchar *pch;
- uchar i;
- uchar j;
- ulong bsel=0x01;
- while(RI==0);//读数据
- RI=0;
- dat=SBUF;
- pch=&ASCII_TAB[(dat-0x20)*5];//指向字符起始列的点阵码
- for(i=0;i<5;i++) //送出字符的5列点阵码
- {
- sh[ i]=*pch;//将获得的数据存入数组
- pch++;
- }
- for(j=0;j<5;j++)
- {
- P1=sh[ i]; //P1口取数组的值
- PC=(uchar)(bsel>>16);
- PB=bsel>>8;
- PA=bsel&0xff;
- bsel=_lrol_(bsel,1);
- delay();
- PC=0x00;
- PB=0x00;
- PA=0x00;
- SBUF=dat;
- while(TI==0);
- TI=0;
- }
- }
- void init_serial(void)
- {
- SCON=0x50;
- TMOD=0x20;
- PCON=PCON&0x7f;
- TH1=-3;
- TL1=-3;
- TR1=1;
- }
- void main(void)
- {
- init_serial();//初始化串行口
- while(1)
- {
- disp();
- }
- }
复制代码
|