while(1)
{
key=KEY_Scan(0);
if(key==KEY0_PRES)//KEY0按下,发送一次数据
{
for(i=0;i<5;i++)
{
rs485buf=cnt+i;//填充发送缓冲区
LCD_ShowxNum(30+i*32,190,rs485buf,3,16,0X80); //显示数据
}
RS485_Send_Data(rs485buf,5);//发送5个字节
}
RS485_Receive_Data(rs485buf,&key);
if(key)//接收到有数据
{
if(key>5)key=5;//最大是5个数据.
for(i=0;i<key;i++)LCD_ShowxNum(30+i*32,230,rs485buf,3,16,0X80); //显示数据
}
t++;
delay_ms(10);
if(t==20)
{
LED0=!LED0;//提示系统正在运行
t=0;
cnt++;
LCD_ShowxNum(30+48,150,cnt,3,16,0X80); //显示数据
}
}
}
1.KEY_Scan(0)只能返回1或0,为什么要把它赋给key
key==KEY0_PRES赋给key应该是判断是否按下吧
2.rs485buf=cnt+i;
LCD_ShowxNum(30+i*32,190,rs485buf,3,16,0X80);
因为cnt为0,那显示的数据不就是0,1,2,3,4了吗
3. RS485_Receive_Data(rs485buf,&key);为啥取的是key的地址,不是存有数据的rs485buf
4. t++;这个t是干啥的
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
1.KEY_Scan()返回0,1,2,3,4
2.对
3.//RS485查询接收到的数据
//buf:接收缓存首地址
//len:读到的数据长度
void RS485_Receive_Data(u8 *buf,u8 *len)
{
u8 rxlen=RS485_RX_CNT;
u8 i=0;
*len=0; //默认为0
delay_ms(10); //等待10ms,连续超过10ms没有接收到一个数据,则认为接收结束
if(rxlen==RS485_RX_CNT&&rxlen)//接收到了数据,且接收完成了
{
for(i=0;i<rxlen;i++)
{
buf=RS485_RX_BUF;
}
*len=RS485_RX_CNT; //记录本次数据长度
RS485_RX_CNT=0; //清零
}
}
当执行完RS485_Receive_Data(rs485buf,&key);后
key保存了接收数据的字节大小
特别注意*len=RS485_RX_CNT; //记录本次数据长度另外
RS485_RX_CNT在串口中断中变化~~
在A盘--4,程序源码--1,标准例程-寄存器版本.rar
这个压缩包里的 “实验24 485实验”
一周热门 更多>