欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136
標題:
單片機多機通信proteus仿真原理圖及源程序
[打印本頁]
作者:
51黑ff
時間:
2016-10-9 22:47
標題:
單片機多機通信proteus仿真原理圖及源程序
51單片機多機通信原理圖:
0.png
(35.76 KB, 下載次數: 59)
下載附件
2016-10-9 22:44 上傳
0.png
(55.73 KB, 下載次數: 47)
下載附件
2016-10-9 22:45 上傳
單片機多機通信仿真工程文件及所有完整程序等資料下載地址:
http://m.raoushi.com/bbs/dpj-56304-1.html
源程序:
#include "PMPDataR.h"
unsigned char zu[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8d};
/* 延時t毫秒 */
void delay(uint t)
{
uint i;
while(t--)
{
/* 對于11.0592M時鐘,約延時1ms */
for (i=0;i<125;i++)
{}
}
}
/* 發送數據函數 */
uchar recvdata()
{
/* 接收數據 */
while(!RI);
if (RB8==1)
return 0xee; // 若接收的為地址幀,則返回0xee
buf = SBUF;
RI = 0;
return 0; // 返回0
}
/* 串口初始化函數 */
void init_serial()
{
TMOD = 0x20; // 定時器T1使用工作方式2
TH1 = 250;
TL1 = 250;
TR1 = 1; // 開始計時
PCON = 0x80; // SMOD = 1
SCON = 0xd0; // 工作方式,9位數據位,波特率9600kbit/s,允許接收
}
/* 主程序 */
void main()
{
uchar i = 0;
uchar tmp = 0xff;
P1= 0xff;
addr = P1&0x0f; // 獲取本機地址
P23 = 1; // 發光管不亮
init_serial(); // 串口初始化
EA = 1; // 關閉所有中斷
/* 進入設備應答 */
while(1)
{
SM2 = 1; // 只接收地址幀
/* 如果接收到的地址幀不是本機地址,則繼續等待 */
while (tmp!=addr)
{
RI = 0;
while(!RI)
tmp = SBUF;
RI = 0;
}
SM2 = 0; // 允許接收數據
/* 數據接收 */
tmp = recvdata();
//if(buf!=0x00)
if (tmp==0x00)
{
P0=buf;
/* 綠燈亮,持續500ms,表示接收數據成功 */
P23 = 0;
delay(30);
P23 = 1;
}
// 如果接收數據時發現地址幀,則重新開始整個接收過程
}
}
復制代碼
/*****************************************/
/* Copyright (c) 2005, 通信工程學院 */
/* All rights reserved. */
/* 作 者:戴 佳 */
/*****************************************/
#include "PMPDataT.h"
/* 延時t毫秒 */
void delay(uint t)
{
uint i;
while(t--)
{
/* 對于11.0592M時鐘,約延時1ms */
for (i=0;i<125;i++)
{}
}
}
uchar keyscan(void)
{
uchar scancode,tmpcode;
P1 = 0xf0; // 發全0行掃描碼
if ((P1&0xf0)!=0xf0) // 若有鍵按下
{
delay(10); // 延時去抖動
if ((P1&0xf0)!=0xf0) // 延時后再判斷一次,去除抖動影響
{
scancode = 0xfe;
while((scancode&0x10)!=0) // 逐行掃描
{
P1 = scancode; // 輸出行掃描碼
if ((P1&0xf0)!=0xf0) // 本行有鍵按下
{
tmpcode = (P1&0xf0)|0x0f;
/* 返回特征字節碼,為1的位即對應于行和列 */
return((~scancode)+(~tmpcode));
}
else scancode = (scancode<<1)|0x01; // 行掃描碼左移一位
}
}
}
return(0); // 無鍵按下,返回值為0
}
/* 發送數據函數 */
void senddata(uchar buf)
{
/* 發送數據 */
TI = 0;
TB8 = 0; // 發送數據幀
SBUF =buf;
while(!TI);
TI = 0;
}
/* 串口初始化函數 */
void init_serial()
{
TMOD = 0x20; // 定時器T1使用工作方式2
TH1 = 250;
TL1 = 250;
TR1 = 1; // 開始計時
PCON = 0x80; // SMOD = 1
SCON = 0xd0; // 工作方式,9位數據位,波特率9600kbit/s,允許接收
}
void Getkey()
{
switch(get_key)
{
case 0x11: // 1行1列,數字0
key=0xc0;
break;
case 0x21: // 1行2列,數字1
key=0xf9;
break;
case 0x41: // 1行3列,數字2
key=0xa4;
break;
case 0x81: // 1行4列,數字3
key=0xb0;
break;
case 0x12: // 2行1列,數字4
key=0x99;
break;
case 0x22: // 2行2列,數字5
key=0x92;
break;
case 0x42: // 2行3列,數字6
key=0x82;
break;
case 0x82: // 2行4列,數字7
key=0xf8;
break;
case 0x14: // 3行1列,數字8
key=0x80;
break;
case 0x24: // 3行2列,數字9
key=0x90;
break;
case 0x44: // 3行3列,10
key=0x88;
break;
case 0x84: // 3行4列,11
key=0x83;
break;
case 0x18: // 4行1列,12
key=0xc6;
break;
case 0x28: // 4行2列,13
key=0xa1;
break;
case 0x48: // 4行3列,14
key=0x86;
break;
case 0x88: // 3行4列,15
key=0x8e;
break;
default:break;
}
}
/* 主程序 */
void main()
{
uchar i = 0;
key=0xc0;
while(1)
{
get_key = keyscan(); // 調用鍵盤掃描函數
Getkey();
buf=key;
/* 通過P0口讀要訪問的從機地址 */
P0 = 0xff;
addr = P0&0x0f;
init_serial(); // 串口初始化
EA = 1; // 關閉所有中斷
TI = 0;
TB8 = 1; // 發送地址幀
SBUF = addr;
while(!TI);
TI = 0;
senddata(buf); // 發送數據
}
}
復制代碼
作者:
李雪見
時間:
2018-4-11 17:33
這代碼不對呀
作者:
lyt33
時間:
2018-4-29 08:44
代碼不對
作者:
樓燕燕于
時間:
2018-5-5 18:51
大佬們,我是基于單片機的無線點餐畢業設計,但是仿真是采用多機通信的方式,所以,求助各位
大佬們,
歡迎光臨 (http://m.raoushi.com/bbs/)
Powered by Discuz! X3.1