国产精品久久久aaaa,日日干夜夜操天天插,亚洲乱熟女香蕉一区二区三区少妇,99精品国产高清一区二区三区,国产成人精品一区二区色戒,久久久国产精品成人免费,亚洲精品毛片久久久久,99久久婷婷国产综合精品电影,国产一区二区三区任你鲁

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

【開源獲獎案例】智能培養室

迪文智能屏 ? 2024-01-09 08:13 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

——來自迪文開發者論壇
本期為大家推送迪文開發者論壇獲獎開源案例——智能培養室工程師通過Modbus協議實現了T5L智能屏控制加熱、風機控溫功能,還可調節電源功率實現模擬光照功能。系統可根據屏幕上設定的參數自動運行,并保存故障歷史記錄。


UI素材展示 db96ee72-ae83-11ee-aa22-92fbcf53809c.jpg ?dba6d3be-ae83-11ee-aa22-92fbcf53809c.jpg

UI開發示例 dbbe0f16-ae83-11ee-aa22-92fbcf53809c.png C51代碼設計

(1)主界面溫度、濕度、高度等數據獲取和更新,以及使用modbus rtu控制控溫模塊、電機、報警檢測等各個從機的主要代碼如下:

主界面代碼參考:

#include "main_win.h"#include "modbus.h"#include "sys_params.h"

#include "func_handler.h"

#include "uart2.h"#include #include #define TEMP_HUM_SLAVE_ADDR 2#define TEMP_HUM_VAL_MAX_NUM 2

#define ALERT_BIT_MAX_NUM 30

#define ALERT_BYTE_NUM (ALERT_BIT_MAX_NUM/8+((ALERT_BIT_MAX_NUM%8)!=0))#define GET_ALERT_BIT(val, pos) ((val[pos/8]>>(pos%8))&0x01)typedef struct{ char date[17]; u8 desc;}ALERT;#defineALERT_TABLE_LEN

20static u8 btn_sta[MAIN_WIN_BTN_MAX_NUM] = {0};static u8 btn_addr[MAIN_WIN_BTN_MAX_NUM] = {50, 51, 52, 69, 53, 54, 55, 70, 56, 57, 58, 59};u16 main_win_val[MAIN_WIN_VAL_MAX_NUM];u16 temp_hum_val[TEMP_HUM_VAL_MAX_NUM] = {0};u16 date_val[MAIN_WIN_DATE_MAX_NUM] = {0};u8

alert_val[ALERT_BYTE_NUM] = {0};u8 old_alert_val[ALERT_BYTE_NUM] = {0};ALERT alert_table[ALERT_TABLE_LEN];u16 alert_num = 0;bit is_main_win = 0;void main_win_update(){}void main_win_disp_date()

{ u8 len; len = sprintf(common_buf,"%u:%u", (u16)date_val[3], (u16)date_val[4]); common_buf[len+1] = 0; sys_write_vp(MAIN_WIN_DATE_VP, common_buf,

len/2+2);}void main_win_process_alert()

{ u8 i; for(i=0;i { if(GET_ALERT_BIT(old_alert_val, i)) continue;

if(GET_ALERT_BIT(alert_val, i)) { if(alert_num>=ALERT_TABLE_LEN) alert_num = ALERT_TABLE_LEN-1;

alert_table[alert_num].desc = i+1; sprintf(alert_table[alert_num].date, "%u/%u/%u %u:%u", date_val[0], date_val[1],

date_val[2], date_val[3], date_val[4] ); alert_num++; } }

memcpy(old_alert_val, alert_val, sizeof(alert_val));}void main_win_disp_alert(){ u16 i; u16 val; u16 len = 0; common_buf[0] = 0; for(i=0;i { val = 0; if(i { val = alert_table.desc; len += sprintf(common_buf+len, "%s\r\n", alert_table.date); } sys_write_vp(ALERT_WIN_DESC_START_VP+i, (u8*)&val, 1); }

common_buf[len+1] = 0; sys_write_vp(ALERT_WIN_DATE_VP, common_buf, len/2+2);}void main_win_init(){ float fixed_val; u8 i; is_main_win = 1;
main_win_val[5] = (u16)(temp_hum_val[0]/10.0+0.5f); main_win_val[6] = (u16)(temp_hum_val[1]/10.0+0.5f); for(i=0;i { if(i==0) continue;sys_write_vp(MAIN_WIN_WIND_SPEED_VP+MAIN_WIN_VAL_OFFSET*i, (u8*)&main_win_val, 1); } fixed_val = main_win_val[0]/WIND_SPEED_SCALE+FLOAT_FIX_VAL; sys_write_vp(MAIN_WIN_WIND_SPEED_VP, (u8*)&fixed_val, 2);}void main_win_click_handler(u16 btn_val){ u8 index; if(btn_val==0x0B) { main_win_disp_alert(); return; } index = btn_val-1; btn_sta[index] = !btn_sta[index];

if((index==3)||(index==7)) btn_sta[index] = 1; modbus_write_bit(btn_addr[index], btn_sta[index]?0xFF00:0x0000); btn_val = btn_sta[index];sys_write_vp(MAIN_WIN_BTN_STA_START_VP+MAIN_WIN_BTN_STA_OFFSET*index, (u8*)&btn_val, 1); if(index==9) is_main_win = 0; else if((index==3)||(index==7)) { while(sys_get_touch_sta()); modbus_write_bit(btn_addr[index], 0x0000); }}

void main_win_msg_handler(u8 *msg,u16 msg_len){ u8 f_code = msg[MODBUS_RESPOND_POS_FUNC_CODE];

u8 data_len = msg[MODBUS_RESPOND_POS_DATA_LEN]; u8 i; u8 offset; msg_len = msg_len; if(!is_main_win) return;if((f_code==MODBUS_FUNC_CODE_03)&&(data_len==MAIN_WIN_VAL_MAX_NUM*2)) { offset = MODBUS_RESPOND_POS_DATA; for(i=0;i { main_win_val = SYS_GET_U16(msg[offset], msg[offset+1]); offset += 2; } main_win_update(); }

else if((f_code==MODBUS_FUNC_CODE_01)&&(data_len==ALERT_BYTE_NUM)) { offset = MODBUS_RESPOND_POS_DATA; for(i=0;i { alert_val = msg[offset]; offset++; }

main_win_process_alert(); }else if((f_code==MODBUS_FUNC_CODE_03)&&(data_len==TEMP_HUM_VAL_MAX_NUM*2))

{ offset = MODBUS_RESPOND_POS_DATA; for(i=0;i { temp_hum_val = SYS_GET_U16(msg[offset], msg[offset+1]);

offset += 2; modbus_write_word(5+i, temp_hum_val); } main_win_update(); }else if((f_code==MODBUS_FUNC_CODE_03)&&(data_len==MAIN_WIN_DATE_MAX_NUM*2)) { offset = MODBUS_RESPOND_POS_DATA; for(i=0;i { date_val = SYS_GET_U16(msg[offset], msg[offset+1]); offset += 2; } main_win_disp_date(); }}void main_win_read_temp_hum(){ u8 old_slave_addr = SLAVE_ADDR; sys_params.user_config[5] = TEMP_HUM_SLAVE_ADDR; modbus_read_words(0, TEMP_HUM_VAL_MAX_NUM); sys_params.user_config[5] = old_slave_addr;//還原}void main_win_handler(){ static u8 flag = 0; if(is_main_win) { if(alert_read_period==ALERT_READ_PERIOD) { alert_read_period = 0; modbus_read_bits(510, ALERT_BIT_MAX_NUM); return; } if(date_update_period==DATE_UPDATE_PERIOD) { date_update_period = 0; modbus_read_words(180, MAIN_WIN_DATE_MAX_NUM); return; } flag = !flag; if(flag) modbus_read_words(0, MAIN_WIN_VAL_MAX_NUM); else main_win_read_temp_hum(); }}

modbus rtu代碼參考:

#include "modbus.h"#include "crc16.h"#include "sys_params.h"#define UART_INCLUDE "uart2.h"#define UART_INIT uart2_init#define UART_SEND_BYTES uart2_send_bytes#define UART_BAUD 9600#define MODBUS_RECV_TIMEOUT (u8)(35000.0f/UART_BAUD+2)#define MODBUS_SEND_INTERVAL 150#include UART_INCLUDEstatic bit is_modbus_recv_complete = 0;static u8 modbus_recv_buff[270];

static u16 modbus_recv_len = 0;//接受的總字節長度

static u8 modbus_recv_timeout = 0;//接受溢出時間static volatile u16 modbus_send_interval = 0;MODBUS_PACKET packet;void modbus_init()

{ UART_INIT(UART_BAUD);}void modbus_send_bytes(u8 *bytes,u16 len){ UART_SEND_BYTES(bytes,len);}

void modbus_recv_byte(u8 byte){ if(is_modbus_recv_complete) return; if(modbus_recv_len

{ modbus_recv_timeout--; if(modbus_recv_timeout==0)

{ is_modbus_recv_complete = 1; } }}

u8 modbus_send_packet(u8 *packet)

{ u16 len; u16 crc; u8 func_code = packet[1]; while(modbus_send_interval); if(func_code==MODBUS_FUNC_CODE_10) { ((MODBUS_10_PACKET*)packet)->byte_num = ((MODBUS_10_PACKET*)packet)->word_num*2; len = 9+((MODBUS_10_PACKET*)packet)->byte_num; }

else if(func_code==MODBUS_FUNC_CODE_0F) { len = ((MODBUS_0F_PACKET*)packet)->bit_num;

((MODBUS_0F_PACKET*)packet)->byte_num = len/8+(len%8?1:0);

len = 9+((MODBUS_0F_PACKET*)packet)->byte_num; }else { len = sizeof(MODBUS_PACKET); } crc = crc16(packet,len-2);

packet[len-2] = (u8)(crc>>8); packet[len-1] = (u8)crc; modbus_send_bytes(packet,len); modbus_send_interval = MODBUS_SEND_INTERVAL; return 0;//成功}extern void modbus_msg_handler(u8 *msg,u16 msg_len);void modbus_handler(){ u16 crc; if(!is_modbus_recv_complete) return; //校驗crc值

crc = ((u16)modbus_recv_buff[modbus_recv_len-2]<<8)+modbus_recv_buff[modbus_recv_len-1]; if(crc16(modbus_recv_buff,modbus_recv_len-2)==crc) { modbus_msg_handler(modbus_recv_buff,modbus_recv_len); } modbus_recv_len = 0; is_modbus_recv_complete = 0; }u8 modbus_send_fcode(u8 fcode, u16 addr, u16 len){ packet.slave_addr = SLAVE_ADDR; packet.func_code = fcode;//功能碼?

packet.start_addr = addr;//地址 packet.data_len = len;//寫入的值 len = modbus_send_packet((u8*)&packet); return len;}

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 電源
    +關注

    關注

    185

    文章

    18841

    瀏覽量

    263554
  • ModBus協議
    +關注

    關注

    3

    文章

    190

    瀏覽量

    35325
  • 迪文屏
    +關注

    關注

    3

    文章

    88

    瀏覽量

    6033
  • 智能屏幕
    +關注

    關注

    0

    文章

    73

    瀏覽量

    3829
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    華科大網安學院開源工坊人才培養新模式的主要成果

    針對高校開源教學長期存在學生缺乏實戰經驗、缺乏持續指導機制、缺乏體系化成長路徑三大核心痛點,從2023年開始,華中科技大學網安學院攜手華中科技大學開放原子俱樂部落地開源工坊模式,助力學生打通開源實踐的“入門關卡”,以體系化路徑
    的頭像 發表于 01-29 14:36 ?490次閱讀

    普華基礎軟件出席開源車用操作系統人才培養啟動儀式

    與產業需求之間存在顯著缺口。本次啟動的“開源車用操作系統人才培養”,是普華基礎軟件開源“星輝計劃”五大生態體系中的關鍵一環,旨在通過“開源共建”模式,系統性破解人才難題,為產業可持續發
    的頭像 發表于 12-18 17:11 ?1213次閱讀

    學以致用 虛位以待|玄鐵RV學院課程正式上線,玄鐵與PLCT實驗邀您創“芯”未來

    如何進行實習生招募和面試 ? PLCT實驗開放10名開源社區實習經理崗位及RuyiSDK論壇上線內測邀請 ?甲辰計劃開放10名 VSCode RISC-V 插件開發實習崗位,睿賽德、苦芽科技、PLCT
    發表于 10-29 17:14

    PLCT實驗持續開放100名 RT-Thread 實習名額|甲辰計劃開源實習聯合培養

    ,積極促進RISC-V技術在全球范圍內的普及。本次實習機會為【甲辰計劃主理人發起開源實習生聯合招聘培養項目】的一部分,委托甲辰計劃主理人吳偉進行招聘面試。無論你是
    的頭像 發表于 10-03 10:04 ?916次閱讀
    PLCT實驗<b class='flag-5'>室</b>持續開放100名 RT-Thread 實習名額|甲辰計劃<b class='flag-5'>開源</b>實習聯合<b class='flag-5'>培養</b>

    開源鴻蒙人才培養賦能課程共建正式啟動

    近日,2025開放原子開源生態大會開源鴻蒙主題演講在北京國家會議中心隆重舉辦。會上,開源鴻蒙人才培養賦能課程共建正式啟動,該項目旨在推動開源
    的頭像 發表于 07-28 17:44 ?948次閱讀

    誠邁科技攜多款鴻志智能終端亮相2025開放原子開源生態大會

    人民政府副秘書長許心超出席開幕式并致辭。誠邁科技攜多款基于開源鴻蒙的鴻志智能終端亮相大會,并作為首批共建單位共同啟動開源鴻蒙人才培養賦能課程共建計劃。誠邁科技作為最
    的頭像 發表于 07-25 12:37 ?1312次閱讀
    誠邁科技攜多款鴻志<b class='flag-5'>智能</b>終端亮相2025開放原子<b class='flag-5'>開源</b>生態大會

    開源獲獎案例】AI智能交互新方案:基于T5L智能屏的AI DeepSeek大模型

    ——來自迪文開發者論壇本期為大家推送迪文開發者論壇獲獎開源案例——AI智能交互新方案:基于T5L智能屏的AIDeepSeek大模型。該方案通過T5L串口與AI模塊開發板進行數據交互,支
    的頭像 發表于 07-12 09:02 ?1065次閱讀
    【<b class='flag-5'>開源</b><b class='flag-5'>獲獎</b>案例】AI<b class='flag-5'>智能</b>交互新方案:基于T5L<b class='flag-5'>智能</b>屏的AI DeepSeek大模型

    全國首個985高校開源鴻蒙微專業落地!深開鴻與華中科技大學聯合培養智能信息系統人才

    2025年7月9日,深圳——深開鴻與華中科技大學共同舉辦“智能信息系統微專業(開源鴻蒙)共建啟動儀式”,這標志著全國首個985高校開源鴻蒙微專業正式啟動。華中科技大學電信學院教學副院長梁琨教授,微
    的頭像 發表于 07-10 19:04 ?1231次閱讀
    全國首個985高校<b class='flag-5'>開源</b>鴻蒙微專業落地!深開鴻與華中科技大學聯合<b class='flag-5'>培養</b><b class='flag-5'>智能</b>信息系統人才

    deepin社區助力高校開源人才培養

    在數字化浪潮下,開源技術是科技創新的核心引擎。為探索高校參與開源及人才培養新路徑,北京化工大學與北京青年政治學院師生近日參訪開放原子開源基金會,進行深度交流。
    的頭像 發表于 07-10 15:25 ?790次閱讀

    開放原子與北京高校探索開源人才培養新路徑

    在數字化浪潮席卷全球的當下,開源技術已成為推動科技創新的核心力量。7月3-4日,北京化工大學與北京青年政治學院組織師生走進開放原子開源基金會,圍繞“高校如何參與開源以及開源人才
    的頭像 發表于 07-10 10:18 ?913次閱讀

    深開鴻與深信大聯合培養的首批開源鴻蒙工程師完成KCA認證考試

    近日,深開鴻與深圳信息職業技術大學(以下簡稱“深信大”)聯合培養的首批38名“開源鴻蒙工程師”順利完成“KCA-應用開發工程師”認證考試,標志著校企合作的“雙主體”育人模式培養開源鴻蒙
    的頭像 發表于 07-01 15:36 ?1269次閱讀
    深開鴻與深信大聯合<b class='flag-5'>培養</b>的首批<b class='flag-5'>開源</b>鴻蒙工程師完成KCA認證考試

    開源獲獎案例】基于T5L智能屏的音樂播放與歌詞顯示方案

    ——來自迪文開發者論壇本期為大家推送迪文開發者論壇獲獎開源案例——基于T5L智能屏的音樂播放與歌詞顯示方案。該方案通過T5L串口與通用開發板、解碼板進行數據交互,將解析完成的音頻和歌詞通過串口發送給
    的頭像 發表于 05-08 09:52 ?859次閱讀
    【<b class='flag-5'>開源</b><b class='flag-5'>獲獎</b>案例】基于T5L<b class='flag-5'>智能</b>屏的音樂播放與歌詞顯示方案

    開源獲獎案例】基于T5L智能屏的零食機

    ——來自迪文開發者論壇本期為大家推送迪文開發者論壇獲獎開源案例——基于T5L智能屏的零食機。該方案基于T5L芯片,通過PWM接口實現實時調控爪子抓取力度、速度,并支持后臺按鍵長按時間讀取,各模塊自檢
    的頭像 發表于 04-30 18:20 ?659次閱讀
    【<b class='flag-5'>開源</b><b class='flag-5'>獲獎</b>案例】基于T5L<b class='flag-5'>智能</b>屏的零食機

    DIY開源智能馬桶

    []()【開源福利!電子學子專屬】某品牌智能馬桶:家庭實用與二次開發的絕佳之選 各位電子類專業的同學們,想不想擁有一個既可以用于家庭日常使用,又能作為超棒的二次開發練習平臺的神器?今天給大家帶來某
    發表于 04-13 21:56

    開源獲獎案例】基于T5L智能屏的FM收音機

    ——來自迪文開發者論壇本期為大家推送迪文開發者論壇獲獎開源案例——基于T5L智能屏的FM收音機。該方案基于T5L智能屏,通過串口4與FM收音機模塊進行通訊,實現自動搜索獲取不同頻段電臺
    的頭像 發表于 03-28 15:39 ?936次閱讀
    【<b class='flag-5'>開源</b><b class='flag-5'>獲獎</b>案例】基于T5L<b class='flag-5'>智能</b>屏的FM收音機