标题:
Proteus从串口接收来自虚拟终端的数字、字符,并在点阵屏上显示出来,每接收一个字符
[打印本页]
作者:
cnbr
时间:
2021-1-6 20:52
标题:
Proteus从串口接收来自虚拟终端的数字、字符,并在点阵屏上显示出来,每接收一个字符
如图所示,使用
89C51
单片机、
74HC374
、
74HC32
、
8*8
点阵模块构成
8*24
的
LED
点阵显示器,能从串口接收来自虚拟终端的数字、字符,并在点阵屏上显示出来,每接收一个字符,就将显示屏上现在的字符左移一位,新接收的字符显示上屏幕的最右侧。
203138hjekj7k8p8e1777f.png
(819.46 KB, 下载次数: 54)
下载附件
2021-1-7 03:47 上传
请大家帮忙看看这个怎么做,新手小白,自己做了好多次,虚拟终端发送在点阵上显示那一块一直搞不出来,谢谢各位了
单片机源程序如下:
#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();
}
}
复制代码
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1