我有个电路,AT89C51的,
P1.0-P1.5接键盘的行线,P2.0-P2.3接键盘的列线.就是带个4*6的键盘;
P0接数码管段码,P2.4-P2.7接数码管片选.
现在键盘可以返回对应的值,并在数码管上显示.
我想要的结果是每按个键,就有一个键码返回(这个已经实现),然后通过串口输出一串字符,程序该怎么写?
串口的要求是:96 00 ,偶效验,1起始位,7数据位,1偶效验位,一个停止位.
譬如说,我按第一列的第一个键盘,现在可以返回KEYS==1,不知道怎么通过串口发送"000800401";
然后会接收到"75010800A1",又怎么在数码管上显示出来?
串口的要求:96 00 ,偶效验,1起始位,7数据位,1偶效验位,一个停止位.怎么初始化?
if (KEYS==1) P2_4=0,P0=0x60,send_string_com(0008004A1,11);
??这样可以吗?
void send_char_com( unsigned char ch)
//向串口发送一个字符
{
SBUF=ch;
while (TI== 0 );
TI= 0 ;
}
void send_string_com(unsigned char *str,unsigned char strlen)
{
unsigned char k=0;
do
{
send_char_com(*(str + k));
k++;
} while(k127 )
{
count3= 0 ;
inbuf1[count3]=ch;
checksum= ch- 128 ;
}
else
{
count3++;
inbuf1[count3]=ch;
checksum ^= ch;
if ( (count3>=(INBUF_LEN- 1 )) && (!checksum) )
{
read_flag= 1 ; //如果串口接收的数据达到INBUF_LEN个,且校验没错
count3= 0 ;
//就置位取数标志
}
}
}
}
while(1)
{
if (read_flag) //如果取数标志已置位,就将读到的数从串口发出
{
read_flag= 0 ; //取数标志清0
count3= 0 ;
}
接收4个之后就死了。用Proteus 7 Professional仿真。
|