- 打卡等级:偶尔看看III
- 打卡总天数:55
- 最近打卡:2026-03-03 08:35:54
已绑定手机
金牌会员
- 积分
- 1374
|
发表于 2026-1-21 15:29:02
|
显示全部楼层
密码锁就复杂很多
首先确定数码管扫描显示时间是1ms
static TASK_COMPONENTS Task_Comps[]=
{
//状态 计数 周期 函数
// {0, 300, 300, LED0_Blink}, /* task 1 Period: 300ms */
// {0, 600, 600, LED1_Blink}, /* task 1 Period: 600ms */
// {0, 900, 900, LED2_Blink}, /* task 1 Period: 600ms */
// {0, 10, 10, KEY_Task}, /* task 1 Period: 600ms */
{0, 10, 10, Task_1}, /* task 1 Period: 300ms */
{0, 1, 1, SEG_Task}, /* task 1 Period: 300ms */
{0, 10, 10, PW_write_Task},
};
SEG_Task()的执行间隔不能超过20ms,否则会闪烁的厉害
先建立密码数组:
u8 passward[8] = { 16,16,16,16,16,16,16,16 };
初始值是8个 “ - ”
上电初始显示8个横杠
u8 passward[8] = { 16,16,16,16,16,16,16,16 };
u8 Seg_no = 0;
void SEG_Task(void)
{
u8 num = 0;
if( Seg_no ==0 ) //小时十位
{
Display_Seg( SEG_NUM[passward[0]] , ~T_NUM[0]); //数码管刷段码和位码
}
else if( Seg_no ==1 ) //小时的个位
{
Display_Seg( SEG_NUM[passward[1]] , ~T_NUM[1]); //数码管刷段码和位码
}
else if( Seg_no ==2 ) //第一个横杠
{
Display_Seg( SEG_NUM[passward[2]] , ~T_NUM[2]); //数码管刷段码和位码
}
else if( Seg_no ==3 ) //分钟的十位
{
Display_Seg( SEG_NUM[passward[3]] , ~T_NUM[3]); //数码管刷段码和位码
}
else if( Seg_no ==4 )
{
Display_Seg( SEG_NUM[passward[4]] , ~T_NUM[4]); //数码管刷段码和位码
}
else if( Seg_no ==5 )
{
Display_Seg( SEG_NUM[passward[5]] , ~T_NUM[5]); //数码管刷段码和位码
}
else if( Seg_no ==6 )
{
Display_Seg( SEG_NUM[passward[6]] , ~T_NUM[6]); //数码管刷段码和位码
}
else if( Seg_no ==7 )
{
Display_Seg( SEG_NUM[passward[7]] , ~T_NUM[7]); //数码管刷段码和位码
}
else
{
}
Seg_no ++;
if( Seg_no>7 )
Seg_no=0;
}
|
|