找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 10183|回復(fù): 14
收起左側(cè)

51單片機(jī)8 IO繼電器工控板設(shè)計(jì) 含上位機(jī)源程序及PCB工程與原理圖

  [復(fù)制鏈接]
ID:386157 發(fā)表于 2018-8-14 14:23 | 顯示全部樓層 |閱讀模式
網(wǎng)上找的一個(gè)板子,全套資料都 有,可參考性強(qiáng)
微信圖片_20180814142218.png 微信圖片_201808141422181.png 微信圖片_201808141422182.png 微信圖片_201808141422183.png

Altium Designer畫(huà)的原理圖和PCB圖如下:(51hei附件中可下載工程文件)
0.png 0.png 0.png

V1394_八入八出繼電器工控板掉電存儲(chǔ)
簡(jiǎn)要說(shuō)明:
一、 尺寸:長(zhǎng)150mmX寬122mmX高25mm
二、 主要芯片:AT89S52單片機(jī)(或者STC89C52)
三、 工作電壓:直流12伏
四、 單片機(jī)標(biāo)準(zhǔn)十針下載接口。(可使用并口下載線和USB下載線下載)
五、 特點(diǎn):
             1、具有電源指示。
             2、八路輸入光電隔離引入信號(hào)。
             3、八路輸出光電隔離輸出控制繼電器。
              4、標(biāo)準(zhǔn)的11.0592M晶振。(便于設(shè)置串口波特率)
             5、具有上電復(fù)位和手動(dòng)復(fù)位。
             6、支持AT89SXX系列單片機(jī)。
             7、帶有掉電存儲(chǔ)功能,芯片24C08。
             8、輸入八路具有LED指示。
             9、輸出八路具有LED指示。
             10、八路12V繼電器控制,控制設(shè)備。
             11、可控制交流220V/10A一下設(shè)備。(最大控制設(shè)備2000W)
             12、具有串口通信功能(可以上位機(jī)控制)。
             13、單片機(jī)無(wú)加密,可插拔更換,帶有程序下載口,可隨意更改程序。
使用說(shuō)明:
【輸入部分標(biāo)注說(shuō)明】
【輸出部分標(biāo)注說(shuō)明】
主要器件標(biāo)注說(shuō)明】
上位機(jī)界面(提供源代碼)
測(cè)試程序
實(shí)現(xiàn)功能:
  • 實(shí)現(xiàn)輸入對(duì)輸出一對(duì)一控制,第一次按下開(kāi)關(guān),繼電器吸合,再次按下繼電器斷開(kāi)。
  • 實(shí)現(xiàn)上位機(jī)(計(jì)算機(jī))對(duì)繼電器控制,發(fā)送不同的代碼,控制對(duì)應(yīng)的繼電器(詳細(xì)內(nèi)容看程序)。
  • 具有掉電存儲(chǔ)功能,即,斷電后,再恢復(fù)通電,繼電器輸出斷電前狀態(tài)。

圖片展示

單片機(jī)源程序如下:

  1. /********************************************************************
  2.                           匯誠(chéng)科技
  3. 實(shí)現(xiàn)功能:此版配套測(cè)試程序
  4. 使用芯片:AT89S52
  5. 晶振:11.0592MHZ
  6. 波特率:9600
  7. 編譯環(huán)境:Keil
  8. 作者:zhangxinchunleo

  9. 淘寶店:匯誠(chéng)科技
  10. 【聲明】此程序僅用于學(xué)習(xí)與參考,引用請(qǐng)注明版權(quán)和作者信息!   
  11. *********************************************************************/
  12. /********************************************************************
  13. 單片機(jī)與PC機(jī)采用9針串口,MAX232通訊,波特率默認(rèn)為9600.
  14. 單片機(jī)接收PC機(jī)發(fā)送的十六進(jìn)制碼表如下:
  15. 01、全開(kāi):PC發(fā)送0xFF; 單片機(jī)返回0XFF;
  16. 02、全關(guān):PC發(fā)送0X00; 單片機(jī)返回0X00;
  17. 03、第一路開(kāi):PC發(fā)送0x01;單片機(jī)返回0X01;
  18. 04、第二路開(kāi):PC發(fā)送0x02;單片機(jī)返回0X02;
  19. 05、第三路開(kāi):PC發(fā)送0x03;單片機(jī)返回0X03;
  20. 06、第四路開(kāi):PC發(fā)送0x04;單片機(jī)返回0X04;
  21. 07、第五路開(kāi):PC發(fā)送0x05;單片機(jī)返回0X05;
  22. 08、第六路開(kāi):PC發(fā)送0x06;單片機(jī)返回0X06;
  23. 09、第七路開(kāi):PC發(fā)送0x07;單片機(jī)返回0X07;
  24. 10、第八路開(kāi):PC發(fā)送0x08;單片機(jī)返回0X08;
  25. 11、第一路關(guān):PC發(fā)送0xFE;單片機(jī)返回0XFE;
  26. 12、第二路關(guān):PC發(fā)送0xFD;單片機(jī)返回0XFD;
  27. 13、第三路關(guān):PC發(fā)送0xFC;單片機(jī)返回0XFC;
  28. 14、第四路關(guān):PC發(fā)送0xFB;單片機(jī)返回0XFB;
  29. 15、第五路關(guān):PC發(fā)送0xFA;單片機(jī)返回0XFA;
  30. 16、第六路關(guān):PC發(fā)送0xF9;單片機(jī)返回0XF9;
  31. 17、第七路關(guān):PC發(fā)送0xF8;單片機(jī)返回0XF8;
  32. 18、第八路關(guān):PC發(fā)送0xF7;單片機(jī)返回0XF7;
  33. 19、輸入狀態(tài)查詢:PC發(fā)送0x55;單片機(jī)返回輸出狀態(tài)(返回值十六進(jìn)制);
  34. 20、輸出狀態(tài)查詢:PC發(fā)送0xAA;單片機(jī)返回輸出狀態(tài)(返回值十六進(jìn)制);
  35. 21、輸出取反指令:PC發(fā)送0X11;單片機(jī)返回0x11;

  36. *********************************************************************/
  37. #include<reg52.h>
  38. #define uchar unsigned char//宏定義無(wú)符號(hào)字符型
  39. #define uint unsigned int  //宏定義無(wú)符號(hào)整型
  40. /********************************************************************
  41.                             初始定義
  42. *********************************************************************/
  43. uchar sj; //存儲(chǔ)數(shù)據(jù)值
  44. bit write=0; //寫(xiě)24C08 的標(biāo)志;
  45. uchar dat=0xee; //用于存儲(chǔ)單片機(jī)接收發(fā)送緩沖寄存器SBUF里面的內(nèi)容
  46. /*定義八位出為單片機(jī)P2口*/
  47. sbit K1=P2^0;
  48. sbit K2=P2^1;
  49. sbit K3=P2^2;
  50. sbit K4=P2^3;
  51. sbit K5=P2^4;
  52. sbit K6=P2^5;
  53. sbit K7=P2^6;
  54. sbit K8=P2^7;
  55. /*定義八位入為單片機(jī)P1口*/
  56. sbit IN0=P1^0;
  57. sbit IN1=P1^1;
  58. sbit IN2=P1^2;
  59. sbit IN3=P1^3;
  60. sbit IN4=P1^4;
  61. sbit IN5=P1^5;
  62. sbit IN6=P1^6;
  63. sbit IN7=P1^7;
  64. /********************************************************************
  65.                     24C08 讀寫(xiě)驅(qū)動(dòng)程序
  66. *********************************************************************/
  67. sbit scl=P3^6; // 24c08 SCL
  68. sbit sda=P3^7; // 24c08 SDA

  69. void delay1(uchar x)
  70. {
  71. uint i;
  72. for(i=0;i<x;i++);
  73. ;
  74. }
  75. void flash(){ ; ; }
  76. void x24c08_init() //24c08 初始化子程序
  77. {
  78. scl=1;
  79. flash();
  80. sda=1;                    
  81. flash();
  82. }
  83. void start() //啟動(dòng)(I方C)總線
  84. {
  85. sda=1; flash(); scl=1; flash(); sda=0; flash(); scl=0; flash();
  86. }
  87. void stop() //停止(I方C)總線
  88. {
  89. sda=0; flash(); scl=1; flash(); sda=1; flash();
  90. }
  91. void writex(uchar j) //寫(xiě)一個(gè)字節(jié)
  92. {
  93. uchar i,temp;
  94. temp=j;
  95. for (i=0;i<8;i++)
  96. {
  97. temp=temp<<1; scl=0; flash(); sda=CY; flash(); scl=1; flash();
  98. }
  99. scl=0; flash(); sda=1; flash();
  100. }
  101. uchar readx() //讀一個(gè)字節(jié)
  102. {
  103. uchar i,j,k=0;
  104. scl=0; flash(); sda=1;
  105. for (i=0;i<8;i++)
  106. {
  107. flash(); scl=1; flash();
  108. if (sda==1) j=1;
  109. else j=0;
  110. k=(k<<1)|j;
  111. scl=0;}
  112. flash(); return(k);
  113. }
  114. void clock() //(I方C)線時(shí)鐘
  115. {
  116. unsigned char i=0;
  117. scl=1; flash();
  118. while ((sda==1)&&(i<255))i++;
  119. scl=0; flash();
  120. }
  121. /********************************************************************
  122.                 從24c08 的地址address 中讀取一個(gè)字節(jié)數(shù)據(jù)
  123. *********************************************************************/
  124. unsigned char x24c08_read(unsigned char address)
  125. {
  126. unsigned char i;
  127. start(); writex(0xa0);
  128. clock(); writex(address);
  129. clock(); start();
  130. writex(0xa1); clock();
  131. i=readx(); stop();
  132. delay1(10);
  133. return(i);
  134. }
  135. /********************************************************************
  136.                 向24c08 的address地址中寫(xiě)入一字節(jié)數(shù)據(jù)
  137. *********************************************************************/
  138. void x24c08_write(unsigned char address,unsigned char info)
  139. {
  140. EA=0;
  141. start(); writex(0xa0);
  142. clock(); writex(address);
  143. clock(); writex(info);
  144. clock(); stop();
  145. EA=1;
  146. delay1(50);
  147. }
  148. /********************************************************************
  149.                             延時(shí)函數(shù)
  150. *********************************************************************/
  151. void delay(uchar t)
  152. {
  153.   uchar i,j;
  154.    for(i=0;i<t;i++)
  155.    {
  156.                  for(j=13;j>0;j--);
  157.               { ;
  158.               }
  159.    }
  160. }

  161. /********************************************************************
  162.               功能:串口初始化,波特率9600,方式1
  163. *********************************************************************/
  164. void Init_Com(void)
  165. {
  166. TMOD = 0x20;
  167. PCON = 0x00;
  168. SCON = 0x50;
  169. TH1 = 0xFd;
  170. TL1 = 0xFd;
  171. TR1 = 1;
  172. }
  173. /********************************************************************
  174.                             接收數(shù)據(jù)判斷函數(shù)
  175. *********************************************************************/
  176. chuankou()
  177. {
  178. switch(dat) //接收數(shù)據(jù)判斷
  179. {
  180. uchar k;
  181. k=10;
  182. case 0xff: P2=0X00;delay(k);SBUF = dat;dat=0xee;write=1;break; //  全開(kāi)
  183. case 0x00: P2=0XFF;delay(k);SBUF = dat;dat=0xee;write=1;break; //  全關(guān)
  184. case 0x01: K1=0;delay(k);SBUF = dat;dat=0xee;write=1;break;                 //  第一路開(kāi)
  185. case 0x02: K2=0;delay(k);SBUF = dat;dat=0xee;write=1;break;                 //  第二路開(kāi)
  186. case 0x03: K3=0;delay(k);SBUF = dat;dat=0xee;write=1;break;                 //  第三路開(kāi)
  187. case 0x04: K4=0;delay(k);SBUF = dat;dat=0xee;write=1;break;                 //  第四路開(kāi)
  188. case 0x05: K5=0;delay(k);SBUF = dat;dat=0xee;write=1;break;                 //  第五路開(kāi)
  189. case 0x06: K6=0;delay(k);SBUF = dat;dat=0xee;write=1;break;                 //  第六路開(kāi)
  190. case 0x07: K7=0;delay(k);SBUF = dat;dat=0xee;write=1;break;                 //  第七路開(kāi)
  191. case 0x08: K8=0;delay(k);SBUF = dat;dat=0xee;write=1;break;                 //  第八路開(kāi)
  192. case 0xFE: K1=1;delay(k);SBUF = dat;dat=0xee;write=1;break;                 //  第一路關(guān)
  193. case 0xFD: K2=1;delay(k);SBUF = dat;dat=0xee;write=1;break;                 //  第二路關(guān)
  194. case 0xFC: K3=1;delay(k);SBUF = dat;dat=0xee;write=1;break;                 //  第三路關(guān)
  195. case 0xFB: K4=1;delay(k);SBUF = dat;dat=0xee;write=1;break;                 //  第四路關(guān)
  196. case 0xFA: K5=1;delay(k);SBUF = dat;dat=0xee;write=1;break;                 //  第五路關(guān)
  197. case 0xF9: K6=1;delay(k);SBUF = dat;dat=0xee;write=1;break;                 //  第六路關(guān)
  198. case 0xF8: K7=1;delay(k);SBUF = dat;dat=0xee;write=1;break;                 //  第七路關(guān)
  199. case 0xF7: K8=1;delay(k);SBUF = dat;dat=0xee;write=1;break;                 //  第八路關(guān)
  200. case 0x55: SBUF = P1;delay(k);dat=0xee;break;                 //  讀輸入口狀態(tài)
  201. case 0xAA: SBUF = P2;delay(k);dat=0xee;write=1;break;                 //  讀輸出口狀態(tài)
  202. case 0x11: P2=~P2;delay(k);SBUF = dat;dat=0xee;write=1;break;  //  輸出口取反
  203. default:break;                                                                         //  跳出
  204. }
  205. }
  206. /********************************************************************
  207.                             按鍵函數(shù)
  208. *********************************************************************/
  209. KEY()
  210. {
  211. uchar k;
  212. k=100;
  213. if(IN0==0){delay(k);while(!IN0);K8=!K8;write=1;}
  214. if(IN1==0){delay(k);while(!IN1);K7=!K7;write=1;}
  215. if(IN2==0){delay(k);while(!IN2);K6=!K6;write=1;}
  216. if(IN3==0){delay(k);while(!IN3);K5=!K5;write=1;}
  217. if(IN4==0){delay(k);while(!IN4);K4=!K4;write=1;}
  218. if(IN5==0){delay(k);while(!IN5);K3=!K3;write=1;}
  219. if(IN6==0){delay(k);while(!IN6);K2=!K2;write=1;}
  220. if(IN7==0){delay(k);while(!IN7);K1=!K1;write=1;}
  221. }
  222. /********************************************************************
  223.                             主函數(shù)
  224. *********************************************************************/
  225. void main()
  226. {
  227. Init_Com();//串口初始化
  228. x24c08_init(); //初始化24C08
  229. sj=x24c08_read(2);//讀出保存的數(shù)據(jù)賦于dat
  230. P2=sj;//將存儲(chǔ)的數(shù)據(jù)賦予P2口
  231. while(1)
  232. {
  233. chuankou();              // 接收數(shù)據(jù)判斷函數(shù)

  234. if ( RI ) //掃描判斷是否接收到數(shù)據(jù),
  235. {
  236. dat = SBUF; //接收數(shù)據(jù)SBUF賦與dat
  237. RI=0; //RI 清零。
  238. }
  239. KEY(); //調(diào)用按鍵函數(shù)
  240. if(write==1) //判斷計(jì)時(shí)器是否計(jì)時(shí)一秒
  241. {
  242. write=0; //清零
  243. sj=P2;              //將P2口的值賦予dat
  244. x24c08_write(2,sj); //在24c08 的地址2 中寫(xiě)入數(shù)據(jù)dat
  245. }               
  246. }
  247. }
  248. /********************************************************************
  249.                               結(jié)束
  250. *********************************************************************/
復(fù)制代碼

所有資料51hei提供下載:
AT89S52_8IO繼電器工控板_掉電存儲(chǔ)DXP資料.rar (5.2 MB, 下載次數(shù): 285)


評(píng)分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎(jiǎng)勵(lì)!

查看全部評(píng)分

回復(fù)

使用道具 舉報(bào)

ID:387700 發(fā)表于 2018-8-28 23:11 | 顯示全部樓層
這個(gè)有沒(méi)有現(xiàn)成的賣(mài)啊
回復(fù)

使用道具 舉報(bào)

ID:388329 發(fā)表于 2018-9-2 23:20 | 顯示全部樓層
還可以啊,這個(gè)東西
回復(fù)

使用道具 舉報(bào)

ID:426763 發(fā)表于 2018-11-15 10:12 來(lái)自手機(jī) | 顯示全部樓層
原理圖和pcn在哪里呢
回復(fù)

使用道具 舉報(bào)

ID:459158 發(fā)表于 2019-1-1 19:35 來(lái)自手機(jī) | 顯示全部樓層
很好,非常好,留個(gè)腳印
回復(fù)

使用道具 舉報(bào)

ID:165792 發(fā)表于 2019-1-9 19:57 | 顯示全部樓層
謝謝分享
回復(fù)

使用道具 舉報(bào)

ID:79631 發(fā)表于 2019-2-22 10:02 | 顯示全部樓層
很好,非常好,留個(gè)腳印
回復(fù)

使用道具 舉報(bào)

ID:250631 發(fā)表于 2019-2-22 14:40 | 顯示全部樓層
感謝樓主的無(wú)私奉獻(xiàn)。
回復(fù)

使用道具 舉報(bào)

ID:8190 發(fā)表于 2019-2-22 14:52 | 顯示全部樓層
學(xué)習(xí)了  謝謝分享
回復(fù)

使用道具 舉報(bào)

ID:487335 發(fā)表于 2019-3-9 12:48 | 顯示全部樓層
板子可好用了,已經(jīng)用過(guò)好多塊,沒(méi)想到這里還有這么好的資料,可惜積分不夠
回復(fù)

使用道具 舉報(bào)

ID:425600 發(fā)表于 2019-3-9 21:06 | 顯示全部樓層
非常好的資料,謝謝
回復(fù)

使用道具 舉報(bào)

ID:571679 發(fā)表于 2019-6-25 13:39 | 顯示全部樓層

很好,非常好,留個(gè)腳印
回復(fù)

使用道具 舉報(bào)

ID:570488 發(fā)表于 2019-6-26 11:47 | 顯示全部樓層
這個(gè)東西確實(shí)有用了,最近正在研究類似的東西~ 其實(shí)也可以自己用一個(gè)最小系統(tǒng),輸出好搞定,因?yàn)樘詫毶嫌欣^電器模塊賣(mài),5V的20塊錢(qián)八個(gè)繼電器的,但是輸入的話,沒(méi)有直接的,需要自己弄光耦隔離~
回復(fù)

使用道具 舉報(bào)

ID:84000 發(fā)表于 2019-9-26 13:09 | 顯示全部樓層
這個(gè)板子看上去很不錯(cuò),自己學(xué)著坐一塊用在工控上應(yīng)該很理想。
回復(fù)

使用道具 舉報(bào)

ID:476284 發(fā)表于 2024-7-26 22:36 | 顯示全部樓層
這個(gè)案例不錯(cuò),資料比較齊全,謝謝分享!
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表