在好例子网,分享、交流、成长!
您当前所在位置:首页C/C++ 开发实例嵌入式开发 → STC15开发手持点巡检考勤机

STC15开发手持点巡检考勤机

嵌入式开发

下载此实例
  • 开发语言:C/C++
  • 实例大小:0.07M
  • 下载次数:16
  • 浏览次数:131
  • 发布时间:2019-12-24
  • 实例类别:嵌入式开发
  • 发 布 人:gongzhu
  • 文件格式:.rar
  • 所需积分:5
 相关标签: stc 开发 考勤

实例介绍

【实例简介】4年前为某大公司开发的一款巡检考勤机:
为了考核工人有没有定时去相关设备巡检,在重要设备或设备房安装射频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;
    }
}

标签: stc 开发 考勤

实例下载地址

STC15开发手持点巡检考勤机

不能下载?内容有错? 点击这里报错 + 投诉 + 提问

好例子网口号:伸出你的我的手 — 分享

网友评论

发表评论

(您的评论需要经过审核才能显示)

查看所有0条评论>>

小贴士

感谢您为本站写下的评论,您的评论对其它用户来说具有重要的参考价值,所以请认真填写。

  • 类似“顶”、“沙发”之类没有营养的文字,对勤劳贡献的楼主来说是令人沮丧的反馈信息。
  • 相信您也不想看到一排文字/表情墙,所以请不要反馈意义不大的重复字符,也请尽量不要纯表情的回复。
  • 提问之前请再仔细看一遍楼主的说明,或许是您遗漏了。
  • 请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。

关于好例子网

本站旨在为广大IT学习爱好者提供一个非营利性互相学习交流分享平台。本站所有资源都可以被免费获取学习研究。本站资源来自网友分享,对搜索内容的合法性不具有预见性、识别性、控制性,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明

;
报警