久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

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

QQ登錄

只需一步,快速開始

搜索
查看: 2900|回復(fù): 1
打印 上一主題 下一主題
收起左側(cè)

C51單片機(jī)實(shí)現(xiàn)8按鈕和1串口 雙作用控制8繼電器程序

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:115923 發(fā)表于 2020-12-17 21:57 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
*********************************************************************
輸入控制:
第1路輸入信號(hào),第1路繼電器吸合。
第2路輸入信號(hào),第1路繼電器斷開。
第3路輸入信號(hào),第2路繼電器吸合。
第4路輸入信號(hào),第2路繼電器斷開。
第5路輸入信號(hào),第3路繼電器吸合。
第6路輸入信號(hào),第3路繼電器斷開。
第7路輸入信號(hào),第4路繼電器吸合。
第8路輸入信號(hào),第4路繼電器斷開。

單片機(jī)與PC機(jī)采用max232  max485通訊或者TTL通信,波特率默認(rèn)為9600.
單片機(jī)接收PC機(jī)發(fā)送的數(shù)據(jù)碼表如下:
PC向單片機(jī)發(fā)送字符'A'第1路繼電器吸合單片機(jī)返回值'A'。
PC向單片機(jī)發(fā)送字符'B'第1路繼電器吸合單片機(jī)返回值'B'。
PC向單片機(jī)發(fā)送字符'C'第1路繼電器吸合單片機(jī)返回值'C'。
PC向單片機(jī)發(fā)送字符'D'第1路繼電器吸合單片機(jī)返回值'D'。
PC向單片機(jī)發(fā)送字符'a'第1路繼電器斷開單片機(jī)返回值'a'。
PC向單片機(jī)發(fā)送字符'b'第1路繼電器斷開單片機(jī)返回值'b'。
PC向單片機(jī)發(fā)送字符'c'第1路繼電器斷開單片機(jī)返回值'c'。
PC向單片機(jī)發(fā)送字符'd'第1路繼電器斷開單片機(jī)返回值'd'。

PC向單片機(jī)發(fā)送字符'1'查詢第1路輸入狀態(tài),有輸入單片機(jī)返回值'F'無(wú)輸入單片機(jī)返回值'f'。
PC向單片機(jī)發(fā)送字符'2'查詢第2路輸入狀態(tài),有輸入單片機(jī)返回值'F'無(wú)輸入單片機(jī)返回值'f'。
PC向單片機(jī)發(fā)送字符'3'查詢第3路輸入狀態(tài),有輸入單片機(jī)返回值'F'無(wú)輸入單片機(jī)返回值'f'。
PC向單片機(jī)發(fā)送字符'4'查詢第4路輸入狀態(tài),有輸入單片機(jī)返回值'F'無(wú)輸入單片機(jī)返回值'f'。
PC向單片機(jī)發(fā)送字符'5'查詢第5路輸入狀態(tài),有輸入單片機(jī)返回值'F'無(wú)輸入單片機(jī)返回值'f'。
PC向單片機(jī)發(fā)送字符'6'查詢第6路輸入狀態(tài),有輸入單片機(jī)返回值'F'無(wú)輸入單片機(jī)返回值'f'。
PC向單片機(jī)發(fā)送字符'7'查詢第7路輸入狀態(tài),有輸入單片機(jī)返回值'F'無(wú)輸入單片機(jī)返回值'f'。
PC向單片機(jī)發(fā)送字符'8'查詢第8路輸入狀態(tài),有輸入單片機(jī)返回值'F'無(wú)輸入單片機(jī)返回值'f'。

PC向單片機(jī)發(fā)送字符'E'所有繼電器輸出狀態(tài)取反單片機(jī)返回值'E'。
*********************************************************************/
#include "STC15W408AS.h"
#include <intrins.H>
#define uchar unsigned char //宏定義字符型變量
#define uint  unsigned int        //宏定義整型變量
/********************************************************************
                            波特率設(shè)定
*********************************************************************/
//#define BAUD 0XF400  //1200bps@ 11.0592MHZ
//#define BAUD 0XFA00  //2400bps@ 11.0592MHZ
//#define BAUD 0XFD00  //4800bps@ 11.0592MHZ
#define BAUD 0XFE80  //9600bps@ 11.0592MHZ
//#define BAUD 0XFF40  //19200bps@ 11.0592MHZ
//#define BAUD 0XFFA0  //38400bps@ 11.0592MHZ

uchar dat; //用于存儲(chǔ)單片機(jī)接收發(fā)送緩沖寄存器SBUF里面的內(nèi)容

             sbit IN1 = P1^2;                        /*單片機(jī)1.2引腳檢測(cè)IN1是否動(dòng)作*/
           sbit IN2 = P1^3;                        /*單片機(jī)1.3引腳檢測(cè)IN2是否動(dòng)作*/
           sbit IN3 = P1^4;                        /*單片機(jī)1.4引腳檢測(cè)IN3是否動(dòng)作*/
           sbit IN4 = P1^5;                        /*單片機(jī)1.5引腳檢測(cè)IN4是否動(dòng)作*/
           sbit IN5 = P1^6;                    /*單片機(jī)1.6引腳檢測(cè)IN5是否動(dòng)作*/
           sbit IN6 = P1^7;                        /*單片機(jī)1.7引腳檢測(cè)IN5是否動(dòng)作*/
           sbit IN7 = P5^4;                        /*單片機(jī)5.4引腳檢測(cè)IN5是否動(dòng)作*/
           sbit IN8 = P5^5;                        /*單片機(jī)5.5引腳檢測(cè)IN5是否動(dòng)作*/
           
  sbit COM1 = P3^7;                  /*單片機(jī)3.7引腳控制繼電器COM1*/
  sbit COM2 = P3^6;                  /*單片機(jī)3.6引腳控制繼電器COM2*/
  sbit COM3 = P3^5;                  /*單片機(jī)3.5引腳控制繼電器COM3*/
  sbit COM4 = P3^4;                  /*單片機(jī)3.4引腳控制繼電器COM4*/

/********************************************************************
                            定義特殊寄存器
*********************************************************************/
sbit RXB=P3^0;
sbit TXB=P3^1;
/********************************************************************
                           定義數(shù)據(jù)類型
*********************************************************************/
uchar TBUF,RBUF;
uchar TDAT,RDAT;
uchar TCNT,RCNT;
uchar TBIT,RBIT;
uint TING,RING;
uint TEND,REND;

void UART_INIT(); //聲明函數(shù)

uchar t,r;                  //定義數(shù)據(jù)類型
uchar but;          //數(shù)據(jù)存儲(chǔ)數(shù)組
/********************************************************************
                            延時(shí)函數(shù)
*********************************************************************/
void delay(uchar t)
{
  uchar i,j;
   for(i=0;i<t;i++)
   {
            for(j=13;j>0;j--);
         { ;
         }
   }
}
/********************************************************************
                            延時(shí)函數(shù)
*********************************************************************
void delays()//延時(shí)程序
{
uchar m,n,s;
for(m=20;m>0;m--)
for(n=50;n>0;n--)
for(s=248;s>0;s--);
}
/****************發(fā)送函數(shù)*********************/
void senduart2()
{        

                    if(TEND)          //允許發(fā)送
                        {
                                 TEND=0;
                                 TBUF=but;
                                 TING=1;
                        }
                        while(!TEND);
}
/********************************************************************
                            主函數(shù)
*********************************************************************/
void main()
{

TMOD=0X00;           //定時(shí)器T0設(shè)定
AUXR=0X80;           //輔助寄存器
TL0=BAUD;           //十六位寄存器
TH0=BAUD>>8;   //十六位寄存器
TR0=1;                   //開定時(shí)器
ET0=1;
PT0=1;
EA=1;                   //開總中斷
UART_INIT();   //串口初始化
while(1)           // 循環(huán)
{
if(IN1==0) {COM1=0;}
if(IN2==0) {COM1=1;}
if(IN3==0) {COM2=0;}
if(IN4==0) {COM2=1;}
if(IN5==0) {COM3=0;}
if(IN6==0) {COM3=1;}
if(IN7==0) {COM4=0;}
if(IN8==0) {COM4=1;}

if(REND)
  {
   REND=0;
   r++;
   dat=RBUF;
   }

switch(dat) //接收數(shù)據(jù)判斷
{
uchar k;
k=10;
case 'A': COM1=0;delay(k);but=dat;senduart2();dat=0xee;break;           //  開
case 'B': COM2=0;delay(k);but=dat;senduart2();dat=0xee;break;           //  開
case 'C': COM3=0;delay(k);but=dat;senduart2();dat=0xee;break;           //  開
case 'D': COM4=0;delay(k);but=dat;senduart2();dat=0xee;break;           //  開

case 'a': COM1=1;delay(k);but=dat;senduart2();dat=0xee;break;           //  關(guān)
case 'b': COM2=1;delay(k);but=dat;senduart2();dat=0xee;break;           //  關(guān)
case 'c': COM3=1;delay(k);but=dat;senduart2();dat=0xee;break;           //  關(guān)
case 'd': COM4=1;delay(k);but=dat;senduart2();dat=0xee;break;           //  關(guān)

case '1': if(IN1==0){but='F';}if(IN1==1){but='f';}delay(k);senduart2();dat=0xee;break;           //  讀輸入口狀態(tài)
case '2': if(IN2==0){but='F';}if(IN1==1){but='f';}delay(k);senduart2();dat=0xee;break;           //  讀輸入口狀態(tài)
case '3': if(IN3==0){but='F';}if(IN1==1){but='f';}delay(k);senduart2();dat=0xee;break;           //  讀輸入口狀態(tài)
case '4': if(IN4==0){but='F';}if(IN1==1){but='f';}delay(k);senduart2();dat=0xee;break;           //  讀輸入口狀態(tài)
case '5': if(IN5==0){but='F';}if(IN1==1){but='f';}delay(k);senduart2();dat=0xee;break;           //  讀輸入口狀態(tài)
case '6': if(IN6==0){but='F';}if(IN1==1){but='f';}delay(k);senduart2();dat=0xee;break;           //  讀輸入口狀態(tài)
case '7': if(IN7==0){but='F';}if(IN1==1){but='f';}delay(k);senduart2();dat=0xee;break;           //  讀輸入口狀態(tài)
case '8': if(IN8==0){but='F';}if(IN1==1){but='f';}delay(k);senduart2();dat=0xee;break;           //  讀輸入口狀態(tài)

case 'E': COM1=!COM1;COM2=!COM2;COM3=!COM3;COM4=!COM4;delay(k);but=dat;senduart2();dat=0xee;break;  //  輸出口取反
default:break;                                           //  跳出
}

         }
   }


/********************************************************************
                            定時(shí)器T0
*********************************************************************/
void tm0()interrupt 1 using 1
{
if(RING)
  {
   if(--RCNT==0)
    {
         RCNT=3;
         if(--RBIT==0)
        {
                 RBUF=RDAT;
                 RING=0;
         REND=1;
                }
                else
                {
                 RDAT>>=1;
                 if(RXB)RDAT|=0X80;
                }

    }
  }
    else if(!RXB)
        {
         RING=1;
         RCNT=4;
         RBIT=9;
        }
    if(--TCNT==0)
        {
        TCNT=3;
        if(TING)
        {
          if(TBIT==0)
          {
          TXB=0;
          TDAT=TBUF;
          TBIT=9;
          }
          else
          {
          TDAT>>=1;
          if(--TBIT==0)
          {
           TXB=1;
           TING=0;
           TEND=1;
          }
          else
          {
          TXB=CY;
          }
          }
        }
        }
}
/********************************************************************
              功能:串口初始化,波特率9600,方式1
*********************************************************************/
void UART_INIT()
{
TING=0;
RING=0;

TEND=1;
REND=0;

TCNT=0;
RCNT=0;
}

/********************************************************************
                            結(jié)束
*********************************************************************/


分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏1 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:112693 發(fā)表于 2024-1-9 17:54 | 只看該作者
不錯(cuò)的程序,謝謝樓主的分享
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 欧洲精品码一区二区三区免费看 | 久久www免费人成看片高清 | 91精品国产91久久综合桃花 | 伊人久久综合 | 国产精品国产成人国产三级 | 成人精品视频在线观看 | 黑人巨大精品欧美黑白配亚洲 | www.久久久久久久久 | 色呦呦在线 | av免费网站在线观看 | 国产精品美女久久久久久久久久久 | 亚洲成网 | 欧美日韩一区二区三区四区 | 日韩av在线播 | 国产欧美精品一区二区色综合朱莉 | 一区二区三区不卡视频 | 国产视频一区二区在线观看 | 色吧色综合 | 亚洲精品久久久久久国产精华液 | 亚洲国产精品一区二区www | 91精品国产欧美一区二区成人 | 国产成人精品a视频一区www | 日韩人体视频 | 在线观看成人小视频 | 一区二区不卡视频 | 亚洲+变态+欧美+另类+精品 | 亚洲福利 | 男女网站免费观看 | 欧美成人精品一区二区男人看 | 日本黄色大片免费 | 一区中文字幕 | 午夜小视频在线播放 | 中文在线一区二区 | 亚洲成人第一页 | 久久国产精品视频 | 欧美视频 亚洲视频 | 欧美性生活免费 | 成人一区在线观看 | 九九99久久 | 亚洲夜射 | 欧美在线一区二区三区 |