亚洲春色中文字幕久久久-三上亚,一吻二脱三床四吻胸,国产真实伦对白视频全集,在线毛片观看,精品成品入口黄网,国产毛aⅴ片久久久,亚洲AV色香蕉一区二区三区老师,萧皇后A级艳片,色情日本视频更新,99久久亚洲精品日本无码
標題:
為什么串口屏丟包
[打印本頁]
作者:
happy2058
時間:
2026-5-25 02:49
標題:
為什么串口屏丟包
void Send_Array_UR1( u8 *str, u8 strlen)
{
u8 k
=
0
;
do
{
SBUF = (*(str + k));
k++;
TI_Busy_1=1;
while (TI_Busy_1);
}
while (k < strlen);
}
void UARTO1_ISR() interrupt 4 //接收中斷,不同處理器可能是不同的函數聲明
{
u8 i; //用處提取接收緩沖器的字符
if(TI)
{
TI = 0;
TI_Busy_1 = 0;
}
if(RI)
{
i=SBUF; //提取字符
RI=0;
if(!complete_data_flag_1) /
/前臺程序處完成
{
if(RX_1) //如果接收到0XAA,繼續接收后面的字符
{
buffer_1[RX_P]=i; //字符存入數組
if((RX_P>3)&&(buffer_1[RX_P-3]==0xcc) && (buffer_1[RX_P-2]==0x33)&&(buffer_1[RX_P-1]==0xc3)&& (buffer_1[RX_P]==0x3c)) //判斷是是否接收完畢一幀數據
{
complete_data_flag_1=1; //如果接收完成,置位RXFRMOK
RX_1 = 0; //清零開始標志位RXAAOK
}
RX_P++; //接收計數器加一
}
if(!RX_1 && (i==0xaa))
{
RX_1=1;
RX_P=0;
}
}
}
}
// 觸摸指令處理函數
void Touch_command_selection(void)
{
// 如果沒有一幀完整數據,直接退出函數,不執行任何操作
if (!complete_data_flag_1)
return;
// 判斷幀頭:0x79 = 觸摸按鍵按下
if (buffer_1[0] == 0x79)
{
// 如果觸摸鎖已經上鎖,不響應任何按鍵
if (Screen_touch_lock)
{
complete_data_flag_1 = 0; // 清除數據接收完成標志
return; // 退出,不處理
}
// 根據 buffer_1[2] 里的按鍵指令執行對應功能
switch (buffer_1[2])
{
// ====================== 主頁功能 ======================
case 0xA4: // 按下:主頁 - 1
Screen_touch_lock = 1; // 上鎖觸摸,防止重復觸發
Loop_sending(6); // 執行發送指令 6
break;
case 0xA5: // 按下:主頁 - 2
Screen_touch_lock = 1; // 上鎖觸摸
Loop_sending(5); // 執行發送指令 5
break;
case 0xA7: // 按下:主頁 - 3 //第一次按運行
Screen_touch_lock = 1; // 上鎖觸摸
image_loop_flag = 0; // 關閉動畫循環
Loop_sending(4); // 執行發送指令 4
break;
default:
break; // 其他指令不處理
}
}
// 判斷幀頭:0x78 = 觸摸按鍵松開
else if (buffer_1[0] == 0x78)
{
Screen_touch_lock = 0; // 解鎖觸摸,可以再次響應
}
// 數據處理完畢,清除接收完成標志,準備接收下一幀數據
complete_data_flag_1 = 0;
}
// 水模式動畫循環函數
void image_loop(void)
{
static u8 count = 0; // 靜態變量:保存幀計數,不會被重置
// 循環:只要 image_loop_flag = 1,就一直跑動畫
do
{
if (++count > 60) // 計數自增,超過60歸零
count = 0;
HIM_page_0_temp[2] = count; // 把計數值放入發送數組
Send_Array_UR1(HIM_page_0_temp, 7); // 發送一幀動畫數據
delay_ms(60); // 延時60ms,控制動畫速度
Touch_command_selection(); // 調用觸摸處理,檢測按鍵
第一次按下
} while (image_loop_flag); // 判斷是否繼續循環
}
// 主函數:程序入口
void main()
{
IOsatar(); // 芯片IO口初始化
Delay100ms(); // 開機延時100ms,穩定系統
image_loop(); // 進入動畫循環(一旦進入,除非flag=0,否則不退出)
// 主死循環:系統正常運行任務
while(1)
{
TIME_START(); // 計時/定時器啟動
Touch_command_selection(); // 觸摸按鍵指令處理
//第二,三次按下判斷
While_loop_sending(); // 循環發送數據
}
}
流程
開機給屏幕發送動畫循環,當按下屏幕后轉跳。
(第一次按下可以正常切換頁面,再次按下沒反應,第三次按下正常了)
第一次按下后,T
ouch_command_selection();
i函數里mage_loop_flag = 0; // 關閉動畫循環
程序到達
while(1) 不然第一次就不會切換面。但是
complete_data_flag_1 = 0;這條有時候不運行。導至第二次按下屏幕沒反應。
如果中斷發生在
delay_ms(60); 只運行了按下,鎖鍵,沒有抬起動作,第二次按下沒反應該?等待抬起?
delay_ms(60); // 延時60ms,控制動畫速度
Touch_command_selection(); // 調用觸摸處理,檢測按鍵
第一次按下
complete_data_flag_1 = 0; 在這里增加后,正常了。沒想明白。
屏幕下發間隔100MS 可能點一下會來兩幀。按下。再抬起
作者:
coody_sz
時間:
2026-5-25 16:47
有線串口通信(無干擾)都能丟包,只能是程序執行時間安排不恰當引起的(特別是中斷函數耗時過長)。
作者:
man1234567
時間:
2026-5-25 17:14
為了讓設計容錯的人有口飯吃
作者:
happy2058
時間:
2026-5-26 09:14
coody_sz 發表于 2026-5-25 16:47
有線串口通信(無干擾)都能丟包,只能是程序執行時間安排不恰當引起的(特別是中斷函數耗時過長)。
我這個還好吧
歡迎光臨 (http://www.denmoz.com/bbs/)
Powered by Discuz! X3.1