图4:实物验证结果
实物验证可以实现IC卡的读写,由于每个开发板不同,相比仿真程序,对实物验证程序进行了略微的修改,最小系统的LCD1602口不能使用使用外接杜邦线,为了稳定最终选择重新字节焊接板子,最终能达到要求。
方案二:实验步骤: 1.电路图如图5所示:
图5:方案一电路图 2.刷卡前后显示以及操作,如下图6:
图6:方案一实现图
3.根据电路图编写C语言部分主要代码: 代码如下:
#include \#include \#include \#include \#include \#include \#include \#include \#include \#include \void init_all(void) {EA = 0; PT1 = 1;
init_timer(); Serial_init() ; init_rc522(); lcd_init();
EEPROM_READ(0,Card_SN_BUF,4); EEPROM_READ(1,Card_SN_BUF1,4); EEPROM_READ(2,Card_SN_BUF2,4); EEPROM_READ(3,Card_SN_BUF3,4); EEPROM_READ(4,Card_SN_BUF4,4); EEPROM_READ(5,Card_SN_BUF5,4); EEPROM_READ(6,Card_NUM_BUF,1); EEPROM_READ(7,KEY_BUF,8); EA = 1; }
void main(void) {INT8U key;
relay_OFF(); Delay_ms(500); init_all(); LED_BLINK_1(); display(0,0,7); display(1,0,8); display(2,0,9); display(3,0,10); Delay_ms(500); Delay_ms(500); Delay_ms(500); Delay_ms(500); Delay_ms(500);
display_clear_line(0); display_clear_line(1); display_clear_line(2); display_clear_line(3); display(0,0,0); while(1)
{ key=key_scan();
if(key==12) if(states>0) states--; else states=0;
if(key==13) if(++states>3) states=3; ctrl_process(); }} #include
#define uchar unsigned char #define uint unsigned int
#define LCD_data P0 //数据口
sbit LCD_RS = P2^2; //寄存器选择输入 sbit LCD_RW = P2^1; //液晶读/写控制 sbit LCD_EN = P2^0; //液晶使能控
uchar code dis0[]=\卡读写系统 %uchar code dis1[]=\卡输入 %uchar code dis2[]=\密码输入:8位 %uchar code dis3[]=\卡登记 %uchar code dis4[]=\密码设置:8位 %uchar code dis5[]=\成功 %uchar code dis6[]=\失败 %uchar code dis7[]=\桂林电子科技大学%uchar code dis8[]=\控制工程 \
uchar code dis9[]=\接口实验 \ uchar code dis10[]=\司亚 \void delay(int ms) //延时xms {while(ms--) { uchar i;
for(i=0;i<250;i++)
{_nop_();_nop_();_nop_();_nop_();}}} void delayNOP() //延时4us
{ _nop_(); _nop_(); _nop_(); _nop_();} bit lcd_busy()
{ bit result; LCD_RS = 0; LCD_RW = 1; LCD_EN = 1; delayNOP();
result = (bit)(LCD_data&0x80); LCD_EN = 0;
return(result); }
void write_cmd(uchar cmd) { unsigned int K=20000;
while(lcd_busy() && K--); //预防没插LCD时候停在这 LCD_RS = 0; LCD_RW = 0; LCD_EN = 0; _nop_(); _nop_();
LCD_data = cmd; delayNOP(); LCD_EN = 1; delayNOP(); LCD_EN = 0; }
void lcd_wdat(uchar dat) { unsigned int K=20000;