这是总图
这是下位机的代码,
#include<reg51.h>
#include<intrins.h>
void delay();//延时
void lie();//列控制
void send8bit(unsigned int n);
void send8bit1(unsigned int n);//发送字函数
sbit P15=P3^3;//主信号
sbit P12=P3^4;//时钟信号
sbit P13=P3^5;//锁存信号
sbit P11=P3^2;//154门控信号
unsigned char count;//列计数器
unsigned char flage;//标志位
unsigned int sum1;//字节数
unsigned char xdata text[2048];//定义外数据存储器?
unsigned char code cctab[640]={
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF00,0x00,0x00,
0x08,0x20,0x44,0x20,0x26,0x7E,0x30,0x80,0x01,0x01,0x20,0x02,0x2E,0x04,0x21,0x88,
0x20,0x50,0x20,0x20,0x20,0xD0,0x23,0x08,0x7C,0x06,0x20,0x03,0x00,0x02,0x00,0x00,
0x00,0x40,0x08,0x40,0x30,0x40,0x24,0x40,0x24,0x40,0x24,0x42,0xA4,0x41,0x64,0xFE,
0x25,0x40,0x26,0x40,0x24,0x40,0x20,0x40,0x28,0x40,0x30,0xC0,0x00,0x40,0x00,0x00,
0x00,0x02,0x00,0x42,0x00,0x22,0x7F,0xB2,0x49,0x02,0x49,0xFE,0x49,0x02,0x49,0x02,
0x49,0x02,0x49,0xFE,0x49,0x02,0xFF,0x92,0x40,0x22,0x00,0x66,0x00,0x02,0x00,0x00,
0x02,0x00,0x02,0x08,0x42,0x10,0x42,0x20,0x42,0x60,0x42,0x02,0x42,0x01,0x43,0xFE,
0x42,0x00,0x42,0x00,0x42,0x40,0xC2,0x20,0x42,0x30,0x06,0x18,0x02,0x00,0x00,0x00,
0x00,0x10,0x00,0x10,0x00,0x10,0xFF,0x10,0x11,0x10,0x11,0x10,0x11,0x10,0x11,0x10,
0x11,0x10,0x11,0x32,0x11,0x11,0x11,0x02,0x33,0xFC,0x11,0x00,0x00,0x00,0x00,0x00,
0x01,0x00,0x02,0x00,0x04,0x00,0x1F,0xFF,0xE0,0x00,0x08,0x01,0x08,0x02,0x08,0x0C,
0x8F,0xF0,0x69,0x02,0x09,0x01,0x09,0x02,0x0B,0xFC,0x19,0x00,0x08,0x00,0x00,0x00,
0x00,0x08,0x20,0x08,0x20,0x09,0x2F,0xFA,0x2A,0xAC,0x2A,0xA8,0x2A,0xA8,0xFA,0xA8,
0x2A,0xA8,0x2A,0xA8,0x2A,0xAC,0x3F,0xFA,0x68,0x0B,0x20,0x18,0x00,0x08,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF00,0x00,0x00
};// han字显示与仿真
unsigned int y;
void recint() interrupt 4 {//接收中断,串行口的中断n=4;
P11=1;//关闭屏幕显示防止屏幕出现乱码;
flage=1;
y=0;
//以下代码为从串行口接受数据存如xdata text[]中;
while(y<1024)
{while(!RI);//空语句判断字符是否收完,ri=1跳出循环执行接收;
text[y]=SBUF;
RI = 0;//清RI
y++;
}
sum1=text[1]*32+64;
return;
}
void main()
{
unsigned char i,j;
unsigned int m=0;
TMOD=0x20;//设置定时器 T1 方式 2
PCON=0x00;//使 SMOD 为 0
TL1=0x0Fd;
TH1=0x0Fd;//波特率为 9600b/s
EA=1;//开全局中断
ET1=0;//关 T1 中断
ES=1;//开串行中断
TR1=1;//开T1定时器
SCON=0x50;//串行方式 1 ,允许接收
flage=0;//标志位置0,发送片内字
P11=1;//关闭显示,防止花屏
if(flage) goto outdisplay;
while(flage==0)
{ count=0x00;
P11=1;
for(j=0;j<1;j++)
P12=0;
P13=0;
{ for(i=1;i<=32;i+=2)
{
send8bit(i+m+32);//从串口发送字模数据
_nop_();
send8bit(i+m+31);
_nop_();
send8bit(i+m); //由于使用移位寄存74hc595,先发送一列的下半部分
_nop_();//延时
send8bit(i+m-1);//后发送一列的上半部分,
_nop_();
lie();//一个字的上半部分和下半部分发送完毕点燃该列。
delay();//调用延时子程序
P11=1;//关列显示
}
}
m+=2;
if(flage) goto outdisplay;//
if(m>256)//字数控制
m=0;
}
outdisplay:while(flage)
{ P11=1;
flage=0;
m=6;
while(flage==0)
{
count=0x00;
P11=1;
P12=0;
P13=0;
{ for(i=1;i<=32;i+=2)
{
send8bit1(i+m+32);//从串口发送字模数据
_nop_();
send8bit1(i+m+31);
_nop_();
send8bit1(i+m); //由于使用移位寄存74hc595,先发送一列的下半部分
_nop_();//延时
send8bit1(i+m-1);//后发送一列的上半部分,
_nop_();
lie();//一个字的上半部分和下半部分发送完毕点燃该列。
delay();//调用延时子程序
P11=1;//关列显示
}
}
m+=2;
if(flage) goto outdisplay;
if(m>sum1)//字数控制
m=2;
}
}
}
void send8bit(unsigned int n)/*机内码发送子程序*/
{
unsigned char q;
for(q=0;q<8;q++)
{
P15=((_cror_(cctab[n],q))&0x1);//右移(7-q)位,从低位到高位取。即595发送,
//为从高到低为:Q7---Q0;
P12=1;//寄存器时钟上跳沿,将一位数据存入移位寄存器。
P12=0;
}
P13=1;//锁存器上跳沿,8位数据存入所存器,e为底允许发送,数据从并口发送
P13=0;
}
void send8bit1(unsigned int n)/*片外数据存贮器发送子程序*/
{
unsigned char q;
for(q=0;q<8;q++)
{
P15=((_cror_(text[n],q))&0x1);//右移(7-q)位,从高位到低位取。即595发送,
//为从高到低为:Q7---Q0;
P12=1;//寄存器时钟上跳沿,将一位数据存入移位寄存器。
P12=0;
}
P13=1;//锁存器上跳沿,8位数据存入所存器,e为底允许发送,数据从并口发送
P13=0;
}
void delay()
{unsigned int n;
for(n=0;n<250;n++)
{;}
}
void lie()//列控制
{
P11=0;//允许列选择
P1=count;
count++;
}
上位机的代码的mscomm该怎么写呢,自己有点不会,请求指导 |