標題: 單片機串行通信接口的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
2020-2-11 11:38 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
45.41 KB, 下載次數(shù): 18, 下載積分: 黑幣 -5
歡迎光臨 (http://www.torrancerestoration.com/bbs/) |
Powered by Discuz! X3.1 |