下面代码只实现接收一个字符,怎样改能够实现接收多个字符并显示出来
#ifndef _CONFIG_H
#define _CONFIG_H
#ifndef _ENCODE_H
#define _ENCODE_H
#include <reg52.h>
#define DEBUG 1
#define uchar unsigned char
void out_simuseri(uchar data_buf);
sbit simuseri_CLK = P2^4; //用P2^4模拟串口时钟
sbit simuseri_DATA = P2^5; //用P2^5模拟串口数据
sbit a7 = ACC^7;
sbit dula = P2^6;
sbit wela = P2^7;
uchar recbuf = 0x00; //串口接收字符串
uchar dyndis[8]; //点阵每行数据
int recsta = 0; //串口数据接收标志位
unsigned int timecount = 0;
int tabnum = 0;//字符编码选择(二维数组行号)
uchar cnt = 0;
uchar tab[8] = {0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80};
uchar code digittab[36][8]={
{0x00,0x38,0x44,0x44,0x44,0x7C,0x44,0x44}, //A
{0x00,0x3C,0x44,0x44,0x3C,0x44,0x44,0x3C}, //B
{0x00,0x78,0x04,0x04,0x04,0x04,0x04,0x78}, //C
{0x00,0x3C,0x44,0x44,0x44,0x44,0x44,0x3C}, //D
{0x00,0x7C,0x04,0x04,0x7C,0x04,0x04,0x7C}, //E
{0x00,0x7C,0x04,0x04,0x7C,0x04,0x04,0x04}, //F
{0x00,0x38,0x44,0x04,0x04,0x74,0x44,0x38}, //G
{0x00,0x44,0x44,0x44,0x7C,0x44,0x44,0x44}, //H
{0x00,0x38,0x10,0x10,0x10,0x10,0x10,0x38}, //I
{0x00,0x38,0x10,0x10,0x10,0x10,0x14,0x18}, //J
{0x00,0x04,0x24,0x14,0x0C,0x14,0x24,0x04}, //K
{0x00,0x04,0x04,0x04,0x04,0x04,0x04,0x7C}, //L
{0x00,0xC6,0xAA,0xAA,0x92,0x82,0x82,0x82}, //M
{0x00,0x42,0x46,0x4A,0x52,0x62,0x42,0x00}, //N
{0x00,0x3C,0x42,0x42,0x42,0x42,0x42,0x3C}, //O
{0x00,0x3C,0x44,0x44,0x3C,0x04,0x04,0x04}, //P
{0x00,0x3C,0x42,0x42,0x42,0x52,0x62,0x7C}, //Q
{0x00,0x3C,0x44,0x44,0x3C,0x0C,0x14,0x64}, //L
{0x00,0x38,0x44,0x04,0x38,0x40,0x44,0x38}, //S
{0x00,0x7C,0x10,0x10,0x10,0x10,0x10,0x00}, //T
{0x00,0x42,0x42,0x42,0x42,0x42,0x42,0x3C}, //U
{0x00,0xC6,0x44,0x44,0x44,0x28,0x28,0x10}, //V
{0x00,0xDB,0x5A,0x5A,0x5A,0x5A,0x7E,0x24}, //W
{0x00,0x42,0x24,0x18,0x18,0x24,0x42,0x00}, //X
{0x41,0x22,0x14,0x08,0x08,0x08,0x08,0x08}, //Y
{0x00,0x7C,0x40,0x20,0x10,0x08,0x04,0x7C}, //Z
};
void init_com() //波特率9600
{
SCON = 0x50 ;
PCON |= 0x00 ;
TMOD |= 0x20 ;
TH1 = 0xFD ;
TH1 = 0xFD ;
IE |= 0x90 ;
TR1 = 1 ;
TI=1;
}
void Init_IO()
{
P0 = 0x00;
simuseri_CLK = 0;
simuseri_DATA = 0;
P0=0xff;
dula=1;
wela=1;
P0=0xff;
wela=0;
}
void Init_Timer()
{
TMOD |= 0x01;
TH0 = (65536-3000)/256;
TL0 = (65536-3000)%256;
TR0 = 1;
ET0 = 1;
}
void out_simuseri(uchar data_buf)
{
uchar i;
i = 8;
ACC = data_buf;
do
{
simuseri_CLK = 0;
simuseri_DATA = a7;
simuseri_CLK = 1;
ACC = ACC << 1;
} while(--i != 0);
}
void main()
{
init_com();
Init_IO();
Init_Timer();
EA = 1; //开总中断
while(1);
}
void UART_SER(void) interrupt 4 //串行中断服务程序
{
uchar Temp; //定义临时变量
if(RI) //判断是接收中断产生
{
RI = 0; //标志位清零
Temp = SBUF; //读入缓冲区的值
recbuf = Temp; //把值传给全局变量recbuf
recsta = 1; //置位接收标志位
cnt = 0;
//tabnum=10;
if ((recbuf >= 'A') && (recbuf <= 'Z'))
{
tabnum = recbuf - 65 ;
}
}
}
void t0(void) interrupt 1 using 0
{
TH0 = (65536-3000)/256;
TL0 = (65536-3000)%256;
//out_simuseri(0x00);
P0 = 0xff; //消隐
if (recsta)
{
out_simuseri(tab[cnt]);
P0 = ~digittab[tabnum][cnt];
cnt++;
if(cnt == 8)
{
cnt = 0;
}
timecount++;
if(timecount == 333)
{
timecount = 0;
}
}
}
|