簡(jiǎn)要說(shuō)明: 一、 尺寸:長(zhǎng)150mmX寬96mmX高25mm 二、 主要芯片:STC89C52單片機(jī)(支持AT89S52) 三、 工作電壓:直流24伏
四、 通過(guò)串口下載程序
五、 特點(diǎn): 1、具有電源指示。 2、采用LM2576-5穩(wěn)壓器使輸入工作電壓范圍6~40V可以正常工作。
3、八路輸出光電隔離輸出控制繼電器。
4、標(biāo)準(zhǔn)的11.0592M晶振。(便于設(shè)置串口波特率)
5、具有上電復(fù)位和手動(dòng)復(fù)位。
6、支持STC89C5X系列單片機(jī)以及AT89S5X單片機(jī)。
7、帶有掉電存儲(chǔ)功能,芯片24C08。
8、輸出八路具有LED指示。
9、八路5V繼電器控制,控制設(shè)備。
10、可控制8路交流220V/10A一下設(shè)備。 11、可控制8路直流30V/10A一下設(shè)備。
12、具有串口通信功能(可以上位機(jī)控制)。
13、單片機(jī)無(wú)加密,可插拔更換,帶有程序下載口,可隨意更改程序。
使用說(shuō)明: 【輸入部分標(biāo)注說(shuō)明】 【輸出部分標(biāo)注說(shuō)明】
【上位機(jī)界面】(提供源代碼) 【測(cè)試程序】 實(shí)現(xiàn)功能: - 實(shí)現(xiàn)上位機(jī)(計(jì)算機(jī))對(duì)繼電器控制,發(fā)送不同的代碼,控制對(duì)應(yīng)的繼電器(詳細(xì)內(nèi)容看程序)。
- 具有掉電存儲(chǔ)功能,即,斷電后,再恢復(fù)通電,繼電器輸出斷電前狀態(tài)。
/******************************************************************** 單片機(jī)與PC機(jī)采用9針串口,MAX232通訊,波特率默認(rèn)為9600. 單片機(jī)接收PC機(jī)發(fā)送的十六進(jìn)制碼表如下: 01、全開(kāi):PC發(fā)送0xFF; 單片機(jī)返回0XFF; 02、全關(guān):PC發(fā)送0X00;單片機(jī)返回0X00; 03、第一路開(kāi):PC發(fā)送0x01;單片機(jī)返回0X01; 04、第二路開(kāi):PC發(fā)送0x02;單片機(jī)返回0X02; 05、第三路開(kāi):PC發(fā)送0x03;單片機(jī)返回0X03; 06、第四路開(kāi):PC發(fā)送0x04;單片機(jī)返回0X04; 07、第五路開(kāi):PC發(fā)送0x05;單片機(jī)返回0X05; 08、第六路開(kāi):PC發(fā)送0x06;單片機(jī)返回0X06; 09、第七路開(kāi):PC發(fā)送0x07;單片機(jī)返回0X07; 10、第八路開(kāi):PC發(fā)送0x08;單片機(jī)返回0X08; 11、第一路關(guān):PC發(fā)送0xFE;單片機(jī)返回0XFE; 12、第二路關(guān):PC發(fā)送0xFD;單片機(jī)返回0XFD; 13、第三路關(guān):PC發(fā)送0xFC;單片機(jī)返回0XFC; 14、第四路關(guān):PC發(fā)送0xFB;單片機(jī)返回0XFB; 15、第五路關(guān):PC發(fā)送0xFA;單片機(jī)返回0XFA; 16、第六路關(guān):PC發(fā)送0xF9;單片機(jī)返回0XF9; 17、第七路關(guān):PC發(fā)送0xF8;單片機(jī)返回0XF8; 18、第八路關(guān):PC發(fā)送0xF7;單片機(jī)返回0XF7; 19、輸入狀態(tài)查詢(xún):PC發(fā)送0x55;單片機(jī)返回輸出狀態(tài)(返回值十六進(jìn)制); 20、輸出狀態(tài)查詢(xún):PC發(fā)送0xAA;單片機(jī)返回輸出狀態(tài)(返回值十六進(jìn)制); 21、輸出取反指令:PC發(fā)送0X11;單片機(jī)返回0x11;
*********************************************************************/ #include<reg52.h> #define uchar unsigned char//宏定義無(wú)符號(hào)字符型 #define uint unsigned int //宏定義無(wú)符號(hào)整型 /******************************************************************** 初始定義 *********************************************************************/ uchar sj; //存儲(chǔ)數(shù)據(jù)值 bit write=0; //寫(xiě)24C08的標(biāo)志; uchar dat=0xee; //用于存儲(chǔ)單片機(jī)接收發(fā)送緩沖寄存器SBUF里面的內(nèi)容 /*定義八位出為單片機(jī)P2口*/ sbit K1=P2^0; sbit K2=P2^1; sbit K3=P2^2; sbit K4=P2^3; sbit K5=P2^4; sbit K6=P2^5; sbit K7=P2^6; sbit K8=P2^7; /*定義八位入為單片機(jī)P1口*/ sbit IN0=P1^0; sbit IN1=P1^1; sbit IN2=P1^2; sbit IN3=P1^3; sbit IN4=P1^4; sbit IN5=P1^5; sbit IN6=P1^6; sbit IN7=P1^7; /******************************************************************** 24C08讀寫(xiě)驅(qū)動(dòng)程序 *********************************************************************/ sbit scl=P3^6; // 24c08 SCL sbit sda=P3^7; // 24c08 SDA
void delay1(uchar x) { uint i; for(i=0;i<x;i++); ; } void flash(){ ; ; } void x24c08_init() //24c08初始化子程序 { scl=1; flash(); sda=1; flash(); } void start() //啟動(dòng)(I方C)總線(xiàn) { sda=1; flash(); scl=1; flash(); sda=0; flash(); scl=0; flash(); } void stop() //停止(I方C)總線(xiàn) { sda=0; flash(); scl=1; flash(); sda=1; flash(); } void writex(uchar j) //寫(xiě)一個(gè)字節(jié) { uchar i,temp; temp=j; for (i=0;i<8;i++) { temp=temp<<1; scl=0; flash(); sda=CY; flash(); scl=1; flash(); } scl=0; flash(); sda=1; flash(); } uchar readx() //讀一個(gè)字節(jié) { uchar i,j,k=0; scl=0; flash(); sda=1; for (i=0;i<8;i++) { flash(); scl=1; flash(); if (sda==1) j=1; else j=0; k=(k<<1)|j; scl=0;} flash(); return(k); } void clock() //(I方C)線(xiàn)時(shí)鐘 { unsigned char i=0; scl=1; flash(); while ((sda==1)&&(i<255))i++; scl=0; flash(); } /******************************************************************** 從24c08的地址address中讀取一個(gè)字節(jié)數(shù)據(jù) *********************************************************************/ unsigned char x24c08_read(unsigned char address) { unsigned char i; start(); writex(0xa0); clock(); writex(address); clock(); start(); writex(0xa1); clock(); i=readx(); stop(); delay1(10); return(i); } /******************************************************************** 向24c08的address地址中寫(xiě)入一字節(jié)數(shù)據(jù) *********************************************************************/ void x24c08_write(unsigned char address,unsigned char info) { EA=0; start(); writex(0xa0); clock(); writex(address); clock(); writex(info); clock(); stop(); EA=1; delay1(50); } /******************************************************************** 延時(shí)函數(shù) *********************************************************************/ void delay(uchar t) { uchar i,j; for(i=0;i<t;i++) { for(j=13;j>0;j--); { ; } } }
/******************************************************************** 功能:串口初始化,波特率9600,方式1 *********************************************************************/ void Init_Com(void) { TMOD = 0x20; PCON = 0x00; SCON = 0x50; TH1 = 0xFd; TL1 = 0xFd; TR1 = 1; } /******************************************************************** 接收數(shù)據(jù)判斷函數(shù) *********************************************************************/ chuankou() { switch(dat) //接收數(shù)據(jù)判斷 { uchar k; k=10; case 0xff: P2=0X00;delay(k);SBUF = dat;dat=0xee;write=1;break; // 全開(kāi) case 0x00: P2=0XFF;delay(k);SBUF = dat;dat=0xee;write=1;break; // 全關(guān) case 0x01: K1=0;delay(k);SBUF = dat;dat=0xee;write=1;break; // 第一路開(kāi) case 0x02: K2=0;delay(k);SBUF = dat;dat=0xee;write=1;break; // 第二路開(kāi) case 0x03: K3=0;delay(k);SBUF = dat;dat=0xee;write=1;break; // 第三路開(kāi) case 0x04: K4=0;delay(k);SBUF = dat;dat=0xee;write=1;break; // 第四路開(kāi) case 0x05: K5=0;delay(k);SBUF = dat;dat=0xee;write=1;break; // 第五路開(kāi) case 0x06: K6=0;delay(k);SBUF = dat;dat=0xee;write=1;break; // 第六路開(kāi) case 0x07: K7=0;delay(k);SBUF = dat;dat=0xee;write=1;break; // 第七路開(kāi) case 0x08: K8=0;delay(k);SBUF = dat;dat=0xee;write=1;break; // 第八路開(kāi) case 0xFE: K1=1;delay(k);SBUF = dat;dat=0xee;write=1;break; // 第一路關(guān) case 0xFD: K2=1;delay(k);SBUF = dat;dat=0xee;write=1;break; // 第二路關(guān) case 0xFC: K3=1;delay(k);SBUF = dat;dat=0xee;write=1;break; // 第三路關(guān) case 0xFB: K4=1;delay(k);SBUF = dat;dat=0xee;write=1;break; // 第四路關(guān) case 0xFA: K5=1;delay(k);SBUF = dat;dat=0xee;write=1;break; // 第五路關(guān) case 0xF9: K6=1;delay(k);SBUF = dat;dat=0xee;write=1;break; // 第六路關(guān) case 0xF8: K7=1;delay(k);SBUF = dat;dat=0xee;write=1;break; // 第七路關(guān) case 0xF7: K8=1;delay(k);SBUF = dat;dat=0xee;write=1;break; // 第八路關(guān) case 0x55: SBUF = P1;delay(k);dat=0xee;break; // 讀輸入口狀態(tài) case 0xAA: SBUF = P2;delay(k);dat=0xee;write=1;break; // 讀輸出口狀態(tài) case 0x11: P2=~P2;delay(k);SBUF = dat;dat=0xee;write=1;break; // 輸出口取反 default:break; // 跳出 } } /******************************************************************** 主函數(shù) *********************************************************************/ void main() { Init_Com();//串口初始化 x24c08_init(); //初始化24C08 sj=x24c08_read(2);//讀出保存的數(shù)據(jù)賦于dat P2=sj;//將存儲(chǔ)的數(shù)據(jù)賦予P2口 while(1) { chuankou(); //接收數(shù)據(jù)判斷函數(shù) if ( RI ) //掃描判斷是否接收到數(shù)據(jù), { dat = SBUF; //接收數(shù)據(jù)SBUF賦與dat RI=0; //RI清零。 } if(write==1) //判斷計(jì)時(shí)器是否計(jì)時(shí)一秒 { write=0; //清零 sj=P2; //將P2口的值賦予dat x24c08_write(2,sj); //在24c08的地址2中寫(xiě)入數(shù)據(jù)dat } } } /******************************************************************** 結(jié)束 *********************************************************************/ 【圖片展示】
|