单片机实践报告模板文档格式.docx

上传人:b****5 文档编号:20879648 上传时间:2023-01-26 格式:DOCX 页数:16 大小:17.53KB
下载 相关 举报
单片机实践报告模板文档格式.docx_第1页
第1页 / 共16页
单片机实践报告模板文档格式.docx_第2页
第2页 / 共16页
单片机实践报告模板文档格式.docx_第3页
第3页 / 共16页
单片机实践报告模板文档格式.docx_第4页
第4页 / 共16页
单片机实践报告模板文档格式.docx_第5页
第5页 / 共16页
点击查看更多>>
下载资源
资源描述

单片机实践报告模板文档格式.docx

《单片机实践报告模板文档格式.docx》由会员分享,可在线阅读,更多相关《单片机实践报告模板文档格式.docx(16页珍藏版)》请在冰豆网上搜索。

单片机实践报告模板文档格式.docx

2

U1

51单片机

AT89C52

3

C1-C2

电容

CAP

4

C3

极性电容

CAP-ELEC

5

X1

晶体

CRYSTAL

6

4*4行列扫描键盘

KEYPAD-SMALLCALC

7

D1-D2

发光二极管(绿色)

LED-GREEN

8

直流电机

MOTOR-DC

9

R1-R4,R6

通用电阻

RES

10

RP1

8位排阻

RESPACK-8

11

LS1

蜂鸣器

SOUNDER

12

Q1、Q2

Q5、Q6

三极管

TIP122

13

Q3、Q4

TIP127

4、创新之外

5、难点

6、程序清单(添加注释)

#include<

AT89X52.h>

unsignedintnum=10;

//开始让数码管什么都显示

bitset=0;

//定义设置密码的位

charcount=-1;

//开始让count=-1,方便后面显示数码管

sbitBeep=P1^2;

//蜂鸣器

unsignedchartemp;

unsignedcharpws[6]={1,2,3,4,5,6};

//原始密码

unsignedcharpwx[6];

//按下的数字存储区

bitrightflag;

//密码正确的标志位

unsignedcharworkbuf[6];

unsignedcharcodetabledu[]={

0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x00,0x40

};

//段选码,共阴极

unsignedcharcodetablewe[]={

0xfe,0xfd,0xfb,0xf7,0xef,0xdf

//位选码

unsignedintkeyscan();

voiddelay(unsignedcharz)//延时,毫秒

{

unsignedchary;

for(;

z>

0;

z--)

for(y=120;

y>

y--);

}

voidsetpw()//设置密码函数

keyscan();

unsignedintkeyscan()//键盘扫描函数

P3=0xfe;

temp=P3;

temp=temp&

0xf0;

if(temp!

=0xf0)

{

delay(5);

//键盘去抖,最好20ms以上,这里用了5ms

count++;

//按键计数加1

switch(temp)

case0xee:

num=7;

if(count<

6)//六位密码,因此count<

if(set==0)//设置密码键没有被按下时

pwx[count]=num;

//存储按下的数字

else

pws[count]=num;

//当密码键按下时,设置新密码

workbuf[count]=tabledu[11];

//相应位的数码管显示"

-"

不显示相应的数字,密码是保密的

}

break;

case0xde:

num=8;

6)

if(set==0)

case0xbe:

num=9;

case0x7e:

//设置密码键按下

set=1;

//设置密码标志位置1

P1_3=0;

//设置密码指示灯亮

workbuf[0]=0x00;

//数码管第一位不显示

workbuf[1]=0x00;

workbuf[2]=0x00;

workbuf[3]=0x00;

workbuf[4]=0x00;

workbuf[5]=0x00;

//...

count=-1;

//按键计数复位为-1

6)//密码没有设置完,继续设置密码

setpw();

//设置密码

while(temp!

=0xf0)//按键抬起检测

{

P3=0xfd;

case0xed:

num=4;

case0xdd:

num=5;

case0xbd:

num=6;

P3=0xfb;

//

case0xeb:

num=1;

case0xdb:

num=2;

case0xbb:

num=3;

P3=0xf7;

case0xd7:

num=0;

case0xe7:

num=20;

break;

//确定键按下检测

case0x77:

//复位键或输入密码全部一次删除

P1_1=0;

//锁关

P1_3=1;

//密码设置指示灯灭

set=0;

//不设置密码

num=10;

//num复位

//count复位

workbuf[0]=tabledu[10];

//第一位数码管不显示

workbuf[1]=tabledu[10];

workbuf[2]=tabledu[10];

workbuf[3]=tabledu[10];

workbuf[4]=tabledu[10];

workbuf[5]=tabledu[10];

P1_0=1;

case0xb7:

//输入密码删除键(一位一位删除)

count--;

workbuf[count]=0x00;

//因为确定键按下时,count也会加1,而确定键不是密码,所以这里是count,而不是count+1

//因为确定键按下时,确定键不是密码,count也会加1,所以这里的count再自减1

=-1)

return(num);

voidinit()//利用定时显示数码管

TMOD=0x01;

TH0=(65536-500)/200;

TL0=(65536-500)%200;

ET0=1;

EA=1;

TR0=1;

bitcompare()//密码比较函数

if((pwx[0]==pwx[0])&

(pwx[1]==pwx[1])&

(pwx[2]==pwx[2])&

(pwx[3]==pwx[3])&

(pwx[4]==pwx[4])&

(pwx[5]==pwx[5]))

rightflag=1;

else

rightflag=0;

return(rightflag);

voidmain()

unsignedinti,j;

init();

P0=0;

P1_1=0;

while

(1)

keyscan();

if(num==20)//如果确定键按下(修改密码和输入密码共用的确定键)

if(count==6)

if(set==1)//修改密码确定

workbuf[0];

workbuf[1];

workbuf[2];

workbuf[3];

workbuf[4];

workbuf[5];

else//输入密码确定

compare();

if(rightflag==1)//如果密码正确

P1_0=0;

//锁开

P1_1=1;

workbuf[0]=tabledu[8];

//数码管第一位显示"

8"

workbuf[1]=tabledu[8];

//数码管第二位显示"

workbuf[2]=tabledu[8];

workbuf[3]=tabledu[8];

workbuf[4]=tabledu[8];

workbuf[5]=tabledu[8];

//锁仍然关

workbuf[0]=0X71;

F"

workbuf[1]=0X71;

workbuf[2]=0X71;

workbuf[3]=0X71;

workbuf[4]=0X71;

workbuf[5]=0X71;

for(i=0;

i<

1000;

i++)//密码错误报警

for(j=0;

j<

80;

j++)

Beep=~Beep;

else//若输入的密码位数不为6位时

i++)

voidtimer0()interrupt1//数码管驱动程序

unsignedchari;

TH0=(65536-500)/200;

TL0=(65536-500)%200;

6;

P0=workbuf[i];

//送出显示内容

P2=tablewe[i];

//选中显示行

P0=0;

7、实验心得

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 法律文书 > 起诉状

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

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