?? 通信.c
字號:
//-----------------------函數聲明,變量定義--------------------------------------------------------
#include <reg51.h>
#define KEY P1
sbit DATA=P3^1; //數據線
sbit CLK=P3^2; //時鐘線
unsigned char key_buf[8]; //按鍵緩沖區
unsigned char key_COUNT; //按鍵計數器
//--------------------------------------------------------------------------------------------------
// 函數名稱: delay
// 入口參數: N
// 函數功能:延時子程序,實現(16*N+24)us的延時
// 系統采用11.0592MHz的時鐘時,延時滿足要求,其它情況需要改動
//--------------------------------------------------------------------------------------------------
void delay(unsigned int N)
{
int i;
for(i=0;i<N;i++);
}
//--------------------------------------------------------------------------------------------------
// 函數名稱: CAL_jiaoyan
// 函數功能: 計算校驗位
//--------------------------------------------------------------------------------------------------
bit CAL_jiaoyan(unsigned char byte_data)
{
//
}
//--------------------------------------------------------------------------------------------------
// 函數名稱: SEND_byte
// 函數功能: 發送一子節數據
//--------------------------------------------------------------------------------------------------
void SEND_byte(unsigned char byte_data)
{
unsigned char i,temp;
if(CLK==0) //時鐘線為低
temp=byte_data;
CLK=1;
DATA=0;
delay(0);
CLK=0; //發送起始位
for(i=0;i<8;i++)
{
delay(0);
CLK=1;
DATA=(temp&0x01); //發送數據
byte_data=byte_data>>1;
delay(0);
CLK=0;
}
delay(0);
CLK=1;
DATA=CAL_jiaoyan(byte_data); //發送校驗位
delay(0);
CLK=0;
delay(0);
CLK=1;
DATA=1; //發送結束位
delay(0);
CLK=0;
}
//--------------------------------------------------------------------------------------------------
// 函數名稱: RECEIVE_byte
// 函數功能: 接收一子節數據
//--------------------------------------------------------------------------------------------------
unsigned char RECEIVE_byte()
{
unsigned char byte_data,i;
CLK=0;
delay(0);
CLK=1; //接收起始位,丟棄
for(i=0;i<8;i++)
{
delay(0);
CLK=0;
delay(0);
CLK=1;
byte_data=byte_data>>1;
if(DATA=1)
byte_data=byte_data|0x80;
else
byte_data=byte_data&0x7F; //接收8位數據
}
for(i=0;i<2;i++)
{
delay(0); //接收校驗位和結束位
CLK=0;
delay(0);
CLK=1;
}
return(byte_data);
}
//--------------------------------------------------------------------------------------------------
// 函數名稱: manage
// 函數功能: 主機命令處理函數
//--------------------------------------------------------------------------------------------------
void manage(unsigned char rec_data)
{
}
//--------------------------------------------------------------------------------------------------
// 函數名稱: SEND_keydata
// 函數功能: 發送按鍵值到主機
//--------------------------------------------------------------------------------------------------
void SEND_keydata()
{
unsigned char ASCII_code; //
// ASCII_code=judge_key(key_buf[key_COUNT]); //判斷鍵值,按鍵編碼成ASCII碼
SEND_byte(ASCII_code);
key_COUNT--;
}
//--------------------------------------------------------------------------------------------------
// 函數名稱: 主程序
// 函數功能: 循環查詢主機狀態
//--------------------------------------------------------------------------------------------------
void main()
{
unsigned char rec_data;
while(1)
{
if(CLK==0&&DATA==0)
{
rec_data=RECEIVE_byte(); //接收主機鍵盤
manage(rec_data); //指令處理函數
}
if(key_COUNT!=0&&CLK==1) //有按鍵等待處理
//線路空閑
SEND_keydata();
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -