1.硬件
1.1 硬件组成
1. 正点原子STM32F407探索者开发板
2. RC522模块
3. 3.5寸电阻触摸屏
4. 继电器+5V小灯
1.2 硬件连接
1,DS0(LED0)(连接在PF9),DS1(LED1)(连接在PF10)
2,蜂鸣器(连接在PF8)
3,按键KEY1(PE3)开锁/KEY2(PE2)关锁
4.继电器(连接在PE1)
5.RC522连线说明
*1--SDA <----->PF0
*2--SCK <----->PF1
*3--MOSI <----->PF2
*4--MISO <----->PF3
*5--悬空
*6--GND <----->GND
*7--RST <----->PF4
*8--VCC <----->VCC 3.3V
2.功能实现
2.1LCD主界面显示(时间显示+欢迎光临+虚拟按键)
2.2DS0(LED0)指示灯(红色)闪烁表示门禁系统正常运行,DS1(LED1)指示灯(绿色)门禁开启时点亮
2.3门铃功能(按下门铃,响铃1S)
2.4继电器吸合模拟门禁开启,KEY_1按键按下模拟门禁关闭,KEY_2按键按下模拟门禁开启
2.5刷卡和密码输入两种方式开启门禁
2.6卡片管理(录入卡号保存在SPIFLASH中),密码管理(密码修改保存在EEPROM)
3.软件实现步骤
3.1LCD汉字显示采用取模方式实现,采用PCtoLCD2002取模工具
工具设置的字宽和字高要同每行显示的数据保持一致,设置2424和3232还有4848的字体***
代码实现:
uint8_t tfont24[][24] = {{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x02,0x00,0x20,0x04,0x10,0x20,0x04,0x10,0x20,0x08,0x10,0x20,0x10,0x10,0x20,0x20},
{0x10,0x20,0xC0,0x10,0x23,0x80,0x10,0x3E,0x00,0x1F,0xF0,0x00,0x10,0x30,0x00,0x10,0x2C,0x00,0x10,0x23,0x00,0x10,0x20,0xC0},
{0x10,0x20,0x60,0x10,0x20,0x30,0x30,0x20,0x18,0x10,0x60,0x0C,0x00,0x60,0x0E,0x00,0x20,0x04,0x00,0x00,0x00,0x00,0x00,0x00},/*"天",0*/
{0x00,0x00,0x00,0x00,0x00,0x08,0x00,0x00,0x08,0x00,0x00,0x08,0x00,0x00,0x08,0x00,0x00,0x08,0x00,0x00,0x08,0x00,0x00,0x08},
{0x00,0x00,0x08,0x00,0x00,0x08,0x3F,0xFF,0xF8,0x1F,0xFF,0xF8,0x00,0x40,0x08,0x00,0x40,0x08,0x00,0x40,0x08,0x00,0x40,0x08},
{0x00,0x40,0x08,0x00,0x40,0x08,0x00,0xC0,0x08,0x00,0x40,0x08,0x00,0x00,0x18,0x00,0x00,0x08,0x00,0x00,0x00,0x00,0x00,0x00},/*"上",0*/
};
uint8_t tfont48[][48] = {
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x01,0x00,0x08,0x00,0x00,0x00,0x01,0x00,0x10,0x00,0x00,0x00,0x09,0x00,0x10,0x00,0x00,0x00,0x31,0x00,0x20,0x00,0x00},
{0x00,0xE1,0x00,0x60,0x00,0x00,0x07,0xC1,0x00,0xC0,0x00,0x00,0x7F,0x01,0x01,0xC0,0x00,0x00,0x3D,0x01,0x03,0x80,0x00,0x00,0x31,0x01,0x07,0x00,0x00,0x00,0x01,0x01,0x1E,0x7F,0xFF,0xFC,0x01,0x01,0xFC,0x3F,0xFF,0xF8,0x01,0xFF,0xF0,0x1F,0xFF,0xF8},
{0x01,0xFF,0xE0,0x10,0x20,0x20,0x01,0xF1,0x20,0x10,0x20,0x20,0x01,0x01,0x30,0x10,0x20,0x20,0x01,0x01,0x18,0x10,0x20,0x20,0x01,0x01,0x1C,0x10,0x20,0x20,0x03,0x01,0x0E,0x10,0x20,0x20,0x07,0x03,0x0F,0x10,0x20,0x20,0x03,0x07,0x07,0x90,0x20,0x20},
{0x01,0x07,0x07,0xD0,0x20,0x20,0x00,0x03,0x00,0x10,0x20,0x20,0x00,0x01,0x00,0x10,0x20,0x20,0x00,0x00,0x00,0x10,0x20,0x20,0x07,0xFF,0xFF,0x90,0x20,0x20,0x03,0xFF,0xFF,0x10,0x20,0x20,0x01,0xFF,0xFF,0x10,0x20,0x20,0x01,0x00,0x08,0x10,0x20,0x20},
{0x01,0x00,0x08,0x10,0x20,0x20,0x01,0x00,0x08,0x10,0x20,0x20,0x01,0x00,0x08,0x1F,0xFF,0xFC,0x01,0x00,0x08,0x3F,0xFF,0xF8,0x01,0x00,0x08,0x3F,0xFF,0xF8,0x01,0x00,0x08,0x10,0x00,0x00,0x01,0x00,0x08,0x00,0x00,0x00,0x01,0x00,0x08,0x00,0x00,0x00},
{0x03,0xFF,0xFF,0x00,0x00,0x00,0x03,0xFF,0xFE,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"智",0*/
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x00,0x00,0x07,0x80,0x00,0x00,0x00,0x00,0x0F,0x1F,0xFF,0xFF,0xFC,0x00,0x1B,0x1F,0xFF,0xFF,0xF8},
{0x00,0x33,0x0F,0xFF,0xFF,0xF8,0x00,0xE2,0x08,0x20,0x80,0x00,0x01,0xC2,0x08,0x20,0x80,0x00,0x03,0x86,0x08,0x20,0x80,0x00,0x0F,0x06,0x08,0x20,0x80,0x00,0x3E,0x06,0x08,0x20,0x80,0x40,0x1C,0x06,0x08,0x20,0x80,0x20,0x08,0x06,0x08,0x20,0x80,0x20},
{0x00,0x06,0x08,0x20,0x80,0x30,0x00,0x04,0x08,0x20,0x80,0x38,0x00,0x84,0x08,0x20,0x80,0x7C,0x00,0x64,0x1F,0xFF,0xFF,0xF8,0x00,0x74,0x3F,0xFF,0xFF,0xF0,0x00,0x3C,0x1C,0x00,0x00,0x00,0x00,0x1F,0x88,0x00,0x00,0x00,0x00,0x0F,0x80,0x00,0x00,0x00},
{0x00,0x06,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7F,0xFF,0xE0,0x0F,0xFF,0xF8,0x7F,0xFF,0xF0,0x0F,0xFF,0xFC,0x3F,0xFF,0xF8,0x0C,0x04,0x1C,0x20,0x60,0x38,0x00,0x04,0x0C,0x00,0x40,0x18},
{0x00,0x08,0x0C,0x00,0xC0,0x18,0x00,0x18,0x0C,0x00,0x80,0x18,0x00,0x10,0x0C,0x01,0x80,0x18,0x00,0x30,0x0C,0x03,0x00,0x18,0x00,0x70,0x0C,0x07,0x00,0x18,0x00,0xE0,0x0C,0x0E,0x00,0x18,0x01,0xE0,0x0C,0x1E,0x00,0x18,0x01,0xC0,0x0C,0x3C,0x00,0x18},
{0x00,0xC0,0x0C,0x18,0x00,0x18,0x00,0x40,0x7C,0x08,0x00,0x38,0x00,0x03,0xFC,0x00,0x1F,0xF8,0x00,0x00,0x18,0x00,0x00,0xF0,0x00,0x00,0x10,0x00,0x00,0x30,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"能",0*/
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3F,0xFF,0xFF,0xFF,0xF8},
{0x00,0x3F,0xFF,0xFF,0xFF,0xF8,0x00,0x1F,0xFF,0xFF,0xFF,0xF0,0x00,0x18,0x00,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x00,0x00,0x1C,0x00,0x00,0x00,0x00,0x00,0x0F,0x00,0x00,0x00,0x00,0x00,0x0F,0xE0,0x00,0x00,0x00,0x00},
{0x07,0xE0,0x00,0x00,0x00,0x00,0x03,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x01,0x80,0x00,0x00,0x00,0x00},
{0x01,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x80},
{0x01,0x00,0x00,0x00,0x00,0x80,0x01,0x00,0x00,0x00,0x00,0x80,0x01,0x00,0x00,0x00,0x00,0xC0,0x01,0x00,0x00,0x00,0x00,0xE0,0x01,0x00,0x00,0x00,0x00,0xF8,0x01,0x00,0x00,0x00,0x00,0xF8,0x03,0xFF,0xFF,0xFF,0xFF,0xF0,0x07,0xFF,0xFF,0xFF,0xFF,0xE0},
{0x03,0xFF,0xFF,0xFF,0xFF,0xC0,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"门",0*/
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x00,0x02,0x03,0x00,0x00,0x00,0x40,0x04,0x02,0x00,0x00,0x00,0x40,0x0C,0x02,0x00,0x10,0x00,0x40,0x18,0x02,0x00,0x20,0x00,0x40,0x70,0x02,0x00,0x60},
{0x00,0x40,0xE0,0x02,0x00,0xC0,0x00,0x43,0xC0,0x02,0x01,0x80,0x00,0x47,0x80,0x42,0x03,0x80,0x00,0x5E,0x00,0x42,0x07,0x00,0x00,0x7C,0x00,0x42,0x0E,0x00,0x3F,0xFF,0xFE,0x42,0x1E,0x00,0x1F,0xFF,0xFE,0x42,0x3C,0x00,0x1F,0xFF,0xFE,0x42,0x78,0x00},
{0x10,0x48,0x00,0x42,0x70,0x40,0x00,0x44,0x00,0x42,0x30,0x40,0x00,0x47,0x00,0x42,0x00,0x60,0x00,0xC7,0x80,0x42,0x00,0x20,0x01,0xC3,0xE0,0x42,0x00,0x30,0x00,0xC1,0xC0,0x42,0x00,0x3C,0x00,0x40,0x04,0x42,0x00,0x3C,0x00,0x00,0x0C,0x43,0xFF,0xF8},
{0x00,0x00,0x18,0x43,0xFF,0xF0,0x00,0x40,0x30,0x43,0xFF,0xE0,0x00,0x40,0x60,0x42,0x00,0x00,0x00,0x41,0xC0,0x42,0x00,0x00,0x00,0x43,0x80,0x42,0x00,0x00,0x00,0x4F,0x00,0x42,0x00,0x00,0x00,0x7E,0x00,0x42,0x40,0x00,0x00,0x78,0x00,0x42,0x20,0x00},
{0x3F,0xFF,0xFE,0x42,0x30,0x00,0x1F,0xFF,0xFC,0x42,0x18,0x00,0x10,0x70,0x00,0xC2,0x1C,0x00,0x00,0x4C,0x01,0xC2,0x0E,0x00,0x00,0x47,0x01,0xC2,0x0F,0x00,0x00,0x43,0x80,0xC2,0x07,0x80,0x00,0x41,0xC0,0x42,0x03,0xC0,0x00,0x40,0xE0,0x02,0x01,0xF0},
{0x00,0xC0,0x70,0x06,0x00,0xE0,0x01,0xC0,0x78,0x0E,0x00,0x00,0x01,0xC0,0x3C,0x1E,0x00,0x00,0x00,0xC0,0x30,0x0E,0x00,0x00,0x00,0x40,0x10,0x06,0x00,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"禁",0*/
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x60,0x00,0x00,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x00,0x00,0xC0},
{0x01,0x00,0x00,0x00,0x01,0x80,0x01,0x00,0x00,0x30,0x01,0x00,0x01,0x00,0x00,0x3C,0x03,0x00,0x01,0x00,0xE0,0x3C,0x06,0x00,0x01,0x00,0xF0,0x78,0x0E,0x00,0x01,0x00,0xF0,0x78,0x1C,0x00,0x01,0x01,0xE0,0xD8,0x38,0x00,0x03,0x03,0x60,0xF8,0x70,0x00},
{0x03,0x03,0x60,0xB1,0xF0,0x00,0x03,0x06,0x61,0xB1,0xE0,0x80,0x02,0x0C,0x41,0x30,0xE0,0x80,0x02,0x1C,0x43,0x30,0x40,0xC0,0x02,0x38,0x46,0x30,0x00,0xC0,0x02,0x70,0xC6,0x30,0x00,0xE0,0x02,0xE0,0xCC,0x30,0x00,0x70,0x07,0xE0,0xCC,0x30,0x00,0x78},
{0x07,0xC0,0xD8,0x3F,0xFF,0xF0,0x06,0xC0,0xD8,0x3F,0xFF,0xF0,0x06,0x80,0xB0,0x3F,0xFF,0xC0,0x06,0x00,0xE0,0x20,0x00,0x00,0x04,0x00,0xE0,0x20,0x00,0x00,0x0C,0x00,0xC0,0x20,0x00,0x00,0x0C,0x01,0xC0,0x20,0x80,0x00,0x0C,0x01,0x80,0x20,0x80,0x00},
{0x0C,0x03,0x84,0x20,0x40,0x00,0x1C,0x07,0x06,0x20,0x60,0x00,0x1C,0x0F,0x02,0x20,0x70,0x00,0x1C,0x0E,0x03,0x40,0x30,0x00,0x1C,0x06,0x03,0xC0,0x38,0x00,0x3C,0x00,0x01,0xE0,0x1C,0x00,0x18,0x00,0x01,0xF0,0x1E,0x00,0x08,0x00,0x00,0xF8,0x0F,0x00},
{0x04,0x00,0x00,0x7C,0x0F,0xC0,0x00,0x00,0x00,0x3C,0x07,0xE0,0x00,0x00,0x00,0x00,0x03,0xE0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"系",0*/
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x00,0x02,0x00,0x00,0x00,0xF0,0x08,0x03,0x80,0x00,0x01,0xF0,0x1E,0x07,0xC0,0x00,0x03,0xF0,0x3F,0x07,0x80,0x00,0x07,0x60,0x7E,0x07,0x00},
{0x00,0x1C,0x60,0xEE,0x07,0x00,0x00,0x78,0x61,0xCC,0x06,0x00,0x01,0xE0,0x43,0x8C,0x0E,0x00,0x07,0xC0,0x47,0x08,0x0C,0x00,0x3F,0x00,0x5C,0x18,0x0C,0x00,0x1E,0x00,0x78,0x18,0x08,0x00,0x1C,0x00,0xF0,0x18,0x18,0x04,0x08,0x01,0xE0,0x10,0x18,0x04},
{0x00,0x07,0xC0,0x10,0x10,0x08,0x00,0x1F,0x80,0x10,0x10,0x08,0x00,0x0F,0x00,0x10,0x30,0x18,0x00,0x06,0x00,0x00,0x20,0x10,0x00,0x20,0x02,0x00,0x00,0x30,0x00,0x20,0x03,0x80,0x00,0x60,0x00,0x20,0x07,0xC0,0x00,0xE0,0x00,0x20,0x0F,0x80,0x01,0xC0},
{0x00,0x20,0x1B,0x80,0x07,0x80,0x00,0x20,0x33,0x00,0x3F,0x00,0x00,0x20,0xE3,0xFF,0xFE,0x00,0x00,0x21,0xC3,0xFF,0xF0,0x00,0x30,0x27,0x03,0xFF,0x00,0x00,0x18,0x3E,0x03,0x00,0x00,0x00,0x1F,0x3E,0x03,0x00,0x00,0x00,0x0F,0xEC,0x03,0x00,0x00,0x00},
{0x07,0xA0,0x02,0x00,0x00,0x00,0x00,0x20,0x02,0x00,0x00,0x00,0x00,0x20,0x83,0xFF,0xFF,0xF0,0x00,0x20,0x43,0xFF,0xFF,0xF8,0x00,0x20,0x62,0x00,0x00,0x38,0x00,0x20,0x32,0x00,0x00,0x18,0x00,0x20,0x3A,0x00,0x00,0x18,0x00,0x20,0x1E,0x00,0x00,0x18},
{0x00,0x60,0x1F,0x00,0x00,0x18,0x00,0xE0,0x0F,0x80,0x00,0x18,0x00,0xE0,0x07,0xC0,0x00,0xF8,0x00,0x60,0x00,0x00,0x0F,0xF8,0x00,0x20,0x00,0x00,0x00,0x30,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"统",0*/
};
//在指定位置 显示1个24*24的汉字
//(x,y):汉字显示的位置
//index:tfont数组里面的第几个汉字
//color:这个汉字的颜色
void Test_Show_CH_Font24(uint16_t x,uint16_t y,uint8_t index,uint16_t color)
{
uint8_t temp,t,t1;
uint16_t y0=y;
for(t=0;t<72;t++)//每个24*24的汉字点阵 有72个字节
{
if(t<24)temp=tfont24[index*3][t]; //前24个字节
else if(t<48)temp=tfont24[index*3+1][t-24]; //中24个字节
else temp=tfont24[index*3+2][t-48]; //后24个字节
for(t1=0;t1<8;t1++)
{
if(temp&0x80)lcd_draw_point(x,y,color);//画实心点
else lcd_draw_point(x,y,BLUE); //画空白点(使用背景色)
temp<<=1;
y++;
if((y-y0)==24)
{
y=y0;
x++;
break;
}
}
}
}
//在指定位置 显示1个48*48的汉字
//(x,y):汉字显示的位置
//index:tfont数组里面的第几个汉字
//color:这个汉字的颜色
void Test_Show_CH_Font48(uint16_t x,uint16_t y,uint8_t index,uint16_t color)
{
uint16_t temp,t,t1;
uint16_t y0=y;
for(t=0;t<288;t++)//每个24*24的汉字点阵 有72个字节
{
if(t<48)temp=tfont48[index*6][t]; //前48个字节 1
else if(t<96)temp=tfont48[index*6+1][t-48]; //48~96个字节 2
else if(t<144)temp=tfont48[index*6+2][t-96]; //96~144个字节 3
else if(t<192)temp=tfont48[index*6+3][t-144]; //4
else if(t<240)temp=tfont48[index*6+4][t-192]; //5
else temp=tfont48[index*6+5][t-240]; //6
for(t1=0;t1<8;t1++)
{
if(temp&0x80)lcd_draw_point(x,y,color);//画实心点
else lcd_draw_point(x,y,BLUE); //画空白点(使用背景色)
temp<<=1;
y++;
if((y-y0)==48)
{
y=y0;
x++;
break;
}
}
}
}
主界面显示