51单片机用到strcmp比较字符串问题及解决

目前用单片机来比较两个字符串数组是否一样

 这样定义的字符串数组

 uchar rec_name[9]={0}; //串口接收到的密码数据 
uchar code Passnum[9]={'1','7','0','5','1','9','0','0','1'}; // 设备自身固定密码

if(strcmp((char*)rec_name,(char*)Passnum)==0)
{
SendString("connect ok\r\n");
Pass_flag=0;
}

运行结果,向单片机串口发送170519001 字符串,这个比较函数愣是进不去,后来查找资料发现,定义字符串数组的最后一位必须要加上结束符'\0’,而以“170519001”这种形式存在的字符串自身编译器已经在末尾加上结束符‘\0’;所以立即修改定义的字符串数组后,终于可以正确运行了;

uchar rec_name[10]={0};
uchar code Passnum[10]={'1','7','0','5','1','9','0','0','1','\0'};

编写51单片机的密码锁程序代码通常涉及到按键输入、密码验证和控制电路等功能。由于这是一个相对复杂的问题,且需要具体的硬件连接和库文件支持,以下是一个简化版的伪代码示例,使用C语言编写: ```c #include "8051.h" // 假设是51单片机的头文件 #define PASSWORD_LEN 4 // 密码长度为4位 // 假设按键映射到0-9的数组 char keypad[10] = {P1, P2, P3, P4, P5, P6, P7, P8, P9}; // 用户输入的密码数组 char user_password[PASSWORD_LEN]; // 预设的正确密码 char correct_password[] = {'1', '2', '3', '4'}; // 这里只是一个例子 void main(void) { initialize_GPIO(); // 初始化输入输出口 while(1) { for(int i = 0; i < PASSWORD_LEN; i++) { if(read_keypad(keypad[i])) { // 读取按键输入 user_password[i] = keypad[i]; } else { // 如果超时或错误按键,清零密码 user_password[i] = '\0'; break; } } // 验证密码 if(strcmp(user_password, correct_password) == 0) { unlock(); // 如果密码正确,解锁操作 } else { lock(); // 密码错误,上锁 } delay_ms(100); // 稍作延时等待下一次输入 } } // 假设的函数,用于读取按键并返回字符 char read_keypad(char pin) { // ... (这里省略了具体读取按键的代码) } // 假设的函数,用于解锁和上锁 void unlock() {} void lock() {} // 相关问题-- 1. 如何在实际项目中实现按键映射和读取? 2. 对于密码验证,如何处理用户输入的错误处理? 3. 如何确保51单片机的程序与硬件接口兼容? ``` 请注意,这只是一个基础的框架,实际项目中你需要根据具体的硬件设计(如按键矩阵、单片机型号、以及串口通信等)来完善代码。在开发过程中,可能会用到定时器、中断处理等技术来优化用户体验。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

>行者<

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值