/****************temic*********t5557***********************************/ #include <at892051.h> #include <string.h> #include <intrins.h> #include <stdio.h> #define uchar unsigned char #define uint unsigned int #define ulong unsigned long //STC12C2051AD的SFR定义 sfr WDT_CONTR = 0xe1;//stc2051的看门狗?????? /**********全局常量************/ //写卡的命令 #define write_command0 0//写密码 #define write_command1 1//写配置字 #define write_command2 2//密码写数据 #define write_command3 3//唤醒 #define write_command4 4//停止命令 #define TRUE 1 #define FALSE 0 #define OK 0 #define ERROR 255 //读卡的时间参数us #define ts_min 250//270*11.0592/12=249//取近似的整数 #define ts_max 304//330*11.0592/12=304 #define t1_min 73//90*11.0592/12=83:-10调整 #define t1_max 156//180*11.0592/12=166 #define t2_min 184//210*11.0592/12=194 #define t2_max 267//300*11.0592/12=276 //***********不采用中断处理:采用查询的方法读卡时关所有中断****************/ sbit p_U2270B_Standby = P3^5;//p_U2270B_Standby PIN=13 sbit p_U2270B_CFE = P3^3;//p_U2270B_CFE PIN=6 sbit p_U2270B_OutPut = P3^7;//p_U2270B_OutPut PIN=2 sbit wtd_sck = P1^7;//SPI总线 sbit wtd_si = P1^3; sbit wtd_so = P1^2; sbit iic_data = P1^2;//lcd IIC sbit iic_clk = P1^7; sbit led_light = P1^6;//测试绿灯 sbit led_light1 = P1^5;//测试红灯 sbit led_light_ok = P1^1;//读卡成功标志 sbit fengmingqi = P1^5; /***********全局变量************************************/ uchar data Nkey_a[4] = {0xA0, 0xA1, 0xA2, 0xA3};//初始密码 //uchar idata card_snr[4]; //配置字 uchar data bankdata[28] = {1,2,3,4,5,6,7,1,2,3,4,5,6,7,1,2,3,4,5,6,7,1,2,3,4,5,6,7}; //存储卡上用户数据(1-7)7*4=28 uchar data cominceptbuff[6] = {1,2,3,4,5,6};//串口接收数组ram uchar command; //第一个命令 uchar command1;// //uint temp; uchar j,i; uchar myaddr = 8; //uchar ywqz_count,time_count; //ywqz jishu: uchar bdata DATA; sbit BIT0 = DATA^0; sbit BIT1 = DATA^1; sbit BIT2 = DATA^2; sbit BIT3 = DATA^3; sbit BIT4 = DATA^4; sbit BIT5 = DATA^5; sbit BIT6 = DATA^6; sbit BIT7 = DATA^7; uchar bdata DATA1; sbit BIT10 = DATA1^0; sbit BIT11 = DATA1^1; sbit BIT12 = DATA1^2; sbit BIT13 = DATA1^3; sbit BIT14 = DATA1^4; sbit BIT15 = DATA1^5; sbit BIT16 = DATA1^6; sbit BIT17 = DATA1^7; bit i_CurrentLevel;//i_CurrentLevel BIT 00H(Saves current level of OutPut pin of U2270B) bit timer1_end; bit read_ok = 0; //缓存定时值,因用同一个定时器 union HLint { uint W; struct { uchar H;uchar L; } B; };//union HLint idata a union HLint data a; //缓存定时值,因用同一个定时器 union HLint0 { uint W; struct { uchar H; uchar L; } B; };//union HLint idata a union HLint0 data b; /**********************函数原型*****************/ //读写操作 void f_readcard(void);//全部读出1~7 AOR唤醒 void f_writecard(uchar x);//根据命令写不同的内容和操作 void f_clearpassword(void);//清除密码 void f_changepassword(void);//修改密码 //功能子函数 void write_password(uchar data *data p);//写初始密码或数据 void write_block(uchar x,uchar data *data p);//不能用通用指针 void write_bit(bit x);//写位 /*子函数区*****************************************************/ void delay_2(uint x) //延时,时间x*10us@12mhz,最小20us@12mhz { x--; x--; while(x) { _nop_(); _nop_(); x--; } _nop_();//WDT_CONTR=0X3C;不能频繁的复位 _nop_(); } ///////////////////////////////////////////////////////////////////// void initial(void) { SCON = 0x50; //串口方式1,允许接收 //SCON =0x50; //01010000B:10位异步收发,波特率可变,SM2=0不用接收到有效停止位才RI=1, //REN=1允许接收 TMOD = 0x21; //定时器1 定时方式2(8位),定时器0 定时方式1(16位) TCON = 0x40; //设定时器1 允许开始计时(IT1=1) TH1 = 0xfD; //FB 18.432MHz 9600 波特率 TL1 = 0xfD; //fd 11.0592 9600 IE = 0X90; //EA=ES=1 TR1 = 1; //启动定时器 WDT_CONTR = 0x3c;//使能看门狗 p_U2270B_Standby = 0;//单电源 PCON = 0x00; IP = 0x10;//uart you xian XXXPS PT1 PX1 PT0 PX0 led_light1 = 1; led_light = 0; p_U2270B_OutPut = 1; } /************************************************/ void f_readcard()//读卡 { EA = 0;//全关,防止影响跳变的定时器计时 WDT_CONTR = 0X3C;//喂狗 p_U2270B_CFE = 1;// delay_2(232); //>2.5ms /* // aor 用唤醒功能来防碰撞 p_U2270B_CFE = 0; delay_2(18);//start gap>150us write_bit(1);//10=操作码读0页 write_bit(0); write_password(&bankdata[24]);//密码block7 p_U2270B_CFE =1 ;// delay_2(516);//编程及确认时间5.6ms */ WDT_CONTR = 0X3C;//喂狗 led_light = 0; b.W = 0; while(!(read_ok == 1)) { //while(p_U2270B_OutPut);//等一个稳定的低电平?超时判断? while(!p_U2270B_OutPut);//等待上升沿的到来同步信号检测1 TR0 = 1; //deng xia jiang while(p_U2270B_OutPut);//等待下降沿 TR0 = 0; a.B.H = TH0; a.B.L = TL0; TH0 = TL0 = 0; TR0 = 1;//定时器晚启动10个周期 //同步头 if((324 < a.W) && (a.W < 353)) ;//检测同步信号1 else { TR0 = 0; TH0 = TL0 = 0; goto read_error; } //等待上升沿 while(!p_U2270B_OutPut); TR0 = 0; a.B.H = TH0; a.B.L = TL0; TH0 = TL0 = 0; TR0 = 1;//b.N1<<=8; if(a.B.L < 195);//0.5p else { TR0 = 0; TH0 = TL0 = 0; goto read_error; } //读0~7块的数据 for(j = 0;j < 28;j++) { //uchar i; for(i = 0;i < 16;i++)//8个位 { //等待下降沿的到来 while(p_U2270B_OutPut); TR0 = 0; a.B.H = TH0; a.B.L = TL0; TH0 = TL0 = 0; TR0 = 1; if(t2_max < a.W/*)&&(a.W < t2_max)*/)//1P { b.W >>= 2;//先左移再赋值 b.B.L += 0xc0; i++; } else if(t1_min < a.B.L/*)&&(a.B.L < t1_max)*/)//0.5p { b.W >>= 1; b.B.L += 0x80; } else { TR0 = 0; TH0 = TL0 = 0; goto read_error; } i++; while(!p_U2270B_OutPut);//上升 TR0 = 0; a.B.H = TH0; a.B.L = TL0; TH0 = TL0 = 0; TR0 = 1; if(t2_min < a.W/*)&&(a.W < t2_max)*/)//1P { b.W >>= 2; i++; } else if(t1_min < a.B.L/*a.W)&&(a.B.L < t1_max)*/)//0.5P //else if(!(a.W==0)) { b.W >>= 1; //temp+=0x00; //led_light1=0;led_light=1;delay_2(40000); } else { TR0 = 0; TH0 = TL0 = 0; goto read_error; } i++; } //取出奇位 DATA = b.B.L; BIT13 = BIT7; BIT12 = BIT5; BIT11 = BIT3; BIT10 = BIT1; DATA = b.B.H; BIT17 = BIT7; BIT16 = BIT5; BIT15 = BIT3; BIT14 = BIT1; bankdata[j] = DATA1; } read_ok = 1;//读卡完成了 read_error: _nop_(); } } /***************************************************/ void f_writecard(uchar x)//写卡 { p_U2270B_CFE = 1; delay_2(232); //>2.5ms //psw=0 standard write if (x == write_command0)//写密码:初始化密码 { uchar i; uchar data *data p; p = cominceptbuff; p_U2270B_CFE = 0; delay_2(31);//start gap>330us write_bit(1);//写操作码1:10 write_bit(0);//写操作码0 write_bit(0);//写锁定位0 for(i = 0;i < 35;i++) { write_bit(1);//写数据位1 } p_U2270B_CFE = 1; led_light1 = 0; led_light = 1; delay_2(40000);//测试使用 //write_block(cominceptbuff[4],p); p_U2270B_CFE = 1; bankdata[20] = cominceptbuff[0];//密码存入 bankdata[21] = cominceptbuff[1]; bankdata[22] = cominceptbuff[2]; bankdata[23] = cominceptbuff[3]; } else if (x == write_command1)//配置卡参数:初始化 { uchar data *data p; p = cominceptbuff; write_bit(1);//写操作码1:10 write_bit(0);//写操作码0 write_bit(0);//写锁定位0 write_block(cominceptbuff[4],p); p_U2270B_CFE= 1; } //psw=1 pssword mode else if(x == write_command2) //密码写数据 { uchar data*data p; p = &bankdata[24]; write_bit(1);//写操作码1:10 write_bit(0);//写操作码0 write_password(p);//发口令 write_bit(0);//写锁定位0 p = cominceptbuff; write_block(cominceptbuff[4],p);//写数据 } else if(x == write_command3)//aor //唤醒 { //cominceptbuff[1]操作码10 X xxxxxB uchar data *data p; p = cominceptbuff; write_bit(1);//10 write_bit(0); write_password(p);//密码 p_U2270B_CFE = 1;//此时数据不停的循环传出 } else //停止操作码 { write_bit(1);//11 write_bit(1); p_U2270B_CFE = 1; } p_U2270B_CFE = 1; delay_2(560);//5.6ms } /************************************/ void f_clearpassword()//清除密码 { uchar data *data p; uchar i,x; p = &bankdata[24];//原密码 p_U2270B_CFE = 0; delay_2(18);//start gap>150us //操作码10:10xxxxxxB write_bit(1); write_bit(0); for(x = 0;x < 4;x++)//发原密码 { DATA = *(p++); for(i = 0;i < 8;i++) { write_bit(BIT0); DATA >>= 1; } } write_bit(0);//锁定位0:0 p = &cominceptbuff[0]; write_block(0x00,p);//写新配置参数:pwd=0 //密码无效:即清除密码 DATA = 0x00;//停止操作码00000000B for(i = 0;i < 2;i++) { write_bit(BIT7); DATA <<= 1; } p_U2270B_CFE = 1; delay_2(560);//5.6ms } /*********************************/ void f_changepassword()//修改密码 { uchar data *data p; uchar i,x,addr; addr = 0x07;//block7 p = &Nkey_a[0];//原密码 DATA = 0x80;//操作码10:10xxxxxxB for(i = 0;i < 2;i++) { write_bit(BIT7); DATA <<= 1; } for(x = 0;x < 4;x++)//发原密码 { DATA = *(p++); for(i = 0;i < 8;i++) { write_bit(BIT7); DATA >>= 1; } } write_bit(0);//锁定位0:0 p = &cominceptbuff[0]; write_block(0x07,p);//写新密码 p_U2270B_CFE = 1; bankdata[24] = cominceptbuff[0];//密码存入 bankdata[25] = cominceptbuff[1]; bankdata[26] = cominceptbuff[2]; bankdata[27] = cominceptbuff[3]; DATA = 0x00;//停止操作码00000000B for(i = 0;i < 2;i++) { write_bit(BIT7); DATA <<= 1; } p_U2270B_CFE = 1; delay_2(560);//5.6ms } /***************************子函数***********************************/ void write_bit(bit x)//写一位 { if(x) { p_U2270B_CFE = 1; delay_2(32);//448*11.0592/120=42延时448us p_U2270B_CFE = 0; delay_2(28);//280*11.0592/120=26写1 } else { p_U2270B_CFE = 1; delay_2(92);//192*11.0592/120=18 p_U2270B_CFE = 0; delay_2(28);//280*11.0592/120=26写0 } } /*******************写一个block*******************/ void write_block(uchar addr,uchar data *data p) { uchar i,j; for(i = 0;i < 4;i++)//block0数据 { DATA = *(p++); for(j = 0;j < 8;j++) { write_bit(BIT0); DATA >>= 1; } } DATA = addr <<= 5;//0地址 for(i = 0;i < 3;i++) { write_bit(BIT7); DATA <<= 1; } } /*************************************************/ void write_password(uchar data *data p) { uchar i,j; for(i = 0;i < 4;i++)// { DATA = *(p++); for(j = 0;j < 8;j++) { write_bit(BIT0); DATA >>= 1; } } } /*************************************************/ void main() { initial(); TI = RI = 0; ES = 1; EA = 1; delay_2(28); //f_readcard(); while(1) { f_readcard(); //读卡 f_writecard(command1); //写卡 f_clearpassword(); //清除密码 f_changepassword(); //修改密码 } }
标签: 12345
上传时间: 2017-10-20
上传用户:my_lcs
提供win7 32位系统 ccs3.3下 510仿真器的驱动文件,有别于XP下的驱动。有助于用WIN7 32位的用户使用。现在越来越多的使用者PC系统都在WIN7 32位了。
上传时间: 2018-03-20
上传用户:fj56500
1.3寸OLED模块的6PIN SPI显示屏电路原理图
标签: OLED 6PIN 1.3 SPI 模块 显示屏 电路原理图1.3寸OLED模块的6PIN SPI显示屏电路原理图
上传时间: 2020-05-05
上传用户:aleeba8
本次提供下载的 Altium Designer 22.5.1 - Build 42 仅用于学习使用。 Altium Designer 22.5.1 - Build 42 文件较大,所以存放在百度网盘中,本下载提供了 Altium Designer 22.5.1 - Build 42 的下载链接及提取密码,长期有效。 - 下载的 Altium Designer 22.5.1 - Build 42 经安装测试稳定可用 。 - 个人觉得每一个大版本中的最后一次更新,才是最完美的版本,此次更新的 Altium Designer 22.5.1 - Build 42 在2022年06月13日之前为AD22系列的最新版,并不是AD22 系列中的最后一个版本,所以现在要尝新的朋友们赶快来下载学习研究吧!~~ -Altium Designer软件功能 1、强劲的设计规则驱动 通过设计规则,您可以定义设计要求,这些设计要求共同涵盖设计的各个方面。 2、智能元器件摆放 使用Altium Designer中的直观对齐系统可快速将对象捕捉到与附近对象的边界或焊盘相对齐的位置。 在遵守您的设计规则的同时,将元件推入狭窄的空间。 3、交互式布线 使用Altium Designer的高级布线引擎,在很短的时间内设计出最高质量的PCB布局布线,包括几个强大的布线选项,如环绕,推挤,环抱并推挤,忽略障碍,以及差分对布线。 4、原生3D PCB设计 使用Altium Designer中的高级3D引擎,以原生3D实现清晰可视化并与您的设计进行实时交互。 5、高速设计 利用您首选的存储器拓扑结构,为特定应用快速创建和设计复杂的高速信号类,并轻松优化您的关键信号。Altium Designer软件特色 1、焊盘/通过热连接——即时更改焊盘和过孔的热连接样式。 2、Draftsman——Draftsman的改进功能使您可以更轻松地创建PCB制造和装配图纸。 3、无限的机械层——没有图层限制,完全按照您的要求组织您的设计。 4、Stackup Materials Library——探索Altium Designer如何轻松定义图层堆栈中的材质。 5、路由跟随模式——了解如何通过遵循电路板的轮廓轻松布置刚性和柔性设计。 6、组件回收——移动板上的组件而不必重新路由它们。 7、高级层堆栈管理器——图层堆栈管理器已经完全更新和重新设计,包括阻抗计算,材料库等。 8、Stackup Impedance Profiles Manager——管理带状线,微带线,单个或差分对的多个阻抗曲线。 9、实时跟踪更正——Altium Designer路由引擎在路由时主动停止锐角的创建,以及不必要的循环。 10、差分对光泽——无论您是进入还是离开打击垫,或只是在电路板上的障碍物周围导航,Altium Designer都可确保将差分对耦合在一起。
标签: Altium Designer
上传时间: 2022-06-20
上传用户:canderile
VIP专区-嵌入式/单片机编程源码精选合集系列(42)资源包含以下内容:1. msp430MODEM数据传输的通信系统.2. 凌阳单片机的数码管显示程序.3. 在fpga上关于nios开发版的测试文件.4. 关于fpga的nios开发版的led的硬件测试.5. 嵌入式开发板451的butlod.6. Your-MTD 供大家参考使用.7. 详细说明了datesheet的使用.8. 令AVR ATMEGA16进入睡眠状态及唤醒的例程(转贴).9. 51单片机很精彩的实例.10. 设计出优秀fpga程序的十条戒律.11. c和c++嵌入式编程入门的一本好书,值得一看.12. ST7920液晶显示控制器的驱动编程.13. 很全的文件系统,完整支持FAT12,FAT 16,FAt32,s市面还有书籍支持.14. 完整的飞LPC213X的modem源码,支持UCOS系统很好的参考代码.15. ZNE-100T增强型嵌入式以太网转串口模块,LPC213XDEMO板源码.16. RC5000读卡芯片和LPC213X的源码参考程序 内含详细说明.17. CF卡开发详细资料.18. 别人的开发自己的plc.19. 遥控程序,51单片机的汇编语言控制程序,实现远距离控制.20. 用51单片机实现LED的显示,由于此程序经常甬道,具有一定的 参考价值.21. 电机PWM控制,用单片机实现对电机的控制,由于用PWM很省电,故建议采用此法.22. < 嵌入式系统编程>>源代码解析光盘,包括这本书各章节的示例代码(无密码).23. 用DSP实现最小二乘法。可对测量得到的数据进行处理.24. MAXII-PCI接口CORE,MAXII-PCI接口CORE[分享].25. TLV2544-2548多通道12位串行A-D转换器的原理与应用.26. arm9的说明书 强烈推荐 好不好看过才知道.27. 用2051加热敏电阻做的温度计!有很多不足的地方!请大家修改!.28. flash烧写程序.29. 44b0平台.30. 中文字库液晶演示程序 谁需要拿去.31. zigbee协议.32. zigbee协议栈的源代码.33. 字体缩放显示.34. 手机模拟器.35. 这是用C写的读取温度传感器DS18B20.36. 嵌入式minigui开发是一个关于listview的实现可用于图形界面中。.37. ce下的客户端程序 可以传送文件的.38. u盘读写模块.C51单片机与USB接口芯片对U盘进行文件读写,支持FAT8,FAT16和FAT32磁盘格式..39. uC_OSII移植源码lumit_Ucosii_110.src.40. sygnal 08051f020 液晶显示的c语言程序.
上传时间: 2013-07-22
上传用户:eeworm
数学建模与数学实验(第3版)课件+matlab
上传时间: 2013-05-15
上传用户:eeworm
软件工程3(视频)
上传时间: 2013-04-15
上传用户:eeworm
HDMI1.3规范
上传时间: 2013-04-15
上传用户:eeworm
激光手册 第3分册 激光技术
上传时间: 2013-04-15
上传用户:eeworm
光电检测原理及应用 3册
上传时间: 2013-05-23
上传用户:eeworm