欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136
標(biāo)題:
顯控HMI與單片機(jī)通訊案例(含單片機(jī)底層程序源碼)
[打印本頁]
作者:
liucongjun
時(shí)間:
2018-4-20 09:25
標(biāo)題:
顯控HMI與單片機(jī)通訊案例(含單片機(jī)底層程序源碼)
看到51hei上面有多人需要給大家分享下顯控HMI與單片機(jī)通訊案例(含單片機(jī)底層),顯控觸摸屏盒51單片機(jī)通過MODBUS協(xié)議通訊,讀寫數(shù)據(jù)和監(jiān)視位狀態(tài),附觸摸屏案例和單片機(jī)工程源碼與快速接線模塊。
還附帶了單片機(jī)MODBUS通信測(cè)試.drw文件.
0.jpg
(27.36 KB, 下載次數(shù): 137)
下載附件
2018-4-20 14:58 上傳
單片機(jī)源程序如下:
/********************************************
samkoon深圳顯控自動(dòng)化技術(shù)
**********************************************/
/********文件信息*****************************
名稱:main.c
功能:系統(tǒng)執(zhí)行文件
創(chuàng)建者:徐思*
適用工程:MODBUS RTU SALVE 通信單片機(jī)底層案例
***********************************************/
/********************************************************************************
本段程序用于和samkoon觸摸屏使用MODBUS RTU協(xié)議通信,單片機(jī)作為從站,232連接
samkoon MODBUS 主站功能碼說明:
1、0x:讀寫位狀態(tài),讀時(shí)發(fā)功能碼 01 寫時(shí)發(fā)功能碼05;
2、1x:讀輸入位狀態(tài);發(fā)功能碼 02;
3、3x:讀輸入寄存器,發(fā)功能碼 04;
4、4x:讀寫寄存器,讀時(shí)發(fā)功能碼 03,寫時(shí)發(fā)功能碼 06,寫32位時(shí)發(fā)功能碼 10;
5、3X-D:讀兩個(gè)寄存器 功能碼:03;
6、4X-D:寫兩個(gè)寄存器,功能碼 10,讀32位時(shí)讀上來的數(shù)據(jù)和使用4X高低字節(jié)剛好相反
7、3x_bit:讀輸入寄存器的位,發(fā)功能碼:04;
8、4x_bit:讀寫寄存器的位,讀時(shí)發(fā)功能碼:03,寫時(shí)發(fā)功能碼:06;
**********************************************************************************/
/*---如果要在程序使用該程序,請(qǐng)?jiān)诔绦蛑凶⒚魇褂昧孙@控公司資料---*/
/*---如果要在文章使用該程序,請(qǐng)?jiān)谖恼轮凶⒚魇褂昧孙@控公司資料---*/
#include"main.h"
u8 Reciver_Buf;
u8 rece_index=0;
u8 idata sendBuf[75]; //定義發(fā)送數(shù)組,最大允許發(fā)送32個(gè)字,64個(gè)字節(jié)
u8 idata receBuf[75]; //定義接收數(shù)組,最大允許接收32個(gè)字,64個(gè)字節(jié)寫入
u8 *ps=sendBuf;
u8 *pr=receBuf;
u8 comm_END;
u8 comm_time_out;
u8 Reciver_bit=0;
u16 R_ISP_L;
u16 R_ISP_H;
/*初始化函數(shù)*/
void init()
{
int i;
TMOD=0X21; //設(shè)定定時(shí)器1的工作方式為2,及8位初值自動(dòng)重裝的8位定時(shí)器,用于產(chǎn)生波特率,T0工作方式1,用于判斷通信幀結(jié)束
TH1=0XFD; //設(shè)置定時(shí)器的初值為0xfd,是按照9600的波特率計(jì)算出來的數(shù)值
TL1=0XFD; //定時(shí)器高低位數(shù)值一樣,方式2下,定時(shí)器自動(dòng)將高位的數(shù)值裝入低位,所以設(shè)定的時(shí)間要一致
TH0=(65536-11111)/256; //T0設(shè)定為1ms定時(shí)器, 用于判斷通信幀結(jié)束,同時(shí)可用于其他的定時(shí)作用
TL0=(65536-11111)%256; //T0低位
TR1=1; //啟動(dòng)T1定時(shí)器
REN=1; //運(yùn)行串口接收數(shù)據(jù),REN=1允許串口接收,REN=0禁止串口接收數(shù)據(jù)
SM0=0; //設(shè)置串口工作方式為1,即10位異步通信,1起始位,8數(shù)據(jù)位,1停止位
SM1=1; //同上,REN、SM0、SM1同屬于SCON寄存器,但是SCON寄存器允許位尋址
EA=1; //開總中斷
ES=1; //開串口中斷
ET0=1; //開定時(shí)器中斷
TR0=1; //啟動(dòng)T0定時(shí)器
P1=0xff; //復(fù)位所有輸出
relay=1;
bee=1;
for(i=0;i<32;i++) //復(fù)位所有
{
*(pb+i)=0;
*(pw+i)=0;
inputBit[i]=0;
}
for(i=0;i<32;i++) //讀出存在內(nèi)部E2PROM內(nèi)的值
{
R_ISP_L=read_ISP(0x2000+i*2); //讀出數(shù)據(jù)低位
R_ISP_H=read_ISP(0x2000+i*2+1); //讀出數(shù)據(jù)高位
*(pw+i)=((R_ISP_H<<8)&0xff00)+(R_ISP_L&0Xff); //組合數(shù)據(jù)
}
}
/*********************************************************************************
手動(dòng)調(diào)試函數(shù),通過在觸摸屏上操作相對(duì)應(yīng)的位來控制單片機(jī)的手動(dòng)輸出
相對(duì)應(yīng)的位說明:
0x0: 手動(dòng)自動(dòng)切換位,0:自動(dòng),1:手動(dòng)
0x1-0x10;輸出口1-10;
***********************************************************************************/
void adj()
{
u8 i,j=0; //j要有初值=0;
for(i=1;i<9;i++)
{
j=(u8)((*(pb+i)&0x01)<<(i-1))+j;
}
P1=~j;
relay=(~(*(pb+9)))&0x01;
bee=(~(*(pb+10)))&0x01;
}
/**********************************************************************************
將數(shù)值保存在內(nèi)部E2PROM中
0x11:在觸摸屏上的保存按鈕
************************************************************************************/
void saveData()
{
u8 i;
sectorerase(0x2000); //擦除扇區(qū),這邊寫入的是第一扇區(qū),在擦除是整個(gè)扇區(qū)被擦除
for(i=0;i<32;i++)
{
write_ISP((0X2000+i*2),(*(pw+i)&0xff)); //保存低8位數(shù)據(jù)
write_ISP((0x2000+i*2+1),((*(pw+i)>>8)&0xff)); //保存高8位數(shù)據(jù)
}
*(pb+11)=0; //保存按妞復(fù)位
}
/*主函數(shù)*/
void main()
{
init(); //執(zhí)行初始化程序
while(1) //執(zhí)行運(yùn)行程序
{
if(*(pb+0)) adj(); //手動(dòng)調(diào)試
if(*(pb+11)) saveData(); //保存數(shù)值
}
}
/*串口中斷服務(wù)*/
void ser() interrupt 4 //串口中斷的序號(hào)是4
{
RI=0; //產(chǎn)生串口中斷時(shí)RI被硬件置1,在串口中斷服務(wù)程序中需要用軟件清0;
comm_END=4; //9600的波特率下,等待3.5個(gè)字節(jié)需要約4ms的時(shí)間
Reciver_bit=1; //產(chǎn)生一次中斷置一次位
Reciver_Buf=SBUF; //將接收到的數(shù)據(jù)賦給一個(gè)變量;
receBuf[rece_index++]=Reciver_Buf; //將接收到的數(shù)據(jù)存入接收數(shù)組
}
/*T0中斷服務(wù)程序*/
void comm_stop() interrupt 1
{
u8 i;
TH0=(65536-11111)/256; //重裝T0
TL0=(65536-11111)%256; //T0低位
if(Reciver_bit&&comm_END!=0)
comm_END--;
if(comm_END==0)
{
Reciver_bit=0; //幀接收,對(duì)標(biāo)志位清零
if((*(pr+0)==0x01||*(pr+0)==0x00)&&rece_index>=8) //判斷是否為本站地址或者是廣播地址,有效報(bào)文的字節(jié)數(shù)量最少是8個(gè)字節(jié)
{
AnalyzeRecieve(); //分析并生成響應(yīng)報(bào)文
if(*(pr+0)==0x01) //廣播模式下不用返回
send_comm(); //發(fā)送響應(yīng)報(bào)文
}
comm_END=4; //重新賦延時(shí)初值
rece_index=0; //數(shù)組長度清零
for(i=0;i<75;i++) //清空接收數(shù)組
receBuf[i]=0;
Reciver_Buf=0;
}
}
復(fù)制代碼
/********************************************
samkoon
**********************************************/
/********文件信息*****************************
名稱:main.h
功能:本段程序?qū)崿F(xiàn)數(shù)據(jù)的E2PROM操作,實(shí)現(xiàn)數(shù)據(jù)斷電保持功能
創(chuàng)建者:徐思坤
適用工程:MODBUS RTU SALVE 通信單片機(jī)底層案例
***********************************************/
/*---如果要在程序使用該程序,請(qǐng)?jiān)诔绦蛑凶⒚魇褂昧孙@控公司資料---*/
/*---如果要在文章使用該程序,請(qǐng)?jiān)谖恼轮凶⒚魇褂昧孙@控公司資料---*/
#include <intrins.h>
#include"main.h"
//#define _nop_() //定義一個(gè)空函數(shù)
/***************************************************************
* 定義ISP/IAP操作命令,控制寄存器地址:ISP_CMD E5H *
* 1、0x00: 待機(jī)命令,ISP無操作; *
* 2、0x01: 對(duì)用戶的應(yīng)用程序FLASH區(qū)及數(shù)據(jù)FLASH區(qū)字節(jié)讀 *
* 3、0x02: 對(duì)用戶的應(yīng)用程序FLASH區(qū)及數(shù)據(jù)FLASH區(qū)字節(jié)編程 *
* 4、0x03: 對(duì)用戶的應(yīng)用程序FLASH區(qū)及數(shù)據(jù)FLASH區(qū)字節(jié)擦除 *
***************************************************************/
#define RDCommand 0x01
#define PRGCommand 0x02
#define ERASECommand 0x03
#define waittime 0x01 //定義CPU的等待時(shí)間
/*開始ISP寄存器聲明*/
sfr ISP_DATA=0xE2; //FLASH數(shù)據(jù)寄存區(qū)
sfr ISP_ADDRH=0xE3; //FLASH高字節(jié)地址寄存器
sfr ISP_ADDRL=0xE4; //FLASH低字節(jié)地址寄存器
sfr ISP_CMD=0xE5; //FLASH命令寄存器
sfr ISP_TRIG=0xE6; //FLASH命令觸發(fā)寄存器
sfr ISP_CONTR=0xE7; //ISP/IAP控制寄存器
/*打開ISP/IAP功能*/
void ISP_enable(void)
{
// ISP_CONTR=ISP_CONTR&0X18; //初始化SP/IAP控制寄存器;
ISP_CONTR=waittime; //寫入硬件延時(shí),注意這邊是“|”運(yùn)算
ISP_CONTR=ISP_CONTR|0x80; //打開ISPEN,運(yùn)行寫入,注意是“|”運(yùn)算
}
/*關(guān)閉ISP/IAP功能*/
void ISP_disable(void)
{
ISP_CONTR=ISP_CONTR&0x00; //關(guān)閉ISPEN,運(yùn)行寫入,注意是“&”運(yùn)算
ISP_TRIG=0x00; //清空ISP命令控制觸發(fā)器
ISP_CMD=0x00;
// EA=1; //打開中斷
}
/*建立公用觸發(fā)函數(shù)*/
void go_ISP(void)
{
ISP_TRIG=0x46; //觸發(fā)ISP/IAP命令字節(jié)1,(固定)
ISP_TRIG=0xB9; //觸發(fā)ISP/IAP命令字節(jié)2,(固定)
_nop_(); //執(zhí)行一個(gè)空函數(shù)
}
/*扇區(qū)擦除函數(shù)*/
void sectorerase(u16 addr)
{
ISP_ADDRH=(u8)(addr>>8); /*取地址的高位*/
ISP_ADDRL=(u8)(addr&0xff); //地址的低位
// EA=0; //關(guān)閉總中斷
ISP_enable(); //打開ISP/IAP功能
ISP_CMD=ERASECommand; //從新給ISP命令寄存器賦值,這邊賦的是0x03,表示擦除
go_ISP(); //執(zhí)行觸發(fā)命令,將擦除命令寫入
ISP_disable(); //關(guān)閉ISP功能
}
/*寫數(shù)據(jù)函數(shù)(單個(gè)字節(jié)寫入)*/
void write_ISP(u16 st_addr,u8 w_data)
{
ISP_DATA=w_data; //將要寫入的數(shù)據(jù)存入ISP FLASH數(shù)據(jù)寄存區(qū)
ISP_ADDRH=(u8)(st_addr>>8); /*取地址的高位*/
ISP_ADDRL=(u8)(st_addr&0xff); //地址的低位
// EA=0; //關(guān)閉總中斷
ISP_enable(); //打開ISP/IAP功能
ISP_CMD=PRGCommand; //從新給ISP命令寄存器賦值,這邊賦的是0x02,表示寫入
go_ISP(); //觸發(fā)寫入
ISP_disable(); //關(guān)閉ISP功能
}
/*讀數(shù)據(jù)函數(shù)(讀單個(gè)字節(jié))*/
u8 read_ISP(u16 rd_addr)
{
ISP_ADDRH=(u8)(rd_addr>>8); /*取地址的高位*/
ISP_ADDRL=(u8)(rd_addr&0x00ff); //地址的低位
ISP_CMD=ISP_CMD&0xF8; // 清空ISP命令寄存器的第三位
// EA=0; //關(guān)閉總中斷
ISP_enable(); //打開ISP/IAP功能
ISP_CMD=RDCommand; //從新給ISP命令寄存器賦值,這邊賦的是0x01,表示讀出
go_ISP(); //觸發(fā)寫入
ISP_disable(); //關(guān)閉ISP功能
return (ISP_DATA); //返回讀出的數(shù)據(jù)
……………………
…………限于本文篇幅 余下代碼請(qǐng)從51黑下載附件…………
復(fù)制代碼
所有資料51hei提供下載:
顯控HMI與單片機(jī)通訊案例(含單片機(jī)底層) (0).rar
(809.72 KB, 下載次數(shù): 431)
2018-4-20 09:25 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
作者:
smartphone
時(shí)間:
2018-5-19 21:55
謝謝 下載來學(xué)習(xí)學(xué)習(xí)
作者:
葉偉哲
時(shí)間:
2018-7-1 17:10
你好,我用功能代碼1通訊,老是通訊超時(shí),這個(gè)怎么辦
作者:
葉偉哲
時(shí)間:
2018-7-1 17:12
你好,我用功能代碼01通訊,老是超時(shí),怎么辦了
作者:
huangjianfeng
時(shí)間:
2018-8-21 20:01
51單片機(jī)接收到01,02,03等會(huì)作出響應(yīng)。那顯控觸摸屏是在哪里設(shè)置發(fā)送01,02,03等modbus碼??
作者:
DSCX05
時(shí)間:
2018-10-22 14:54
還附帶了單片機(jī)MODBUS通信測(cè)試.drw文件
作者:
tangquan2019
時(shí)間:
2018-11-19 08:08
什么是特定用戶啊 ,為什么我不能下載呢,我正在用一塊顯控屏 和AVr單片機(jī)的通信,正好借看下 先謝謝了
作者:
jiajie168
時(shí)間:
2018-11-21 08:41
好復(fù)雜
作者:
yxr201314
時(shí)間:
2018-11-29 20:24
過來學(xué)習(xí)了
作者:
yxr201314
時(shí)間:
2018-11-29 20:26
之前都是威綸通的,顯控的modbus地址寫不進(jìn)去,不管從站或主站
各們可以說下是什么問題嗎
作者:
p0083
時(shí)間:
2018-12-18 09:54
我正在用一塊顯控屏 和RL78單片機(jī)的通信,正好借看下 先謝謝了
作者:
lieyanfeiyang
時(shí)間:
2019-3-14 08:29
真好,正好要學(xué)習(xí)。
作者:
lizhendong
時(shí)間:
2019-3-17 19:39
支持支持,多謝
作者:
HHHHP
時(shí)間:
2019-5-21 21:38
非常好,支持
作者:
lizhendong
時(shí)間:
2019-7-20 00:09
太好了,支持一下,謝謝
作者:
難得糊涂2018
時(shí)間:
2019-7-22 21:33
這個(gè)鏈接顯控哪一款的觸摸屏啊
作者:
細(xì)洗席
時(shí)間:
2019-8-25 19:58
已下載,謝謝分享。
作者:
osjzbing
時(shí)間:
2019-9-2 19:37
一下載,感謝分享
作者:
zcq222
時(shí)間:
2019-11-6 15:54
謝謝分享,看看
作者:
難得糊涂2018
時(shí)間:
2019-11-7 18:54
怎么修改輸出點(diǎn)?有大師請(qǐng)指點(diǎn)下!謝謝
作者:
muxiaoyu240
時(shí)間:
2020-4-4 06:29
怎樣下載
作者:
wangjjqd
時(shí)間:
2022-2-9 16:54
正在學(xué)習(xí),很需要這方面的資料,謝謝
作者:
mick32
時(shí)間:
2022-4-7 04:42
Hello
What kind of HMI to use
作者:
jinshan
時(shí)間:
2022-10-25 23:09
單片機(jī)用的啥型號(hào)的啊?
作者:
mick32
時(shí)間:
2022-11-21 02:12
MCU is C51 modbus code
作者:
tyghbn
時(shí)間:
2023-3-20 15:59
很好,這個(gè)正想學(xué)習(xí)
作者:
percy
時(shí)間:
2023-10-21 11:56
有沒有指定具體需要用哪個(gè)型號(hào)的單片機(jī)?
歡迎光臨 (http://www.raoushi.com/bbs/)
Powered by Discuz! X3.1