鄙人刚开始研究单片机,想问一下关于串口处理数据的问题
首先,串口接受到一组16位数据,我该用什么存放,然后这个数据有帧头有帧尾,怎么判断接收完毕
还有就是我想要找出其中的某位拿来判断,应该怎么提取和判断,希望给一个参考程序,谢谢
可以基于时间间隔,也可以基于特定标头,或者二者结合。
【相关推荐】
按键设计函数
unsigned char key_read(){
unsigned int key_new;
unsigned char key_val;
P44 = 0;P42 = 1;P35 = 1;P34 = 1;
key_new = P3;
P44 = 1;P42 = 0;
key_new = (key_new<<4)|(P3&0x0f);
P42 = 1;P35 = 0;
key_new = (key_new<<4)|(P3&0x0f);
P35 = 1;P34 = 0;
key_new = (key_new<<4)|(P3&0x0f);
switch(~key_new){
case 0x8000: key_val = 4;break;
case 0x4000: key_val = 5;break;
case 0x2000: key_val = 6;break;
case 0x1000: key_val = 7;break;
case 0x0800: key_val = 8;break;
case 0x0400: key_val = 9;break;
case 0x0200: key_val = 10;break;
case 0x0100: key_val = 11;break;
case 0x0080: key_val = 12;break;
case 0x0040: key_val = 13;break;
case 0x0020: key_val = 14;break;
case 0x0010: key_val = 15;break;
case 0x0008: key_val = 16;break;
case 0x0004: key_val = 17;break;
case 0x0002: key_val = 18;break;
case 0x0001: key_val = 19;break;
default:key_val = 0;break;
}
return key_val;
}
中断计时函数
void time1() interrupt 3{//中断服务函数
key_num = key_read();
if(key_num == key_old){
key_count++;
}else{
key_count=0;
}
key_old = key_num;
}
使用示例
if(key_num == 4 && key_count>=800)//长按800毫秒设计
segbuff[0] = 0;
if(key_num == 5)//短按设计
segbuff[0] = 1;
if(key_num == 8 && key_count>=400)//长按400毫秒设计
segbuff[0] = 2;
设计思路
1.获取按键的值;
2.判断按键的值与上一次按键的值是否相等,相等则计时开始;不相等则计时为0,等待计时;