標題: 單片機串行通信接口的C51編程實驗 [打印本頁]

作者: luiliwei    時間: 2020-2-11 11:39
標題: 單片機串行通信接口的C51編程實驗
原理:
1.兩個AT89c51單片機各自P0口接一個數(shù)碼管,P1.0接一個按鈕,單片機的TXD和RXD與對方單片機的RXD和TXD連接。
2.編程實現(xiàn)單片機的數(shù)碼管顯示另一個單片機的按鈕按動次數(shù)。
步驟:
1.利用Proteus仿真軟件按設計題目要求繪制電路。
2.按題目要求編寫程序。
3.將程序下載到單片機中,進行調(diào)試運行。

#include<reg51.h>
#define ucharunsigned char
#define uintunsigned int
#define SegPort P0
sbit bit0=P2^0;
sbit bit1=P2^1;
uchar codetab[16]=
      {0x3F,0x06,0x5B,0x4F,0x66,
      0x6D,0x7D,0x07,0x7F,0x6F};
//0~9共陰極字型碼
uchar datadisplaybuf[2];//定義顯示緩沖區(qū)
bit Commflag;//定義通信標志
ucharReceiveData;//接收的數(shù)據(jù)
uchar counter;//按鍵的按動次數(shù)計數(shù)
ucharOldKey,NewKey;
//通信中斷函數(shù)
void Txd_Rxd()interrupt 4
{
     if(TI)TI=0;
      else
      {
           RI=0;
               ReceiveData=SBUF;
           Commflag=1;
      }
}
voidDataChange(uchar m)
{
      displaybuf[1]=m/10;
      displaybuf[0]=m%10;
}
void delay()
{
      int i;
      for(i=500;i>0;i--);
}
void display()
{   
      SegPort=0xff;
      SegPort=~tab[displaybuf[0]];
      bit0=0;bit1=1;
      delay();
      SegPort=0xff;
      SegPort=~tab[displaybuf[1]];
      bit0=1;bit1=0;
      delay();
      SegPort=0xff;
}
void Key()
{
     NewKey=P1&0x01;
      if((OldKey==0x01)&&(NewKey==0x00))
      {
           counter++;
           SBUF=counter;
      }
      OldKey=NewKey;
}
void main()
{
      SCON=0x50;
      TMOD=0x20;
      TH1=0xFD;
      TL1=0xFD;
      TR1=1;
      ES=1;
      EA=1;
      while(1)
      {
           Key();
           if(Commflag)
           {
                 Commflag=0;
                 DataChange(ReceiveData);
           }
           display();
      }
}

1.左數(shù)碼管顯示且紀錄右按鍵按動次數(shù)
2.右數(shù)碼管顯示且紀錄左按鍵按動次數(shù)



串行通信接口的C51編程實驗報告.rar

45.41 KB, 下載次數(shù): 18, 下載積分: 黑幣 -5






歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1