门禁程序的文件通常包括硬件和软件部分。以下是一个简单的门禁程序文件示例,使用C语言编写,假设使用1602液晶显示屏和28175I2C接口。
```c
include include define uchar unsigned char define uint unsigned int define DATA P0 // 1602驱动端口 define RS P2^0 define RW P2^1 define E P2^2 define KA P2^7 int Pre_KeyNo = 16, KeyNo = 16; uchar key_buf; uchar display_buf; void delayMs(uint x) { while (x--); } void Keys_Scan() { // 扫描按键并存储按键值到key_buf } void Busy() { DATA = 0xff; RS = 0; RW = 1; while (DATA & 0x80); E = 0; E = 1; } void WriteData(uchar btData) { Busy(); RS = 1; RW = 0; E = 1; DATA = btData; E = 0; } void Clear() { Busy(); RS = 0; RW = 0; E = 1; DATA = 0x0c; delayMs(100); DATA = 0x06; delayMs(100); DATA = 0x38; } void Init() { Clear(); WriteData(0x0c); // 开显示,无光标显示 WriteData(0x06); // 文字不动,光标自动右移 WriteData(0x38); // 设置显示模式 } void Display(uchar *buf) { int i; for (i = 0; i < 16; i++) { if (buf[i] == 0) { WriteData(0x00); } else { WriteData(0x7f); } } } void AddStudent(uchar *name, uchar *profession) { // 添加学生账号 } void DeleteStudent(uchar *name) { // 删除学生账号 } void AdministratorLogin() { // 管理员登录 } void AdministratorManagement() { // 管理员操作界面 } void main() { uchar key; uchar i; uchar flag = 0; Init(); while (1) { Keys_Scan(); if (key == 0xFF) { continue; } if (key == 0x01) { // 进入 flag = 1; Display("欢迎进入公司"); } else if (key == 0x02) { // 离开 flag = 0; Display("离开公司"); } else if (flag == 1) { if (key >= '0' && key <= '9') { key_buf[Pre_KeyNo] = key; Pre_KeyNo++; if (Pre_KeyNo == 16) { Pre_KeyNo = 0; KeyNo++; } Display(key_buf); } } else { Clear(); Display("无效按键"); } } } ``` 说明: `include `define DATA P0`:定义1602驱动端口。 `define RS P2^0`、`define RW P2^1`、`define E P2^2`、`define KA P2^7`:定义1602液晶显示屏的控制线。 `delayMs(uint x)`:延时函数,用于延时一段时间。 `Keys_Scan()`:扫描按键并存储按键值到`key_buf`。 `Busy()`:忙等待函数,用于等待液晶显示屏的硬件部分
软件部分