历史上的今天
今天是:2024年12月18日(星期三)
2020年12月18日 | 单片机数字密码锁
2020-12-18 来源:51hei


程序源代码:
//************************************************************************************************************************************
//库调用.宏类型定义.位定义//
//************************************************************************************************************************************
#include #include #define uchar unsigned char #define uint unsigned int #define ushort unsigned short #define GPIO_KEY P1 //矩阵键盘烧扫描端口 sbit RS = P2^2; //液晶显示器控制端口 sbit RW = P2^3; sbit E = P3^7; sbit shuchu=P2^0; //继电器控制端口 sbit beep=P2^1; //报警器端口 sbit DoorBell=P3^6; //门铃端口 sbit SCL = P2^6; //AT24C04的时钟 sbit SDA = P2^7; //AT24C04的数据 uchar idata upxs[16]={"Password:"}; //上排存放数组 uchar idata dwxs[16]={""}; //下排存放数组 uint idata tempword[6]={0}; //临时密码数组 uint idata password[6]={1,1,1,1,1,1};//初始密码 uint idata now=0; //数组伪指针 uint idata key=0; //密钥 uint idata keyboard=0; //键盘锁定标志 uint idata key1=0; //用于密码修改 uint idata KeyValue=16; //用来存放读取到的键值 uint idata warn=0; //错误累计 uint idata time=0; //用于定时 uint idata time1=0; //用于定时 uint idata time2=0; //用于定时 uint idata moshi=0; //定时器内部模式 uchar idata BUF[8]; //掉电数据缓存区 uchar idata TESTDATA[8]={0}; //掉电新密码存储 uint idata menu=0; //menu用于密码修改 uint idata tempword1[8]={0}; //用于密码修改 //********************************************************************************************************************************* //函数声明// //********************************************************************************************************************************* void delete(void); //********************************************************************************************************************************* /*模块名称:液晶驱动显示模块*/ /*模块功能:驱动LCD1602的显示,并时时显示按键值*/ //********************************************************************************************************************************* void delay(uint dell)//毫秒延时// { uchar x; for(dell;dell>0;dell--) for(x=110;x>0;x--); } void wr_com(uchar temp)//写指令// { RS=0; RW=0; P0=temp; E=1; E=0; } void wr_data(uchar num)//写数据// { RS=1; RW=0; P0=num; E=1; E=0; } void disp_lcd(uchar addr,char *templ)//显示函数// { uchar i; wr_com(addr); delay(50); for(i=0;i<16;i++) { wr_data(templ[i]); delay(50); } } void lcd_init()//初始化液晶// { wr_com(0x30); delay(50); wr_com(0x38); delay(50); wr_com(0x01); delay(50); wr_com(0x06); delay(50); wr_com(0x0c); delay(50); } void lcdxianshi(void)//液晶总显示// { disp_lcd(0x80,upxs); disp_lcd(0xc0,dwxs); } //********************************************************************************************************************************* /*模块名称:矩阵键盘扫描模块*/ /*模块功能:时时扫描按键值*/ //********************************************************************************************************************************* void Delay10ms(void)//延时函数// { unsigned char a,b,c; for(c=1;c>0;c--) for(b=38;b>0;b--) for(a=130;a>0;a--); } void KeyDown(void)//键盘检测函数// { char a=0; GPIO_KEY=0x0f; if(GPIO_KEY!=0x0f) //读取按键是否按下 { Delay10ms(); //延时10ms进行消抖 if(GPIO_KEY!=0x0f) //再次检测键盘是否按下 { //扫描列 GPIO_KEY=0X0F; switch(GPIO_KEY) { case(0X07): KeyValue=0;break; case(0X0b): KeyValue=1;break; case(0X0d): KeyValue=2;break; case(0X0e): KeyValue=3;break; } //扫描行 GPIO_KEY=0XF0; switch(GPIO_KEY) { case(0X70): KeyValue=KeyValue;break; case(0Xb0): KeyValue=KeyValue+4;break; case(0Xd0): KeyValue=KeyValue+8;break; case(0Xe0): KeyValue=KeyValue+12;break; } while((a<10)&&(GPIO_KEY!=0xf0))//按键松手检测 { Delay10ms(); a++; } } } } //******************************************************************************************************************************* /*模块名称:数据处理模块*/ /*模块功能:(1)将按键值传递给各种缓存数祝(2)包含数据清除函数*/ //******************************************************************************************************************************* void keysend(void)//键值传递// { switch(KeyValue) { case 0:{dwxs[now]='0';tempword[now]=0;TESTDATA[now]=0;now++;break;} case 1:{dwxs[now]='1';tempword[now]=1;TESTDATA[now]=1;now++;break;}
上一篇:单片机数字电压表设计方案(二)
史海拾趣
|
WINCE4.2安装时出错,错误提示如下: Error 21337.Setup encountered problems installing some critical emulation components.You may continue the install,but the emulator may not work .Would you like to continue setup? 哪位高手知道是什 ...… 查看全部问答> |
|
Wince下CAN驱动开发,每次发送数据时,CAN设备总是接收到多个数据帧 我在WinCE下开发MCP2515的CAN驱动程序,硬件是TQ2440的开发板,CPU是S3C2440,现在的问题是,每次发通过MCP2515发送数据的时候,我总是可以接收到多个CAN数据帧,而且每次接收到的CAN数据帧的数量也不同,我也把MCP2515设置成了单次触 ...… 查看全部问答> |
|
如果不是宽字符可以用长度辨别 但是在宽字符下不管是中文还是英文都是 长度都是1 这个怎么辨别是中文呢? 还有 如果我要出字符串中搜索到是否含有某个汉字 这个是通过怎么搜呢? 我在 edit控件中输入 方 然后把这个方放入wchar_t *st ...… 查看全部问答> |
|
我现在一个问题就是做gis,能显示地图,导航什么的 我用的是xsbase270,处理器是intel pxa270。 evc 4.0。 开始的时候我想用esupmap5.0,但是esupmap5.0试用版的没有我硬件平台的函数库.也不支持vs2005 有pocketpc2003的函数库. 所以我现在的方 ...… 查看全部问答> |
|
如题,EPIAddressMapSetEPIConfigSDRAMSetEPIAddressMapSet这些函数的使用说明找不到啊。请有的兄弟给分享下。先谢过了。… 查看全部问答> |
|
小弟我虚心请教,跪求各位高手解答!在线等!!!!!!! 在线等!!!!!!! 小弟我虚心请教,跪求各位高手解答。我想用单片机实现电压的转换。大致要求如下: 输出端有2个:x和y. 输入端为p1到p9. p1,p2,p3为一组,p4,p5,p6为一组,p7,p8,p9为一组。p1端输入5v电压时,x端输出5v,y端输出0v;p3端输入5v时,x端输 ...… 查看全部问答> |
|
TI的集成PHY的M4,TM4C129可出来了在TI的网站上面 http://www.ti.com.cn/lsds/ti_zh/microcontroller/tiva_arm_cortex/c_series/tm4c129x_series/overview.page?paramCriteria=no TI的集成PHY的M4,TM4C129可出来了在TI的网站上面… 查看全部问答> |
|
本帖最后由 ddllxxrr 于 2015-3-31 10:12 编辑 好像有个网络小说叫《向左走,向右走》。说是男女主人公隔着一道墙,每天上班都看不到对方,后来好像还没看到就拉倒了。其实,这个东西是一种缘份,有的人有缘没有份,有的有份无缘。实现中,小说里 ...… 查看全部问答> |




