完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
|
|
相关推荐
1个回答
|
|
/基于15单片机的程序//author:CJ===//date:2020/10/25 ===/#include "stc15.h" #include "iic.h" #define u8 unsigned char#define u16 unsigned int #define set(x) P4=(x>>3|x>>4);P3=x //定义矩阵按键#define get() ((P4&0x10)<<3)|((P4&0x04)<<4)|(P3&0x3f)u8 Trg,Cont,dat,key_flag=0;u8 code tab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xbf,0xff,0X8C,0X86,0XC8,0xc6};u8 dis[8]={11,11,11,11,11,11,11,11},com=0;u8 pwd[6]={8,8,8,8,8,8}; //密码888 888u8 mima[6]; // 数码管对应void Timer0Init(void);u16 right,error; u16 xiu_f, right_n,error_n; //标志位u8 num,f;u8 input,eliminate,modify=0; void in_put();void modify_x();void delayms(int xms) //延时函数{ int i,j; for(i=xms;i>0;i--) for(j=845;j>0;j--);}void KBD() //独立按键 --基于三行代码{ set(0xf0); dat=get(); set(0x0f); dat=(dat|get())^0xFF; Trg=dat&(dat^Cont); Cont=dat;}void main(){ /========初始化========/ P2=0XA0;P0=0X00;P2=0;P2=0X80;P0=0XFF;P2=0; P2=0XE0;P0=0XFF;P2=0;P2=0XC0;P0=0XFF;P2=0; Timer0Init(); while(1) { in_put(); modify_x(); /======================================按键处理====================================/ if(key_flag) { key_flag=0; KBD(); switch(Trg ^ 0xFF) { case 0x7e:num=0;f=1;break; case 0x7d:num=4;f=1;break; case 0x7b:num=8;f=1;break; case 0xbe:num=1;f=1;break; case 0xbd:num=5;f=1;break; case 0xbb:num=9;f=1;break; case 0xb7: eliminate=1; if(modify) { eliminate=0; dis[0]=15;dis[1]=11; dis[2]=11;dis[3]=11; dis[4]=11;dis[5]=11; dis[6]=11;dis[7]=11; } break; case 0xde:num=2;f=1;break; case 0xdd:num=6;f=1;break; case 0xd7: if(xiu_f==1) { if(!modify) //修改密码 { modify=1; right=0;right_n=0; P2=0X80;P0=0x7f;P2=0; P2=0XA0;P0=0X00;P2=0; dis[0]=15;dis[1]=11;dis[2]=11;dis[3]=11;dis[4]=11;dis[5]=11;dis[6]=11;dis[7]=11; } if((dis[2]!=11)&&(modify==1)) //修改输入密码状态 { modify=0; right=1;right_n=0; xiu_f=0; write_2402(0x10,pwd[0]);delayms(10); write_2402(0x20,pwd[1]);delayms(10); write_2402(0x30,pwd[2]);delayms(10); write_2402(0x40,pwd[3]);delayms(10); write_2402(0x50,pwd[4]);delayms(10); write_2402(0x60,pwd[5]);delayms(10); dis[0]=10;dis[1]=11; dis[2]=11;dis[3]=11; dis[4]=0;dis[5]=12; dis[6]=13;dis[7]=14; P2=0XA0;P0=0X10;P2=0; } } break; case 0xee:num=3;f=1;break; case 0xed:num=7;f=1;break; case 0xe7: input=1;f=0; dis[0]=10;dis[1]=11; dis[2]=11;dis[3]=11; dis[4]=11;dis[5]=11; dis[6]=11;dis[7]=11; break; } } }}/======================================输入密码====================================/void in_put() { if(input==1) { if((dis[7] == 11)&&(f==1)) { f=0; dis[7]=num; mima[0]=dis[7]; } else if((dis[6] == 11)&&(f==1)) { f=0; dis[7]=num; dis[6]=mima[0]; mima[1]=dis[7]; } else if((dis[5] == 11)&&(f==1)) { f=0; dis[7]=num; dis[6]=mima[1]; dis[5]=mima[0]; mima[2]=dis[7]; } else if((dis[4] == 11)&&(f==1)) { f=0; dis[7]=num; dis[6]=mima[2]; dis[5]=mima[1]; dis[4]=mima[0]; mima[3]=dis[7]; } else if((dis[3] == 11)&&(f==1)) { f=0; dis[7]=num; dis[6]=mima[3]; dis[5]=mima[2]; dis[4]=mima[1]; dis[3]=mima[0]; mima[4]=dis[7]; } else if((dis[2] == 11)&&(f==1)) { f=0; dis[7]=num; dis[6]=mima[4]; dis[5]=mima[3]; dis[4]=mima[2]; dis[3]=mima[1]; dis[2]=mima[0]; mima[5]=dis[7]; } else if((dis[2] == 11)&&(f==1)) { f=0; dis[7]=num; dis[6]=mima[4]; dis[5]=mima[3]; dis[4]=mima[2]; dis[3]=mima[1]; dis[2]=mima[0]; mima[5]=dis[7]; } } if(eliminate==1) { eliminate=0; dis[0]=10;dis[1]=11; dis[2]=11;dis[3]=11; dis[4]=11;dis[5]=11; dis[6]=11;dis[7]=11; }//输入按键下可清除 if(dis[2]!=11) //判断密码输满 为六位 { input=0;right_n=0; if((pwd[0]==mima[0])&&(pwd[1]==mima[1])&&(pwd[2]==mima[2])&&(pwd[3]==mima[3])&&(pwd[4]==mima[4])&&(pwd[5]==mima[5])) //密码正确open { P2=0X80;P0=0XFF;P2=0; P2=0XA0;P0=0X10;P2=0; xiu_f=1; //输入成功后,才可以按下修改按键,跳转至修改密码界面 dis[0]=0;dis[1]=11; dis[2]=11;dis[3]=11; dis[4]=0;dis[5]=12; dis[6]=13;dis[7]=14; right=1; //5s后关闭 } else if(!modify) //密码error ,不为modify时 L1熄灭 { P2=0X80;P0=0XFE;P2=0; error=1; } }}/======================================修改密码====================================//======================================定时器处理====================================/u8 key_cnt, seg_cnt;void timer0() interrupt 1{ if(++key_cnt==10) { key_cnt=0; key_flag=1; } if(++seg_cnt==3) { seg_cnt=0; P2=0XE0;P0=0XFF;P2&=0; P2=0XC0;P0=0X01< |
|
|
|
只有小组成员才能发言,加入小组>>
3314 浏览 9 评论
2995 浏览 16 评论
3494 浏览 1 评论
9059 浏览 16 评论
4088 浏览 18 评论
1180浏览 3评论
605浏览 2评论
const uint16_t Tab[10]={0}; const uint16_t *p; p = Tab;//报错是怎么回事?
599浏览 2评论
用NUC131单片机UART3作为打印口,但printf没有输出东西是什么原因?
2335浏览 2评论
NUC980DK61YC启动随机性出现Err-DDR是为什么?
1896浏览 2评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-23 18:46 , Processed in 1.186239 second(s), Total 80, Slave 61 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号