重庆邮电大学自动化电气与工程类 工程实训实验报告单片机最小系统实验报告Word文件下载.docx

上传人:b****3 文档编号:16467938 上传时间:2022-11-23 格式:DOCX 页数:20 大小:125.38KB
下载 相关 举报
重庆邮电大学自动化电气与工程类 工程实训实验报告单片机最小系统实验报告Word文件下载.docx_第1页
第1页 / 共20页
重庆邮电大学自动化电气与工程类 工程实训实验报告单片机最小系统实验报告Word文件下载.docx_第2页
第2页 / 共20页
重庆邮电大学自动化电气与工程类 工程实训实验报告单片机最小系统实验报告Word文件下载.docx_第3页
第3页 / 共20页
重庆邮电大学自动化电气与工程类 工程实训实验报告单片机最小系统实验报告Word文件下载.docx_第4页
第4页 / 共20页
重庆邮电大学自动化电气与工程类 工程实训实验报告单片机最小系统实验报告Word文件下载.docx_第5页
第5页 / 共20页
点击查看更多>>
下载资源
资源描述

重庆邮电大学自动化电气与工程类 工程实训实验报告单片机最小系统实验报告Word文件下载.docx

《重庆邮电大学自动化电气与工程类 工程实训实验报告单片机最小系统实验报告Word文件下载.docx》由会员分享,可在线阅读,更多相关《重庆邮电大学自动化电气与工程类 工程实训实验报告单片机最小系统实验报告Word文件下载.docx(20页珍藏版)》请在冰豆网上搜索。

重庆邮电大学自动化电气与工程类 工程实训实验报告单片机最小系统实验报告Word文件下载.docx

三、系统设计方案

按照系统设计的功能的要求,初步确定设计系统由单片机主控模块、八位数码管显示模块、键扫描接口电路共三个主要模块组成。

主控芯片使用AT89C52单片机,键盘电路采用4*4矩阵键盘电路,并附有三位功能选择键模块,显示模块采用八位一体共阴极数码管。

51系列单片机定时器的结构及工作原理:

组成:

两个16位的定时器T0和T1,以及他们的工作方式寄存器TMOD和控制寄存器TCON等组成。

内部通过总线与CPU相连。

定时器T0和T1各由两个8位特殊功能寄存器TH0、TL0、TH1、TL1构成。

工作方式寄存器TMOD:

用于设置定时器的工作模式和工作方式;

控制寄存器TCON:

用于启动和停止定时器的计数,并控制定时器的状态;

单片机复位时,两个寄存器的所有位都被清0。

四、软件仿真

单片机最小系统电路图如图

五、程序

#include<

reg52.h>

#defineucharunsignedchar

#defineuintunsignedshortint

sbitp14=P1^4;

sbitp15=P1^5;

sbitp16=P1^6;

sbitp17=P1^7;

ucharcodetable1[]=

{0x3f,0x06,0x5b,0x4f,

0x66,0x6d,0x7d,0x07,

0x7f,0x6f,0x77,0x7c,

0x39,0x5e,0x79,0x71,0,0x40};

//定义显示段码

ucharnum,temp;

shortintx1=0,x2=0;

ucharoperateFlag=0,a=1,b=1,c=1,d=1,e=1,f=1,g=1,h=1;

bitresult=0,keyDown=0,affirm=0;

uchartime=0,seconds=0,minutes=0,hours=0,choice=0;

voiddelay(uchark)//定义延时函数

{

uchari,j;

for(i=k;

i>

0;

i--)

for(j=124;

j>

j--);

}

voidTIME0_INT()//初始化定时器0

TMOD=0x01;

TH0=(65536-10000)/256;

TL0=(65536-10000)%256;

a=b=d=e=g=h=0;

c=f=16;

EA=1;

ET0=1;

TR0=1;

voidtimer0()interrupt1//定时器中断0服务函数

time++;

voidAllInitial()//每种功能的初始化

if(choice==0||affirm==0)

{

a=h=16;

b=c=g=f=16;

d=0;

e=choice;

EA=0;

}

elseif(choice==1&

&

affirm==1)

h=g=f=e=0;

a=b=c=d=16;

time=seconds=minutes=hours=0;

elseif(choice==2&

c=f=17;

EA=1;

elseif(choice==3&

a=b=c=d=e=f=g=16;

h=num=0;

}

charkeyscan()

keyDown=0;

P3=0xfe;

temp=P3;

temp=temp&

0xf0;

while(temp!

=0xf0)

delay(5);

switch(temp)

case0xee:

num=1;

break;

case0xde:

num=2;

case0xbe:

num=3;

case0x7e:

operateFlag=0x01;

=0xf0)//判断按键是否松开

keyDown=1;

}

P3=0xfd;

case0xed:

num=4;

case0xdd:

num=5;

case0xbd:

num=6;

case0x7d:

operateFlag=0x02;

P3=0xfb;

case0xeb:

num=7;

case0xdb:

num=8;

case0xbb:

num=9;

case0x7b:

P3=0xf7;

case0xe7:

num=0;

case0xd7:

case0xb7:

case0x77:

returnnum;

voidsmg(uchara,ucharb,

ucharc,uchard,uchare,

ucharf,ucharg,ucharh)

P0=0;

P2=0xfe;

P0=table1[a];

delay

(1);

P2=0xff;

P2=0xfd;

P0=table1[b];

P2=0xfb;

P0=table1[c];

P2=0xf7;

P0=table1[d];

P2=0xef;

P0=table1[e];

P2=0xdf;

P0=table1[f];

P2=0xbf;

P0=table1[g];

P2=0x7f;

P0=table1[h];

voidjishu(ucharnum1)

if(h==0&

g==16)

{h=num1;

elseif(g==16)

{

g=h;

h=num1;

}

elseif(f==16)

f=g;

elseif(e==16)

{

e=f;

elseif(d==16)

d=e;

elseif(c==16)

c=d;

elseif(b==16)

b=c;

elseif(a==16)

a=b;

b=c;

c=d;

d=e;

e=f;

f=g;

g=h;

h=num1;

else

voidcalculator()

num=keyscan();

if(keyDown==1)

{

jishu(num);

num=0;

smg(a,b,c,d,e,f,g,h);

//*******秒表程序**********

voidmbcs()

if(operateFlag==0x01)

{EA=!

EA;

if(operateFlag==0x02)

time=seconds=minutes=0;

if(time>

=100)

time=0;

++seconds;

if(seconds==60)

seconds=0;

++minutes;

if(minutes==60)

{

minutes=0;

}

h=time%10;

g=time/10;

f=seconds%10;

e=seconds/10;

a=b=c=d=16;

//********时钟程序**********

voidszcs()

if(num==1)

++hours;

elseif(num==4)

--hours;

elseif(num==2)

elseif(num==5)

--minutes;

elseif(num==3)

++seconds;

elseif(num==6)

--seconds;

if(time==100)

seconds++;

}//增长溢出

if(seconds==60)

minutes++;

seconds=0;

if(minutes==60)

minutes=0;

if(hours>

=24)

hours=minutes=seconds=0;

if(minutes==60)

++hours;

minutes=0;

if(hours>

hours=minutes=seconds=0;

if(hours>

//消减溢出

if(seconds==255)

{seconds=59;

--minutes;

if(minutes==255)

{minutes=59;

--hours;

if(hours==255)

{hours=minutes=seconds=0;

a=hours/10;

b=hours%10;

d=minutes/10;

e=minutes%10;

g=seconds/10;

h=seconds%10;

voidsingal(intwei,intduan,inttimeSpan)

P2=wei;

P0=duan;

delay(timeSpan);

voidmainKey()

//扫描按键的功能变化

if(p14==0)

delay(5);

if(p14==0)

choice=1;

e=choice;

while(!

p14);

elseif(p15==0)

if(p15==0)

choice=2;

p15);

elseif(p16==0)

if(p16==0)

choice=3;

p16);

if(p17==0)

if(p17==0&

choice!

=0)

affirm=!

affirm;

AllInitial();

p17);

}

voidmain()

{

TIME0_INT();

EA=0;

AllInitial();

while

(1)//主循环

{

mainKey();

if(affirm==1)

switch(choice)

case1:

mbcs();

break;

case2:

szcs();

case3:

calculator();

软件设计好后,在KEIL上面进行编译,把编译得到的hex文件加载到Proteus里面进行仿真,得到Proteus仿真电路图如图。

时钟

秒表

清零

键盘选择

六实验心得

通过本次单片机最小系统的设计、应用实验的学习,收获颇丰,对单片机最小系统有了一定的认识和了解。

基本掌握了利用Protus软件仿真电路的方法。

并为电路编写程序,实现一定的功能。

巩固了单片机课上所学的知识,而且也学到了很多在书本上所没有学到过的知识,使我懂得了理论与实际相结合是很重要的,在今后的学习实践中,要加强知识与实践相结合的运用。

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

当前位置:首页 > 党团工作 > 入党转正申请

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

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