实例介绍
【实例简介】4年前为某大公司开发的一款巡检考勤机:
为了考核工人有没有定时去相关设备巡检,在重要设备或设备房安装射频ID卡,工人携手持刷卡机刷卡,卡号和时间数据存储于刷卡机内。
每天下班前到值班室一键式无线上传数据。
18650电池供电,刷卡时按开机键,刷完卡自动关机。10s内无刷卡动作自动关机。
刷卡后读取到ID卡号,与内置DS321时钟实时数据存储于EEPROM。
刷到上传卡号(0000)后,打开使用无线串口与服务器进行交互式上传。
现因改造成微信小程序点巡检,本项目已作废,所以放出源代码。
为了考核工人有没有定时去相关设备巡检,在重要设备或设备房安装射频ID卡,工人携手持刷卡机刷卡,卡号和时间数据存储于刷卡机内。
每天下班前到值班室一键式无线上传数据。
18650电池供电,刷卡时按开机键,刷完卡自动关机。10s内无刷卡动作自动关机。
刷卡后读取到ID卡号,与内置DS321时钟实时数据存储于EEPROM。
刷到上传卡号(0000)后,打开使用无线串口与服务器进行交互式上传。
现因改造成微信小程序点巡检,本项目已作废,所以放出源代码。
【实例截图】
【核心代码】
void Main(void)
{
uchar i = 0, num_loop = 0, nc_rs = 0; //temp,
uchar nn_rec;
uchar time_pre = 0;
// unsigned long card_all;
uint16 card_h;
uint16 card_pre = 0, card_now = 0;
Initialization();
LED2 = 1;
LED1 = 1;
LED4 = 1;
LED3 = 0;
time_beep = 150;
time_off = 0;
time_L1 = 0;
time_L2 = 0;
n_beep = 0;
//////////////////以下为主程序循环/////////////////////////////
while(1)
{
if(Mode_Card) //刷卡模式
{
if( time_pre > 21)
time_pre = 21;
if(FLAG_RECEIVE2)
{
FLAG_RECEIVE2 = 0;
time_off = 0;
card_pre = card_now;
card_h = (data_receive2[1] << 8) data_receive2[2];
card_now = ((data_receive2[3]) << 8) data_receive2[4];
xor_temp = 0;
xor_temp ^= 0x0a;
xor_temp ^= 0x02;
for(i = 0; i < 5; i )
xor_temp ^= data_receive2[i];
if((card_now < 9999) && (xor_temp == data_receive2[5]) && (card_h == 0))
{
time_beep = 150;
time_L1 = 2; //闪烁一次
if(card_now != 0)
{
if((time_pre > 20) || (card_now != card_pre))
{
save_card(card_now);
}
}
else //收到0000卡数据
{
P_SLE = 0;
syscount = 0;
F_GET_RI = 0;
while(syscount < 400) //1s
clrwdt;
if(F_GET_RI) //1s内收到串口数据
{
LED2 = 0;
for(i = 0; i < 3; i )
{
time_beep = 150;
syscount = 0;
while(syscount < 300) //1s
clrwdt;
}
P_OFF = 0; ////END//// 有其他分机在传输数据
}
else
{
Mode_Card = 0; //进入传输模式
S1_REQ = 1;
FLAG_RECEIVE1 = 0;
}
}
time_pre = 0;
}
else //接收到非法数据
{
time_L1 = 6;
n_beep = 6;
for(i = 0; i < 4; i )
data_tran1[i] = data_receive2[i 1];
n_send1 = 4;
SBUF = 0x02;
F_TXOVER1 = 1;
}
}
if( time_off > 20) //10S没收到数据,自动关机 ////END////
{
time_off = 20;
P_OFF = 0;
}
}
else /////传输模式/////
{
P_SLE = 0; //唤醒无线模块
if(FLAG_RECEIVE1) //收到电脑数据
{
FLAG_RECEIVE1 = 0;
nn_rec = no_receive1;
xor_temp = 0;
for(i = 0; i < nn_rec - 1; i )
xor_temp ^= data_receive1[i];
xor_temp |= 0x80;
if(xor_temp == data_receive1[nn_rec - 1])
{
if((data_receive1[0] == 0x51) && S2_WAIT)
rec_num();
else
if((data_receive1[0] == 0x55) && S2_WAIT)
rec_time();
else
if((data_receive1[0] == 0x57) && S4_TRAN_WAIT)
rec_confirm();
}
}
if(S1_REQ) //分机发送请求//
{
S1_REQ = 0;
S2_WAIT = 1;
data_tran1[0] = 0x54;
data_tran1[1] = (n_mach / 100) | 0x80;
data_tran1[2] = (n_mach % 100) | 0x80;
xor_temp = 0;
for(i = 0; i < 3; i )
xor_temp ^= data_tran1[i];
xor_temp |= 0x80;
data_tran1[3] = xor_temp;
n_send1 = 4;
SBUF = 0x02;
F_TXOVER1 = 1;
num_resend = 0;
time_L2 = 2; //闪烁一次
}
if(S3_TRAN_D)
{
S3_TRAN_D = 0;
S4_TRAN_WAIT = 1;
if(list_sta != list_end) //有数据要传输
{
data_tran1[0] = 0x56;
data_tran1[1] = (n_mach / 100) | 0x80;
data_tran1[2] = (n_mach % 100) | 0x80;
card_now = Read_One_Data(list_sta * 8 20);
clrwdt;
card_now = (card_now << 8) Read_One_Data(list_sta * 8 21);
data_tran1[3] = ((card_now / 100) % 100) | 0x80;
data_tran1[4] = (card_now % 100) | 0x80;
data_tran1[5] = Read_One_Data(list_sta * 8 22) | 0x80;
data_tran1[6] = Read_One_Data(list_sta * 8 23) | 0x80;
data_tran1[7] = Read_One_Data(list_sta * 8 24) | 0x80;
data_tran1[8] = Read_One_Data(list_sta * 8 25) | 0x80;
data_tran1[9] = Read_One_Data(list_sta * 8 26) | 0x80;
data_tran1[10] = Read_One_Data(list_sta * 8 27) | 0x80;
xor_temp = 0;
for(i = 0; i < 11; i )
xor_temp ^= data_tran1[i];
xor_temp |= 0x80;
data_tran1[11] = xor_temp;
n_send1 = 12;
SBUF = 0x02;
F_TXOVER1 = 1;
num_resend = 0;
}
else
{
S4_TRAN_WAIT = 0;
Mode_Card = 1;
data_tran1[0] = 0x58;
data_tran1[1] = (n_mach / 100) | 0x80;
data_tran1[2] = (n_mach % 100) | 0x80;
xor_temp = 0;
for(i = 0; i < 3; i )
xor_temp ^= data_tran1[i];
xor_temp |= 0x80;
data_tran1[3] = xor_temp;
n_send1 = 4;
SBUF = 0x02;
F_TXOVER1 = 1;
num_resend = 0;
LED2 = 0;
time_beep = 150;
syscount = 0;
while(syscount < 400) //1s
clrwdt;
LED2 = 1;
P_OFF = 0; ////END//// 传输完毕
}
}
if( nc_rs > 4)
{
nc_rs = 0;
if( num_resend < 10)
{
SBUF = 0x02;
F_TXOVER1 = 1;
}
else
{
for(i = 0; i < 6; i )
{
if(i % 2)
LED2 = 1;
else
LED2 = 0;
syscount = 0;
while(syscount < 200) //500ms
clrwdt;
}
P_OFF = 0; ////END//// 重发3次关机
}
}
}
if(time_L1 > 0)
{
--time_L1;
if(time_L1 % 2)
{
LED1 = 0;
LED4 = 0;//LED4同LED1
}
else
{
LED1 = 1;
LED4 = 1;
}
if(time_L1 == 0)
time_off = 20;
}
if(time_L2 > 0)
{
--time_L2;
if(time_L2 % 2)
LED2 = 0;
else
LED2 = 1;
}
if(n_beep > 0)
{
--n_beep;
if(n_beep % 2)
time_beep = 150;
}
while(syscount < 200) //500ms
{
clrwdt;
}
syscount = 0;
//clrwdt;
}
}
好例子网口号:伸出你的我的手 — 分享!
小贴士
感谢您为本站写下的评论,您的评论对其它用户来说具有重要的参考价值,所以请认真填写。
- 类似“顶”、“沙发”之类没有营养的文字,对勤劳贡献的楼主来说是令人沮丧的反馈信息。
- 相信您也不想看到一排文字/表情墙,所以请不要反馈意义不大的重复字符,也请尽量不要纯表情的回复。
- 提问之前请再仔细看一遍楼主的说明,或许是您遗漏了。
- 请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。
关于好例子网
本站旨在为广大IT学习爱好者提供一个非营利性互相学习交流分享平台。本站所有资源都可以被免费获取学习研究。本站资源来自网友分享,对搜索内容的合法性不具有预见性、识别性、控制性,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明


网友评论
我要评论