C51串口问题

[复制链接]
查看11 | 回复1 | 2009-4-28 05:42:10 | 显示全部楼层 |阅读模式
我有个电路,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仿真。

回复

使用道具 举报

千问 | 2009-4-28 05:42:10 | 显示全部楼层
太简单了,买个做好的开发板吧,我当初也和你一样,想自己领悟,其实没必要,别人都做好了,你直接买来看一下就OK了,不用花时间到这些基础问题上,100多块就什么都搞定了,51嘛,还是非常简单的...
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行