ImageVerifierCode 换一换
你正在下载:

程序.docx

[预览]
格式:DOCX , 页数:18 ,大小:19.43KB ,
资源ID:2396848      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/2396848.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(程序.docx)为本站会员(b****1)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

程序.docx

1、程序/*标题:密码锁*日期:2011-12-24*作者: 郑海平占用单片机口线状态:占用了P0口和P30,P31,P35.*密码锁:实现密码的修改,密码的存储,掉电后密码不丢失,使用的24c02模块,根据液晶的提示便可进行操作,其中E键为确认键,输入密码后都要按确认键才能确认,其中密码的长度为八位,初始密码为 88888888超级密码为 12345678修改密码要输入初始密码或超级密码才能修改密码占用口线为P33,P34.其中P33接SCL,P34接SDA.*/#include#include#define uchar unsigned char#define uint unsigned in

2、t#define Ta 500/unsigned int#define OP_READ 0xa1 / 器件地址以及读取操作#define OP_WRITE 0xa0 / 器件地址以及写入操作#define MAX_ADDR 0x7f / AT24C02最大地址sbit SDA = P34; /24C02引脚的控制sbit SCL = P33;sbit LE=P36;sbit rs = P30; /LCD引脚的控制sbit rw = P31;sbit en = P35;uchar command0,data0,count=0;uchar v=0;bit f0=0; /f0,f1退出标志位参数bi

3、t f1=0;bit yy=0; /f0,f1退出标志位参数uchar savein=0;void write(uchar command0); uchar keyscan(void); uchar click_0=0; /定时器1定时中断次数 uchar click_1=0;bit time=0 ;/*定义定时器TO时间常数和方式控制字 */void init_sys(void) TMOD=0x01; TH0=0x3c; TL0=0xb0; /设置时间初值 TR0=0; EA=1; ET0=1; TR1=0; /开启中断,关闭定时器 / IP=0x08; /*延时程序*/void delay

4、(uint m) while(-m); void delayms(uchar ms) / 延时子程序 uchar i; while(ms-) for(i = 0; i 120; i+); uchar code Table=0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f;uchar code dis_code=0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39; /0-9 写入到AT24C01的数据串uchar code dis_code1=0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x3

5、8; /1-8超级密码uchar yuanshimima=0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38; uchar shuzu08;uchar shuzu18;uchar xiugai08;uchar xiugai18; void start() / 开始位 SDA = 1; SCL = 1; _nop_(); _nop_(); SDA = 0; _nop_(); _nop_(); _nop_(); _nop_(); SCL = 0;void stop() / 停止位 SDA = 0; _nop_(); _nop_(); SCL = 1; _n

6、op_(); _nop_(); _nop_(); _nop_(); SDA = 1;uchar shin() / 从AT24Cxx移入数据到单片机 uchar i,read_data; for(i = 0; i 8; i+) SCL = 1; read_data = 1; read_data |= (uchar)SDA; SCL = 0; return(read_data);bit shout(uchar write_data) / 从单片机移出数据到AT24Cxx uchar i; bit ack_bit; for(i = 0; i 8; i+) / 循环移入8个位 SDA = (bit)(

7、write_data & 0x80); _nop_(); SCL = 1; _nop_(); _nop_(); SCL = 0; write_data = 1; SDA = 1; / 读取应答 _nop_(); _nop_(); SCL = 1; _nop_(); _nop_(); _nop_(); _nop_(); ack_bit = SDA; SCL = 0; return ack_bit; / 返回AT24Cxx应答位void write_byte(uchar addr, uchar write_data) / 在指定地址addr处写入数据write_data start(); shou

8、t(OP_WRITE); shout(addr); shout(write_data); stop(); delayms(10); / 写入周期void fill_byte(uchar fill_data) / 填充数据fill_data到EEPROM内 uchar i; for(i = 0; i MAX_ADDR; i+) write_byte(i, fill_data); uchar read_current() / 在当前地址读取 unsigned char read_data; start(); shout(OP_READ); read_data = shin(); stop(); r

9、eturn read_data;uchar read_random(uchar random_addr) / 在指定地址读取 start(); shout(OP_WRITE); shout(random_addr); return(read_current();/*LCD功能设置*/void lcd_set(void) command0=0x30; /功能设定,8位数据传送 write(command0); command0=0x01; /清除显示 write(command0); command0=0x06; /进入点设定,游标的移动方向,显示的移位 write(command0); com

10、mand0=0x0c; /显示状态,D=1,C=0,B=0 write(command0);/*清屏程序*/void lcd_clear(void) command0=0x01; write(command0);/*写指令程序*/void write(uchar command0) delay(100); rs=0; rw=0; P0=command0; en=1; _nop_(); _nop_(); en=0;/*写数据程序*/void read(uchar data0) delay(100); rs=1; rw=0; P0=data0; en=1; _nop_(); _nop_(); en

11、=0;/=字符显示=void display(uchar y, uchar x, uchar *p) switch (y) case 1:write(0x7f+x);break; /X=1,液晶第一行第一个 case 2:write(0x8f+x);break; /0x90+(x-1) case 3:write(0x87+x);break; case 4:write(0x97+x);break; default:break;while(*p) read(*p+); /*键扫子程序*/ uchar keyscan(void) uchar scan,tmp; P1=0xf0; /发全行0扫描码 i

12、f(P1&0xf0)!=0xf0) /若有键按下 delay(1000); / 延时去抖 if(P1&0xf0)!=0xf0) /延时再判键是否还按下 scan=0xfe; while(scan&0x10)!=0) /逐行扫描 P1=scan; /输出行扫描码 if(P1&0xf0)!=0xf0) /本行有键按下 tmp=(P1&0xf0)|0x0f; return (scan)|(tmp); /还回键值 else scan=(scan1)|0x01; /行扫描码左移一位 return (0); /无键按下,返回0/*密码锁菜单界面下的密码修改的密码存入24C02中*/ void save (void) uchar i=0; fill_byte(0xff); for(i=0;i8;i+) write_byte(i,xiugai1i);/写入修改后的密码 write_byte(8, savein); /写入是否修改密码的标志 /*密码锁菜单界面下的密码修改的密码*/ void changemima (void)

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1