- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
word格式整理版
文档可编辑
课程设计(综合实验)报告
( 2009 -- 2010 年度第 二 学期)
名 称: 微处理器系统课程设计
题 目: 电子密码锁设计
院 系: 电子与通信工程系
班 级: 电子0702班
学 号: 200703020201
学生姓名: 白羽峰
指导教师: 张宁
设计周数: 1周
成 绩:
日期: 2010 年 7 月
单片机课程设计之电子密码锁
课程设计要求
1.通过键盘输入密码。
密码正确与错误进行相应的音乐提示,与液晶显示提示。
3次按下错误密码则锁死,禁止信号输入。
2.通过超级密码(长度为16位)进入密码修改模式,进行密码修正,用户密码长度为8位。
二、实验目的
进一步的掌握使用ICC进行编程以及程序调试,熟悉并掌握AVR单片机片上外设功能及其使用,熟练掌握单片机学习板上矩阵键盘、1602液晶、蜂鸣器、EEPROM(AT24C02)等外设的使用以及和单片机间的通信。
三、设计思路
利用EEPROM(AT24C02)掉电不丢失的特性设计电子密码锁,先向AT24C02中写入一组数据作为密码(密码设定),然后进入密码输入界面,输入密码并进行密码真伪判别,密码真伪有不同对应的提示,表现在液晶显示和蜂鸣器鸣响上,出现三次密码输入错误则锁死,不能进行任何操作,只能关闭电源重新开始。
四、实验源程序代码如下:
#include iom16v.h
#include macros.h
#include math.h
#define uchar unsigned char
#define uint unsigned int
#define LCD_EN BIT(PC3)
#define LCD_RS BIT(PC2)
//EEPROM控制寄存器位定义:
#define EERE 0 //读
#define EEWE 1 //写
#define EEMWE 2 //总写入
#define WWRIE 3 //中断
uint add[8]={0x0100,0x0101,0x0110,0x0111,0x1000,0x1001,0x1010,
0x1011};
uchar sc[16]={0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,
0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38};
uchar title[]={Code:};
uchar title1[]={Hint:};
uchar title2[]={Error!};
uchar title3[]={OK!};
uchar title8[]={Hello!I like AVR};
uchar title4[]={Warnning!};
uchar title5[]={Super Code:};
uchar title6[]={Input New Code:};
uchar title7[]={Set Code:};
uint xians[]={0};
uchar key_flag;
unsigned data_temp;
void_init(void)
{
DDRB=0xff; //定义B口输出
PORTB=0xff;
}
void eeprom_w(uint eeadd, uchar eedata)
{
while(EECR(1 EEWE)); //写等待
EEAR=eeadd; //设置写入地址
EEDR=eedata; //设置写入数据
EECR|=(1EEMWE); //总写入允许
EECR|=(1 EEWE); //开始写入
}
char eeprom_r(uint eeadd)
{
while(EECR(1 EEWE)); //写等待
EEAR=eeadd; //设置读入地址
EECR|=(1EERE); //读命令
return EEDR; //返回数据
}
void delay_1ms(void)
{
uint i;
for (i=0;i1140;i++);
}
void delay(uint n)
{
uint i=0;
for (i=0;in;i++)
del
文档评论(0)