微机控制系统实习报告.docx
《微机控制系统实习报告.docx》由会员分享,可在线阅读,更多相关《微机控制系统实习报告.docx(13页珍藏版)》请在冰豆网上搜索。
微机控制系统实习报告
微机控制系统实习报告
课题:
电子钟设计
系院:
机械与控制工程学院
专业:
自动化
组成员:
陈增林(3070419150)
叶明广(3070419131)
陈其宇(3070419132)
庞业煌(3070419145)
电子钟设计
1、设计要求
电子钟的设计要求是用单片机组成一个具有键盘模块、显示模块、闹铃模块、单片机模块的电子钟,键盘采用4*4的键盘,键盘具有调整时间,设置闹铃开或关等功能。
显示模块使用三个二联(0.5)数码管显示时、分、秒。
数码管的驱动使用到三极管9012来驱动。
单片机是使用上电复位。
二、设计方案
本设计采用AT89S52单片机为核心控制器件,系统组成框图如下图1所示。
AT89S51是美国ATMEL公司生产的低功耗,高性能CMOS8位单片机,片内含4kbytes的可系统编程的Flash只读程序存储器,器件采用ATMEL公司的高密度、非易失性存储技术生产,兼容标准8051指令系统及引脚。
它集Flash程序存储器既可在线编程(ISP)也可用传统方法进行编程及通用8位微处理器于单片芯片中,ATMEL公司的功能强大,低价位AT89S51单片机可为您提供许多高性价比的应用场合,可灵活应用于各种控制领域。
图1系统组成框图
3、硬件设计
原理电路图如图2所示,电路板PCB图如图3所示,图4为电源的PCB图。
图3电子钟PCB图
图4电源PCB图
4、软件设计
1、程序流程图
程序流程图如图5所示
....................................
图五(a)主程序
图五(b)键功能程序流程图
2、参考程序
#include
#defineucharunsignedchar
#defineuintunsignedint
#definekeyP3
voidmsec(uintx);
voidxianshi();
ucharjianpan(void);
voidnaolingsheji();
voidtiaoshijian();
sbitnling=P1^0;//蜂鸣器
sbitkaiguan=P1^1;//闹铃开关
bitdian,keep=1;
uchari,sum;
uintk,n;
ucharhour,min,sec;
ucharhour1,min1,sec1;
ucharshijian[6]={1,2,3,4,5,6};//时间时--秒
ucharnaoling[6]={1,2,3,4,5,6};//闹铃时--秒
codeuintshuzu[11]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40};
ucharweixuan[6]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf};//位选初始化
voidmain()
{
//********定时初始化*********************
TMOD=0x01;
TL0=(65536-20000+35)%256;//35为实际校正
TH0=(65536-20000+35)/256;//35为实际校正
IE=0x82;
TR0=1;
//***************************************
kuaiguan=0;
while
(1)
{
shijian[0]=hour/10;//时间
shijian[1]=hour%10;
shijian[2]=min/10;
shijian[3]=min%10;
shijian[4]=sec/10;
shijian[5]=sec%10;
naoling[0]=hour1/10;//闹铃
naoling[1]=hour1%10;
naoling[2]=min1/10;
naoling[3]=min1%10;
naoling[4]=sec1/10;
naoling[5]=sec1%10;
tiaoshijian();//调时间
naolingsheji();//闹铃设计
}
}
//*********进入定时T0中断*******************
voidtimet()interrupt1
{
TL0=(65536-20000+35)%256;//35为实际校正
TH0=(65536-20000+35)/256;//35为实际校正
xianshi();
sum++;
if(sum==25||sum==50)
dian=~dian;//点闪
if(sum==50)
{
nling=1;//整点报时1s
sum=0;
sec++;
if(sec==60){sec=0;min++;}
if(min==60){min=0;hour++;}
if(hour==24){hour=0;}
}
}
//*********送数显示*********************
voidxianshi()
{
for(i=0;i<6;i++)
{
P2=weixuan[i];//位选
if(keep==1)
{
if(dian==0&&(i==1||i==3))//时间显示
P0=shuzu[shijian[i]]|0x80;
else
P0=shuzu[shijian[i]];
}
else
if(dian==0&&(i==1||i==3))//闹铃显示
P0=shuzu[naoling[i]]|0x80;
else
P0=shuzu[naoling[i]];
msec
(1);
P2=0xff;
}
}
//*********调时间**************************
voidtiaoshijian()
{
uchark,w;
k=jianpan();
switch(k)
{
case15:
nn:
shijian[0]=10;//调现在时间
shijian[1]=10;
shijian[2]=10;
shijian[3]=10;
shijian[4]=10;
shijian[5]=10;
do
{
k=jianpan();
if((k>=0)&&(k<=9))//0-9有效
{
shijian[w]=k;
w++;
msec(200);
}
}
while(w<6);
w=0;
hour=shijian[1]+shijian[0]*10;//送时间显示
min=shijian[3]+shijian[2]*10;
sec=shijian[5]+shijian[4]*10;
if(hour>23||min>59||sec>59)//超范围时无效
gotonn;break;
case14:
mm:
keep=0;//调闹铃时间
naoling[0]=10;
naoling[1]=10;
naoling[2]=10;
naoling[3]=10;
naoling[4]=10;
naoling[5]=10;
do
{
k=jianpan();
if((k>=0)&&(k<=9))//0-9有效
{
naoling[w]=k;
w++;
msec(200);
}
}
while(w<6);
w=0;
hour1=naoling[1]+naoling[0]*10;//送闹铃显示
min1=naoling[3]+naoling[2]*10;
sec1=naoling[5]+naoling[4]*10;
if(hour1>23||min1>59||sec1>59)//超范围时无效
{gotomm;}
keep=1;break;
case13:
keep=~keep;//看闹铃开/关
msec(255);break;
case12:
kaiguan=~kaiguan;//闹铃开关
msec(200);
break;
default:
break;
}
}
//*********闹铃设计**************************
voidnaolingsheji()
{
if(min==0&&sec==0)
nling=0;//整点报时
if(kaiguan==1&&hour==hour1&&min==min1&&n==1)
{
k++;
if(k==5000)
{
nling=~nling;
k=0;
}
}
}
//*********键盘扫描*************************
ucharjianpan(void)
{
//static;静态变量
ucharn,m,leiyu;
ucharbijiao=0x01;
key=0x0f;
if(key!
=0x0f)
{
msec(10);//消除抖动
if(key!
=0x0f)//判断是否确有按键按下
{
for(n=0;n<4;n++)//行扫描
{
leiyu=0x10;
key=~bijiao;
for(m=0;m<4;m++)//列扫描
{
if((key&leiyu)==0)
{
return(n*4+m);//有按下是取出键值
}
else
leiyu=leiyu<<1;//扫描下一列
}
bijiao=bijiao<<1;//扫描下一行
}
}
}
return(22);//没按键按下时返回0
}
//*********延时1ms**********************
voidmsec(uintx)
{
ucharj;
while(x--)
{
for(j=0;j<125;j++)
{;}
}
}
5、调试
6、实习心得
历时三个星期的综合电子实习就要结束了,三个星期以来,我们为了那个课题做了很多工作,在这个过程中感觉学到了很多东西。
我们组选的题目不是实习指导书里的的,设计课题是电子钟设计,这个设计的要求是用单片机组成一个具有键盘模块、显示模块、闹铃模块、单片机模块的电子钟,键盘采用4*4的键盘,键盘具有调整时间,设置闹铃开或关等功能。
显示模块使用三个二联(0.5)数码管显示时、分、秒。
数码管的驱动使用到三极管9012来驱动。
单片机是使用上电复位。
选好题目,明确功能要求之后就开始资料的收集。
完成这些资料的准备之后我们开始了电路图的设计,按照设计的电路图画好PCB图之后开始软件部分的设计,软件部分主要设计到相关实验程序的编写,完成这些后就可以进行电路板的制作,制作过程在这里就省略了。
做好电路板之后就开始原件的焊接,完成这一步就进到了最后一步,调试作品的过程,通常来说调试是最难的一部分。
在调试过程是让。
处理好这些细节之后我们的作品也就完成了。
经过这次实习,我觉得我们以前在学校所接触的书本上的东西远远不够,我们应该更多的投入到实际之中,更多的接触社会,只存在于理论中,不仅让我们觉得枯燥乏味,不易理解,而且让我们不能真正明白和懂得知识理论和实际的差距,学习更多的理论的同时我们也要积极接触社会实践,希望学校可以给我们更多这样的机会。
以上是我本次实习学到的一些知识还有我的一些理解,总的来说收获很多,学到了很多,我想我们都应该认真的对待类似的实习或实践,这些都是我们能够学到操作本领的地方,可以让我们不满足于书本,学到更多的有用的知识。
这样我们以后离开学校走上社会,也不至于仅仅是些空口空谈,没有一点实际技巧的人,可以让我们更加好的融入社会,适应社会,希望以后有更多实践自己动手的机会。