找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3365|回复: 6
收起左侧

单片机控制门禁程序,求大神讨论

  [复制链接]
ID:50660 发表于 2013-6-1 11:42 | 显示全部楼层 |阅读模式
本人对WG26为刷卡器传递数据,写了程序但是就是数据传递不上来 求大神看看,不胜感激程序如下:
  #include"LCD.H"//用LCD来显示我的卡号
#include<string.h>
#include<intrins.h>

uchar temp;         //标志位
uchar buf[27];         //韦根26数据存储位
uchar table[]={0,0,0};         //卡号存储数组
uchar ICNo[]={1,1,1,1,1,0x3};
void exter_init(void );
void transform(void);
void data_check();
void main(void)
{
        exter_init();
        while(1)
        {
        data_check();
        transform();
        string_dat(0xc0,ICNo);
        }
                  
}
void data_check(void)//数据验证
{
        uchar i,j,even=0,odd=1;                                                                 
          temp=0; //初始化标志位
    while(temp==26); //等待读取完26位                               
    even=0;                                        //判断奇偶校验是否正确
    for(j=1;j<13;j++)
     {
                 if(buf[j]==1)       
                  even=(~even)&0x01;
     }
     if(even!=buf[0])
      {
              temp=0;         //清除标志         
              goto end;
      }         
    odd=1;
    for(i=13;i<25;i++)
     {
            if(buf[i]==1)                         
                odd=(~odd)&0x01;             
     }
     if(odd!=buf[25])
      {
                 temp=0;        //清除标志
               goto end;
      }       
    temp=0;//清除标志  
        for(i=0;i<3;i++)
        {
                for(j=(i*8);j<i*8+8;j++)
                {

                        table[i]=table[i]<<1|buf[j+1];
                }
        }      
        end:
       temp=0;       
}
void transform(void)//用转换为字符
{
           //直接转换
        ICNo[0]=((table[0]&0xF0)<<4)+'0';     //取wiegand[0]的高4位
        ICNo[1]=(table[0]&0x0F)+'0';          //取wiegand[0]的低4位
        ICNo[2]=((table[1]&0xF0)<<4)+'0';
        ICNo[3]=(table[1]&0x0F)+'0';//
        ICNo[4]=((table[2]&0xF0)<<4)+'0';
        ICNo[5]=(table[2]&0x0F)+'0';//
}
void exter_init(void )
{
        init_1602();
        string_dat(0x80,word1);
        EX0=1;EX1=1;
        IT0=1;IT1=1;
        EA=1;
}
void wigenISR0 (void) interrupt 0   
{   
          EX0=0;
           buf[temp++]=0; //DATA0=0;
        EX0=1;
}
void wigenISR1 (void ) interrupt 1
{
        EX1=0;
        buf[temp++]=1;//data1=1;
        EX1=1;
}
回复

使用道具 举报

ID:50574 发表于 2013-6-1 17:42 | 显示全部楼层
lcd 的显示正常吗?
回复

使用道具 举报

ID:50660 发表于 2013-6-9 16:23 | 显示全部楼层
h333 发表于 2013-6-1 17:42
lcd 的显示正常吗?

LCD的显示是正常的  现在就是数据可以上传了 但是卡号不对。而且WG26读出来的数据比我预想的多了?求大神指点奥
回复

使用道具 举报

ID:76287 发表于 2015-4-7 19:05 | 显示全部楼层
不懂,但是还是要顶,安抚楼主受伤心灵,每一个新手都是痛苦的开始,快乐的结局
回复

使用道具 举报

ID:103447 发表于 2016-1-16 13:26 | 显示全部楼层
读字节操作函数
回复

使用道具 举报

ID:97249 发表于 2016-1-20 12:21 | 显示全部楼层
本帖最后由 红尘有你 于 2016-1-20 12:22 编辑

ICNo[0]=((table[0]&0xF0)<<4)+'0';这后面加'0'什么意思,((table[0]&0xF0)<<4)是一个字节+'0'一个字节,那么 ICNo[0]是uchar型一个字节=两个字节??是不是有问题呢??知道说的对不
回复

使用道具 举报

ID:485724 发表于 2019-3-16 08:59 | 显示全部楼层
livingliving 发表于 2015-4-7 19:05
不懂,但是还是要顶,安抚楼主受伤心灵,每一个新手都是痛苦的开始,快乐的结局

看到这样的帖真是过瘾!为什么当初他们就没有那么多说教那么多求拜!个个那么幽默诙谐!建议版主开一个段子奖,大家相互互动学习,人气会立马上来!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表