?? main.c
字號:
/*-------------------------
32(MICKEY) -->S1,S3 -->P0.5
33(KEY++) -->S2 -->P0.4
18(MICLED) -->D4 -->P2.0
31 -->SDA -->P0.6
30 -->SCL -->P0.7
5 -->RXD -->P3.0
7 -->TXD -->P3.1
-------------------------*/
#include <reg52.h>
#include "key.h"
#include "iic.h"
#include "delay.h"
#define ADDR 0x20 //定義讀寫地址
unsigned char OPEN[4] ={0X01,0X02,0X03,0XFC};
unsigned char CLOSE[4]={0X02,0X02,0X03,0XFC};
unsigned char BLINK[4]={0X03,0X02,0X05,0XFC};
unsigned char getflag[4];
unsigned char writedata[16];
unsigned char readdata[16];
unsigned char i=0;
unsigned char j=0;
unsigned char k=0;//循環計數變量
void InitBaudRate(void);//初始化波特率38400bps
bit CheckFlag(unsigned char *thedata,unsigned char *flag)
{
unsigned char i;
for(i=0;i<4;i++)
{
if(*thedata!=*flag) return 0;
else {thedata++;flag++;}
}
return 1;
}
void main()
{
MICLED=OFF; //LED默認熄滅
InitTimer2();
InitBaudRate();
while(1) //循環檢測按鍵
{
KeyStatus();
KeyDeal();
}
}
void InitBaudRate(void) //38400bps
{
SCON =0X50;
TMOD =0X20;
TH1 =253;
TL1 =253;
PCON =0X80;
TR1 =1;
TI =0;
RI =0;
EA =1;
ES =1;
}
void ES_INTERRUPT(void) interrupt 4
{
if(RI==1)
{
//關閉中斷
EA =0;
//數據暫存
getflag[i++] =SBUF;
if(i>3||SBUF==0XFC) i=0;
writedata[j]=SBUF;
if(j>15) j=0;
j++;
//判斷讀寫
if(SBUF==0X2A)//讀寫開始字符*
{
j=0;
i=0;
}
if(SBUF==0X23)//讀寫結束字符#
{
WritePages(ADDR,writedata,j);
//WriteNByte(ADDR,writedata,j);
ReadNByte(ADDR,readdata,j);
for(k=0;k<j;k++)
{
SBUF=readdata[k];
while(!TI);
TI=0;
}
j=0;
i=0;
}
//判斷命令
if(CheckFlag(getflag,OPEN)) Setkeyvalue(2);
else if(CheckFlag(getflag,CLOSE)) Setkeyvalue(3);
else if(CheckFlag(getflag,BLINK)) Setkeyvalue(1);
//開啟中斷
RI =0;
EA =1;
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -