排队叫号系统源程序
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
#include "config.h"
#include "include.h"
int main (void)
{
V AR_Init(); //变量初始化
IO_Init(); //引脚初始化
TI_CC_SPISetup(); //SPI初始化
TI_CC_PowerupResetCCxxxx(); // Reset CCxxxx
writeRFSettings(); // 写入无线模块配置寄存器
TI_CC_SPIWriteBurstReg(TI_CCxxx0_PA TABLE, paTable, paTableLen);//写入能量控制寄存器
UART0_Init(UART_BPS, set); // 串口初始化
TC0_Init(); // 定时器0初始化
VIC_Init(); // 中断初始化
TI_CC_SPIStrobe(TI_CCxxx0_SFSTXON); //开启和校准频率合成器
TI_CC_SPIStrobe(TI_CCxxx0_SRX); // 初始化模块为接收模式.
// 数据包接收结束后,GDO0下降沿触发中断#ifdef WATCHDOG
W ATCHDOG_Init(); //看门狗初始化
#endif
UART0_SendBufEx("-begin-",7);
while (1)
{
#ifdef WIRLTEST
if(TimerSend_ID==1)
{
TimerSend_ID=0;
/* IO1CLR=IO1CLR|LED1;
DelayNS(20);
IO1SET=IO1SET|LED1;
DelayNS(20);
IO1CLR=IO1CLR|LED1;
DelayNS(20);
IO1SET=IO1SET|LED1;
RcvBuf[0]=0x05; */ //从机地址
RcvBuf[0]=0x05;
for(i=1;i<16;i++)
{
RFSendPacket((char*)RcvBuf,17);
if(DeskDriver[i].allow10s==1)
{
DeskDriver[i].allow10s=0; //开始限定时间,在限定时间内不接受按键
DeskDriver[i].keyScaned=1; //接受按键,并置按下标志
DeskDriver[i].timeCnt=0; //计数归零
DeskDriver[i].enable=1; //开启允许无线发送
DeskDriver[i].sendCount=0; //初始值0表示发送次数为0,发送一次加1
DeskDriver[i].sendOK=0; //初始值0表示没发送成功
}
}
}
#endif //task1 接收完成,发送数据
if(RCVCOMP_ID==1)
{
IO1CLR=IO1CLR|LED1;
DelayNS(20);
IO1SET=IO1SET|LED1;
DelayNS(20);
IO1CLR=IO1CLR|LED1;
DelayNS(20);
IO1SET=IO1SET|LED1;
RCVCOMP_ID=0;
UART0_SendBuf();
UART0_SendBufEx(RcvBuf,RCV_LEN1+2);
RcvBuf[0]=0x05; //从机地址
RFSendPacket((char*)RcvBuf,17);
}
//task2 按键扫描if(SCAN_ID==1)
{
SCAN_ID=0;
KeyScan();
}
//task3 发送柜台号
if(SendDesk_ID==1)
{
SendDesk_Pro();
SendDesk_ID=0;
}
#ifdef WATCHDOG //看门狗喂狗
IRQDisable(); //关中断
WDFEED = 0xAA; //第一次喂狗启动WDT
WDFEED = 0x55; //喂狗序列
IRQEnable(); //开中断
#endif
}
return 0;
}
void DelayNS (uint32 dly)
{
uint32 i;
for ( ; dly>0; dly--)
for (i=0; i<50000; i++);
}
//短延时子程序
void delay(uint8 t)
{ uint8 i,j;
for(i=0;i for(j=0;j<10;j++); } void VAR_Init(void) { uint8 i; set.datab = 8; //串口数据位 set.stopb = 1; //串口停止位 set.parity = 0; //串口校验位 rcv_new = 0; //串口接收完数据标志 RSMCHR=0; //接收数据暂存变量 RSMCHR=0; //判断接收数据用标志 RSSMS_ID=0; //直接接收数据标志 RCVCOMP_ID=0; //接收完成标志 SCAN_ID=1; //按键扫描定时标志 INPUT1=0; //按键扫描去抖动计数 INPUT1_ID=1; //按键按下放开标志 Desk_NUM=0x50; //柜台号,初始值为无效柜台号 SendDesk_ID=0; //发送柜台号标志 timerCount=0; //定时器计数变量 for(i=0;i { DeskDriver[i].allow10s=1; //初始值1为10秒已经过去,可以接受按键柜台号 DeskDriver[i].keyScaned=0; //初始值0表示还没有按键柜台号被接受 DeskDriver[i].sendCount=0; //初始值0表示发送次数为0,发送一次加1 DeskDriver[i].sendOK=0; //初始值0表示没发送成功 DeskDriver[i].timeCnt=0; //初始值0,定时计数为0,每秒加1 DeskDriver[i].enable=1; //初始值1表示允许发送 } } void IO_Init(void) { PINSEL0 = 0x00000005; //设置I/O连接到UART0 PINSEL0 =PINSEL0 |0x00050000 ; //配置UART1引脚功能 PINSEL0 =PINSEL0 |0x00005500 ; //配置SPI总线引脚0.4sck 0.5miso 0.6mosi0.7SSEL