📄 mcu-jieshou.c
字号:
{
RxBuf[i]=SpiRead(); // Read data and save to buffer
}
CSN_1;
Delay(10);
TRX_CE_1;
}
//==========================NRF905数据接收流程================================
void RX(void)
{
SetRxMode(); // Set nRF905 in Rx mode
while (CheckDR()==0);
Delay(10);
RxPacket(); // Recive data by nRF905
Delay(10);
}
//========================延时约5ms=============================================
void Delay5ms(void)
{
uint i=40000;
while (i != 0)
{
i--;
}
}
//========================等待1602液晶完成内部操作==============================
void WaitForEnable(void)
{
P4DIR &= 0x00; //将P4口切换为输入状态
CLR_RS;
SET_RW;
_NOP();
SET_EN;
_NOP();
_NOP();
while((P4IN & Busy)!=0); //检测忙标志
CLR_EN;
P4DIR |= 0xFF; //将P4口切换为输出状态
}
//==========================向液晶模块写入命令==================================
//=================cmd--命令,chk--是否判忙的标志,1:判忙,0:不判=============
void LcdWriteCommand(uchar cmd,uchar chk)
{
if (chk) WaitForEnable(); // 检测忙信号?
CLR_RS;
CLR_RW;
_NOP();
DataPort = cmd; //将命令字写入数据端口
_NOP();
SET_EN; //产生使能脉冲信号
_NOP();
_NOP();
CLR_EN;
}
//=====================向液晶显示的当前地址写入显示数据=========================
void LcdWriteData( uchar data )
{
WaitForEnable(); //等待液晶不忙
SET_RS;
CLR_RW;
_NOP();
DataPort = data; //将显示数据写入数据端口
_NOP();
SET_EN; //产生使能脉冲信号
_NOP();
_NOP();
CLR_EN;
}
//==================向液晶输入显示字符位置的坐标信息============================
void LocateXY(uchar x,uchar y)
{
uchar temp;
x&= 0x01;
temp = y&0x0f;
if(x) temp |= 0x40; //如果在第2行
temp |= 0x80;
LcdWriteCommand(temp,0);
}
//==========================在某个位置显示一个字符==============================
//============x--位置的列坐标 y--位置的行坐标data--显示的字符数据=============
void DisoneChar(uchar x,uchar y,uchar data)
{
LocateXY( x, y );
LcdWriteData( data );
}
//==============================让液晶从某个位置起连续显示一个字符==============
//==============================y--位置的列坐标 x--位置的行坐标================
void DispStr(uchar x,uchar y,uchar *ptr)
{
uchar *temp;
uchar i,n = 0;
temp = ptr;
while(*ptr++ != '\0') n++; //计算字符串有效字符的个数
for (i=0;i<n;i++)
{
DisoneChar(x++,y,temp[i]);
if (x == 0x0f)
{
x = 0;
y ^= 1;
}
}
}
//让液晶从某个位置起连续显示N个字符
void DispNChar(uchar x,uchar y, uchar n,uchar *ptr)
{
uchar i;
for (i=0;i<n;i++)
{
DisoneChar(x++,y,ptr[i]);
if (x == 0x0f)
{
x = 0;
y ^= 1;
}
}
}
//========================对1602液晶模块进行复位操作============================
void LcdReset(void)
{
LcdWriteCommand(0x38, 0); //规定的复位操作
Delay5ms();
LcdWriteCommand(0x38, 0);
Delay5ms();
LcdWriteCommand(0x38, 0);
Delay5ms();
LcdWriteCommand(0x38, 1); //显示模式设置
LcdWriteCommand(0x08, 1); //显示关闭
LcdWriteCommand(0x01, 1); //显示清屏
LcdWriteCommand(0x06, 1); //写字符时整体不移动
LcdWriteCommand(0x0c, 1); //显示开,不开游标,不闪烁
}
//==================================NEWMSG-JASK3000=============================
void NewmsgJASK3000()
{
DisoneChar(0,1,0x4e) ;
DisoneChar(0,2,0x45) ;
DisoneChar(0,3,0x57) ;
DisoneChar(0,4,0x4d) ;
DisoneChar(0,5,0x53) ;
DisoneChar(0,6,0x47) ;
DisoneChar(0,7,0x2d) ;
DisoneChar(0,8,0x2d) ;
DisoneChar(0,9,0x4a) ;
DisoneChar(0,10,0x41) ;
DisoneChar(0,11,0x53) ;
DisoneChar(0,12,0x4b) ;
DisoneChar(0,13,0x33) ;
DisoneChar(0,14,0x30) ;
DisoneChar(0,15,0x30) ;
DisoneChar(0,16,0x30) ;
Delay5ms();
DisoneChar(1,2,0x41) ;
DisoneChar(1,3,0x3a);
DisoneChar(1,4,0x42 );
DisoneChar(1,5,0x20);
DisoneChar(1,6,0x20);
DisoneChar(1,7,seg[bai1] );
DisoneChar(1,8,seg[shi1]);
DisoneChar(1,9,seg[ge1]);
DisoneChar(1,10,0x3a);
DisoneChar(1,11,seg[bai2]);
DisoneChar(1,12,seg[shi2]);
DisoneChar(1,13,seg[ge2]);
}
//=============================比赛计分显示=====================================
void display()
{
DisoneChar(1,7,seg[bai1] );
DisoneChar(1,8,seg[shi1]);
DisoneChar(1,9,seg[ge1]);
DisoneChar(1,10,0x3a);
DisoneChar(1,11,seg[bai2]);
DisoneChar(1,12,seg[shi2]);
DisoneChar(1,13,seg[ge2]);
}
//==================================主函数=====================================
void main(void)
{
WDTCTL = WDTPW + WDTHOLD;
InitSys();
nRF905_IO_set();
LED_IO_set(); //LED端口设置
KEY_IO_set(); //KEY端口设置
LCD_IO_set(); //LCD端口设置
Config905();
LcdReset(); //LCD初始化
NewmsgJASK3000();
LED1_1;LED2_1;
while(1)
{
RX(); //接收数据后判断
if(RxBuf[0]==0x11) //A队+1
{
count1=count1+1;LED1_0;
}
if(RxBuf[0]==0x21) //A队+2
{
count1=count1+2;LED1_1;
}
if(RxBuf[0]==0x31) //A队+3
{
count1=count1+3; LED1_0;
}
if(RxBuf[0]==0x41) //B队+1
{
count2=count2+1;LED2_0;
}
if(RxBuf[0]==0x51) //B队+2
{
count2=count2+2;LED2_1;
}
if(RxBuf[0]==0x61) //B队+3
{
count2=count2+3;LED2_0;
}
if(RxBuf[0]==0x71) //A队-1
{
count1=count1-1;LED1_1;
}
if(RxBuf[0]==0x91) //B队-1
{
count2=count2-1; LED2_1;
}
RxBuf[0]=0;
bai1=count1/100;shi1=count1%100/10; ge1=count1%10;
bai2=count2/100;shi2=count2%100/10; ge2=count2%10;
if(count1>=909)
{
count1=0;
}
if(count2>=909)
{
count2=0;
}
display();
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -