下面代碼只實(shí)現(xiàn)接收一個字符,怎樣改能夠?qū)崿F(xiàn)接收多個字符并顯示出來
#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模擬串口數(shù)據(jù)
sbit a7 = ACC^7;
sbit dula = P2^6;
sbit wela = P2^7;
uchar recbuf = 0x00; //串口接收字符串
uchar dyndis[8]; //點(diǎn)陣每行數(shù)據(jù)
int recsta = 0; //串口數(shù)據(jù)接收標(biāo)志位
unsigned int timecount = 0;
int tabnum = 0;//字符編碼選擇(二維數(shù)組行號)
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 //串行中斷服務(wù)程序
{
uchar Temp; //定義臨時變量
if(RI) //判斷是接收中斷產(chǎn)生
{
RI = 0; //標(biāo)志位清零
Temp = SBUF; //讀入緩沖區(qū)的值
recbuf = Temp; //把值傳給全局變量recbuf
recsta = 1; //置位接收標(biāo)志位
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;
}
}
}
|