单片机实训报告心得.docx
- 文档编号:9606962
- 上传时间:2023-02-05
- 格式:DOCX
- 页数:30
- 大小:267.83KB
单片机实训报告心得.docx
《单片机实训报告心得.docx》由会员分享,可在线阅读,更多相关《单片机实训报告心得.docx(30页珍藏版)》请在冰豆网上搜索。
单片机实训报告心得
广东轻工职业技术学院
实训报告
实训项目单片机实训
系别:
电子通信工程系
专业:
应用电子技术
班级:
嵌入式091班
姓名:
11222
学号:
16
指导老师:
丁向荣、赵慧
实训地点:
第三实训楼C309
实训时间:
2011年1月10日至1月14日
前言
单片机应用技术是现代电子设计的核心技术,学习单片机只是就是要将单片机应用到电子产品中,以单片机为控制核心实现电子系统所需实现的功能。
单片机的应用能力很多程度上决定了电子类专业学生电子设计与电子应用的水平与能力,尤其是高职学生更是如此。
本项目要求设计一个简单的电子时钟,用六位LED数码管实现电子时钟的功能,显示方式为时、分、秒,采用24h(小时)计时方式,使用按键开关可实现时分调整。
通过电子闹钟项目的课题设计,让同学们体验项目设计的要点,了解项目设计的流程,加深对单片机应用知识的学习,体会团队协作的力量所在。
为日后的嵌入式专业学习巩固基础。
目录
1.概述…………………………………………………………
1.1系统的作用………………………………………………………………
1.2系统的功能要求……………………………………………………………
2.系统硬件设计………………………………………………..
2.1系统的电路原理……………………………………………………………
2.2电路原理图………………………………………………………………
2.3各控制按钮控制功能说明……………………………………………….
3.系统软件设计……………………………………………….
4.系统调试…………………………………………………….
5.总结…………………………………………………………
1.概述
1.1系统的作用
本系统是利用AT89C51单片机结合6个七段显示器以24时制“时时分分秒秒”格式显示时间的电子定时闹铃,系统可以设置8组定时闹铃和1组倒计时功能;当定时闹铃和倒计结束时,该电子时钟通过蜂鸣器发出嘀嘀嘀响声;本系统还具有半点和整点报时功能,当现在时间为半点时会发出嘀的一声响,当现在时间为整点时报整点数响声。
由于该电子定时闹铃有强大功能可以在多种场合下使用,利用七段显示器发光也可以在夜晚和黑暗场合下使用。
1.2系统的功能要求
(1)使用6位七段显示器显示24时制时间。
(2)时间显示格式为“时时分分秒秒”。
(3)定时闹铃功能。
(4)倒计时功能。
(5)半点报时功能:
当现在时间为半点时,蜂鸣器发出“嘀”一声响。
(6)整点报时功能:
当现在时间为整点时,蜂鸣器发出现在时间整点数响声。
(7)当任一闹铃时间到时发出连续“嘀嘀嘀”响声,七段显示器显示“XHHMM”。
(8)当倒计时时间到时发出嘀嘀嘀响声,七段显示器显示“”。
(9)定时闹铃、倒计时和现在时间模式可以互相切换而不影响各自功能。
(10)具有4个按键来进行功能设置,可以设置当前时间、8组闹铃的时间设置和开关及倒计时的时间设置。
(11)通过复位按键可以重启系统。
2.系统的硬件设计
2.1系统的电路原理
(1)系统以AT89C51单片机为本电路的核心元件,通过单片机的P0.0~P0.7引脚和A102J排阻加上拉电压来驱动七段显示器段显示数字。
(2)通过单片机的P2.2~P2.7引脚连接A103J排阻拉升电压信号,控制6个8050NPN三极管使共阴极七段显示器连通接地来循环点亮6位七段显示器。
(3)在七段显示器供电的同时由P0脚驱动显示不同数字。
根据人眼的视觉暂留特点,调整延迟时间使所观察到时间数字是稳定的数字。
(4)系统使用了HYDZ蜂鸣器,通过单片机P3.7引脚连接8550PNP三极管推动发声。
(5)电路通过4个按键连接单片机P1.0~P1.3引脚低电平控制系统功能设置。
(6)单片机的复位电路,采用传统上电复位,通过Reset按键控制。
(7)电路可以通过+5V和+12V直流电供电,当使用+12V直流供电时,电路通过1个7805三端稳电器、2个35v100μF电解电容和1个50v10μF电解电容转换成+5V直流电供电。
(8)系统通过一个发光二极管指示电路供电是或正常。
2.2电路原理图
图示为数码管显示电路
图示为主程序电路图
2.3各控制按钮控制功能说明
KEY0(按键INT0):
调时向左移一位数——接P3.0
KEY1(按键INT1):
当前位加1——接P3.1
KEY2(按键T0):
当前位减1——接P3.2
KEY3(按键T1):
确定调时时间——接P3.3
S1:
切换闹钟调时模式(高电平)——接P3.4
S2:
中断程序(高电平),中断当前的闹钟或整点报时的响应——接P3.5
S3:
暂停和开始计时(高电平)——接P3.6
BELL:
蜂鸣器——接P3.7
——当整点报时和闹钟响应的时候会响。
LED灯——当整点报时和闹钟响应的时候会亮。
P1.0~P1.3分别接LED灯的高四位,P1.4~P1.7分别接灯的低四位。
P0.0~P0.7分别口接数码管的段选的a~h位
P2.0~P2.5口分别接数码管的位选的6~1位
3.软件设计
表一程序内存资源分配表
内存地址
变量名称
作用说明
20H
存放50毫秒计时
21H
存放0.5秒计时
22H
SECON
存放1秒计时
23H
MIN
存放1分计时
24H
HOUR
存放1小时计时
25H
用于中断1(#6H)
26H
用于显示中的闪烁
27H.0
闹钟标志位
27H.1
允许响铃
27H.2
用于标志分、秒(1为秒),闹钟功能时也一样
27H.3
闹钟总开关(1为开)
27H.4
用于闪烁标志
27H.5
用于闪烁
27H.6
秒表标志
27H.7
两组闹钟的标志位,默认值为0
28H-29H
用于保存闪烁时的调时区地址
30H-35H
存放调时区地址
36H
DISP
用于存放要显示的首字(例如秒)
37H-39H
第一组闹钟的时分
40H
SP
栈底
50H-52H
秒表
53H-55H
第二组闹钟的时分
56H
存放闹钟调分地址
57H
存放闹钟调时地址
2AH.0
闹钟组的切换标志(默认值为0)
2AH.1
切换(默认值为0)
2AH.2
闹钟第二组开关(默认值为0)
表二芯片端口资源分配表
芯片端口
变量名称
作用说明
P1.0
K1
操作键K1
P1.1
K2
操作键K2
P1.2
K3
操作键K3
P1.3
K4
操作键K4
P1.7
SPK
压电喇叭控制信号
P0
七段显示器数数字形状控制
P2.2
控制时间小时的十位七段显示器亮灭
P2.3
控制时间小时的个位七段显示器亮灭
P2.4
控制时间分钟的十位七段显示器亮灭
P2.5
控制时间分钟的个位七段显示器亮灭
P2.6
控制时间秒钟的十位七段显示器亮灭
P2.7
控制时间秒钟的个位七段显示器亮灭
P3.0
BELL
蜂鸣器
P3.1
LED半秒闪烁
P3.2
LED显示第一组闹钟是否开启
P3.3
LED显示第二组闹钟是否开启
表三寄存器资源分配表
组
寄存器
作用说明
第
0
组
R0
存放秒显示地址
R1
显示首址
R2
#06H
R3
#0FEH
R4
#3H
R6、R7
延时初始值
第
1
组
R0
用于keyB、C
R5
用于中断
流程图显示如下:
源程序清单:
#include
#defineucharunsignedchar
#defineled_dataP0//P0显示数码管当前位的数字
#defineled_bitP2//P2控制当前数码管显示的位数
intb;
ucharconls=0x00;//记录秒分时的个位数
ucharcons=0x00;//记录秒分时的十位数
ucharcon=0x00;//记录调时程序当前位数
ucharx=0x00;//记录闹钟
sbitkey0=P3^0;//key0控制调时位左移以一位
sbitkey1=P3^1;//key1控制挑时当前位数字+1
sbitkey2=P3^2;//key1控制挑时当前位数字-1
sbitkey3=P3^3;//确定当前挑时中断程序
sbitstop=P3^4;//用来暂时计时和启动计时
sbitbaojing=P3^5;//用以响应整点报时和闹钟
sbitnaozhong=P3^6;//用来开启闹钟调时程序
sbitbeep=P3^7;//用来终止当前整点报时或闹钟响应
ucharcodetable[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x00};//数码管当前位0~9的显示码
uchardatascan_con[6]={0xFE,0xFD,0xFB,0xF7,0xEF,0xDF};//数码管左到右6个位的显示
uchardatadis[8]={0x00,0x00,0x00,0x00,0x00,0x00,0x0a,0x00};//数码管的显示码
uchardatatimedata[6]={0x00,0x00,0x00,0x00,0x00,0x00};//电子钟的初始时间:
00:
00:
00
uchardatasecclock[6]={0x00,0x00,0x00,0x00,0x00,0x00};//闹钟调时的初始时间:
00:
00:
00
uchari;
display();//显示数码管函数申明
keyscan();//调时按钮函数声明
//alarmcolk();
/************************************************************************/
/*1ms延时显示程序*/
/************************************************************************/
voiddelay(intz)
{
intx,y;
for(x=0;x for(y=0;y<120;y++); } initializa(); /************************************************************************/ /*主函数*/ /************************************************************************/ voidmain() { initializa(); while (1) { display(); keyscan(); //alarmcolk(); } } /************************************************************************/ /*显示子程序*/ /************************************************************************/ display() { uchark; for(k=0;k<6;k++) { led_data=table[dis[k]];led_bit=scan_con[k];delay (1);P2=0x00; } } /************************************************************************/ /*初始化子程序*/ /************************************************************************/ initializa() { for(i=0;i<6;i++) { dis[i]=timedata[i]; } TH0=0X3C;TL0=0XB0; TH1=0x3c;TL1=0XB0; TMOD=0X11; ET0=1; ET1=1; TR0=1; TR1=0; EA=1; } /************************************************************************/ /*调时按钮处理子程序*/ /************************************************************************/ keyscan() { inta=0,j; for(i=0,j=0;i<6;i++)//分别比较电子钟与闹钟时分秒 { if(timedata[i]==secclock[5-i]&&timedata[0]! =0) j++; } if(j==6) { if(beep==0)//若都相等,且没关闭响应 { for(i=1;i<10;i++) { baojing=0; P1=0x00; delay(500); baojing=1; P1=0xff; delay(500); } } } if(key3==0){con=0;x=0;TR1=0;ET1=0;TR0=1;ET0=1;}//关闭调时按钮中断,继续显示电子钟的时间 elseif(naozhong==0)//开启调时按钮中断 { EA=0; if(key0==0) { delay(10); while(key0==0); if(dis[con]==10) { dis[7]=dis[con];dis[con]=dis[6];dis[6]=dis[7]; } con++;TR0=0;ET0=0;TR1=1;ET1=1; if(con>=6)//若左移位数超过6,则关闭调时按钮中断,继续显示电子钟的时间 { con=0;TR1=0;ET1=0;TR0=1;ET0=1; } } if(con! =0) { if(key1==0) { delay(10); while(key1==0); timedata[con]++;//当前位数据+1 switch(con) { case1: case3: if(timedata[con]>=6)//1、3位满6进一 { timedata[con]=0; }break; case2: case4: if(timedata[con]>=10)//2、4位满10进一 { timedata[con]=0; } break; case5: //5位满2清零 if(timedata[con]>=3) { timedata[con]=0; } break; default: ; } dis[con]=timedata[con]; dis[6]=0x0a; } } if(con! =0) { if(key2==0) { delay(10); while(key2==0); switch(con) { case1: case3: if(timedata[con]==0) { timedata[con]=0x05;//1、3位为0时的减1处理 } else { timedata[con]--;//当前位数据-1 }break; case2: case4: if(timedata[con]==0) { timedata[con]=0x09;//2、4位为0时的减1处理 } else { timedata[con]--;//当前位数据-1 }break; case5: if(timedata[con]==0) { timedata[con]=0x02;//5位为0时的减1处理 } else { timedata[con]--;//减1处理 } break; default: ; } dis[con]=timedata[con];dis[6]=0x0a;//送显示数据 } } EA=1; } elseif(naozhong! =0)//开启调时按钮中断,功能类似上面 { EA=0; if(key0==0) { delay(10); while(key0==0); if(dis[x]>=10) { dis[7]=dis[x];dis[x]=dis[6];dis[6]=dis[7]; } x++;TR0=0;ET0=0;TR1=1;ET1=1; if(x>=6) { x=0;TR1=0;ET1=0;TR0=1;ET0=1; } } if(x<=9) { if(key1==0) { delay(10); while(key1==0); secclock[x]++; switch(x) { case1: case3: if(secclock[x]>=6) { secclock[x]=0; }break; case2: case4: if(secclock[x]>=10) { secclock[x]=0; } break; case5: if(secclock[x]>=3) { secclock[x]=0; } break; default: ; } dis[x]=secclock[x]; dis[6]=0x0a; } } if(x>=0) { if(key2==0) { delay(10); while(key2==0); switch(x) { case1: case3: if(secclock[x]==0) { secclock[x]=0x05; } else { secclock[x]--; }break; case2: case4: if(secclock[x]==0) { secclock[x]=0x09; } else { secclock[x]--; }break; case5: if(secclock[x]==0) { secclock[x]=0x02; } else { secclock[x]--; } break; default: ; } dis[x]=secclock[x];dis[6]=0x0a; } } EA=1; } } /************************************************************************/ /*0.3s闪烁中断小程序*/ /************************************************************************/ voidtime_intt1(void)interrupt3 { EA=0;TR1=0;TH1=0X3C;TL0=0XB0;TR1=1; cons++; if(cons==6)//50msx6=300ms=0.3s { cons=0x00; dis[7]=dis[con];dis[con]=dis[6];dis[6]=dis[7]; } EA=1; } /************************************************************************/ /*电子钟显示进位处理程序*/ /*****************************************************************
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 单片机 报告 心得
![提示](https://static.bdocx.com/images/bang_tan.gif)