学位论文单片机技术课程设计报告数码管电子时钟.docx
- 文档编号:18211040
- 上传时间:2023-08-13
- 格式:DOCX
- 页数:25
- 大小:407.67KB
学位论文单片机技术课程设计报告数码管电子时钟.docx
《学位论文单片机技术课程设计报告数码管电子时钟.docx》由会员分享,可在线阅读,更多相关《学位论文单片机技术课程设计报告数码管电子时钟.docx(25页珍藏版)》请在冰点文库上搜索。
学位论文单片机技术课程设计报告数码管电子时钟
单片机课程设计
题目:
数码管电子时钟
班级:
姓名:
学号:
学校:
时间:
2015年10月18日
目录
1 摘要 3
2 设计要求 3
2.1 功能需求 3
2.2 设计要求 3
3 硬件设计及描述 5
3.1 总体描述 5
3.2 系统总体框图 6
3.3 Proteus电路图6
3.4 各部分硬件介绍 6
4 软件设计流程及描述 9
4.1 程序流程图 9
4.2函数模块及功能 9
5 功能实现(功能介绍+照片)19
6 心得体会 19
7 源程序 20
1 摘要
通过本课程设计使学生进一步巩固单片机原理与技术的基本概念、理论,分析问题的基本方法;增强学生的软件编程实现能力和解决实际问题的能力,使学生能有效的将理论和实际紧密结合,拓展学生在工程实践方面的专业知识和相关技能。
2 设计要求
要求能够熟练的用单片机中定时/计数、中断、数码管显示等技术参考教或相关资料,采用C语言采用编程实现数字时钟的功能,在数码管上实时显示,并运用Proteus软件绘制电路原理图,进行仿真验证和误差分析。
2.1 功能需求
1、在数码管上动态显示时间,时钟的工作范围在00:
00:
00~24:
59:
59。
2、可对时钟在00:
00:
00~24:
59:
59范围内任意正常的设置。
2.2 设计要求
1、通过数码管动态显示时间信息。
图2.1数码管
2、通过独立键盘的P32和P33接口分别实现开始计时和时间设置功能。
图2.2独立键盘
3、通过矩阵键盘实现时间设置功能中时间的更改。
图2.34*4矩阵键盘
3 硬件设计及描述
3.1 总体描述
1、程序开始后首先显示00-00-00等待按键,按P3^2键后开始计时功能。
2、当按下P3^3键后进入时间设置模式,等待用户设置时间。
3、通过矩阵键盘设置时间,可对时间的每一位进行增减操作。
4、限制每一位的数字范围,即秒的个位和分的个位为0-9,十位为0-5;当小时的十位为0-1时,其个位0-9,当十位为2时,其个位0-3。
3.2 系统总体框图
图3.1总体框图
3.3 Proteus电路图
图3.2Proteus电路图
3.4 各部分硬件介绍
1、数码管显示模块,P0^0~P0^7通过排阻控制数码管显示的数字,P2^0~P2^2通过74HC138进行位选。
连接图如下:
图3.3时钟显示模块
2、独立键盘模块,由三个按钮分别连接P3.2、P3.3、P3.4口作为外部中断0,外部中断1。
图3.4独立键盘模块
3、矩阵键盘模块,用4*4的按钮分别连接P1.0~P1.7口作为键盘输入端。
图3.5矩阵键盘模块
4、AT89C51简介:
AT89C51是一种带4K字节FLASH存储器(FPEROM—FlashProgrammableandErasableReadOnlyMemory)的低电压、高性能CMOS8位微处理器,俗称单片机。
AT89C2051是一种带2K字节闪存可编程可擦除只读存储器的单片机。
单片机的可擦除只读存储器可以反复擦除1000次。
该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。
由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的AT89C51是一种高效微控制器,AT89C2051是它的一种精简版本。
AT89C51单片机为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。
图3.5AT89C51
4 软件设计流程及描述
4.1 程序流程图
图4.1程序流程图
4.2函数模块及功能
1.delay(unintk)
{uninti,j,x;
for(x=1;x<=k;x++)
for(i=0;i<10;i++)
for(j=0;j<17;j++);
}
功能说明:
用于时间的延迟。
2.Scan_keyboard()
{
unsignedcharh_code,l_code,key_code;
P1=0xf0;
h_code=P1;
h_code=h_code&0xf0;
P1=0x0f;
l_code=P1;
l_code=l_code&0x0f;
key_code=h_code|l_code;
returnkey_code;
}
功能说明:
用于矩阵键盘的按键扫描,返回按键键值。
3.timer0_int(void)interrupt1
{count++;
if(count==14)
{ss--;
if(ss<0)
{
SS1--;
ss=9;
}
if(SS1<0)
{
mm--;
SS1=5;
}
if(mm<0)
{
MM1--;
mm=9;
}
if(MM1<0)
{
hh--;
MM1=5;
}
if(hh<0&&HH1>0)
{
HH1--;
hh=9;
}
if(HH1==0&&hh<0)
{
HH1=2;
hh=3;
}
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
count=0;
}
}
功能说明:
定时中断0,用于实现时间的跳动。
4.set()
{
unsignedcharkeynumber;
keynumber=Scan_keyboard();
if(keynumber!
=0xff)
{
switch(keynumber)
{
case0xe7:
//left
if(wh>0)
wh--;
break;
case0xd7:
//right
if(wh<5)
wh++;
break;
case0xeb:
//down
if(wh==0)
{if(HH1>0)
HH1--;
elseif(HH1==0&&hh<4)
HH1=2;
}
elseif(wh==1)
{
if(hh>0)
hh--;
elseif(hh==0&&HH1<2)
hh=9;
}
elseif(wh==2)
{
if(MM1>0)
MM1--;
elseif(MM1==0)
MM1=5;
}
elseif(wh==3)
{
if(mm>0)
mm--;
elseif(mm==0)
mm=9;
}
elseif(wh==4)
{
if(SS1>0)
SS1--;
elseif(SS1==0)
hh=5;
}
elseif(wh==5)
{
if(ss>0)
ss--;
elseif(ss==0)
ss=9;
}
break;
case0xed:
//up
if(wh==0)
{if(HH1==0||(HH1==1&&hh<3))
HH1++;
elseif(HH1==2)
HH1=0;
}
elseif(wh==1)
{if(hh<9)
hh++;
elseif(hh==9)
hh=0;
if(hh>3&&HH1==2)
hh=0;
}
elseif(wh==2)
{
if(MM1<5)
MM1++;
elseif(MM1==5)
MM1=0;
}
elseif(wh==3)
{
if(mm<9)
mm++;
elseif(mm==9)
mm=0;
}
elseif(wh==4)
{
if(SS1<5)
SS1++;
elseif(SS1==5)
SS1=0;
}
elseif(wh==5)
{
if(ss<9)
ss++;
elseif(ss==9)
ss=0;
}
break;
default:
break;
}
delay(200);
}
}
功能说明:
用于时间的设置,可选择要设置的位及数值得加减。
5.P3_3()
{
delay
(2);
P2=0x00;
if(wh==0)
P0=number[HH1]|0x80;
else
P0=number[HH1];
delay
(2);
P2=0x01;
if(wh==1)
P0=number[hh]|0x80;
else
P0=number[hh];
delay
(2);
P2=0x02;
P0=number[10];
delay
(2);
P2=0x03;
if(wh==2)
P0=number[MM1]|0x80;
else
P0=number[MM1];
delay
(2);
P2=0x04;
if(wh==3)
P0=number[mm]|0x80;
else
P0=number[mm];
delay
(2);
P2=0x05;
P0=number[10];
delay
(2);
P2=0x06;
if(wh==4)
P0=number[SS1]|0x80;
else
P0=number[SS1];
delay
(2);
P2=0x07;
if(wh==5)
P0=number[ss]|0x80;
else
P0=number[ss];
set();
}
功能说明:
外部中断1调用函数,停止计时等待设置时间并实时显示设置的时间及按键的判断。
6.P3_2()
{
TMOD=0x01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
EA=1;
TR0=1;
ET0=1;
while
(1)
{
delay
(2);
P2=0x00;
P0=number[HH1];
delay
(2);
P2=0x01;
P0=number[hh];
delay
(2);
P2=0x02;
P0=number[10];
delay
(2);
P2=0x03;
P0=number[MM1];
delay
(2);
P2=0x04;
P0=number[mm];
delay
(2);
P2=0x05;
P0=number[10];
delay
(2);
P2=0x06;
P0=number[SS1];
delay
(2);
P2=0x07;
P0=number[ss];
if(P33==0)
{
TR0=0;
while
(1)
{
P3_3();
if(P32==0)
P3_2();
}
}
}
}
功能说明:
外部中断0调用函数,计时开始并实时显示定时计数器跳变的时间及按键的判断。
5 功能实现(功能介绍+照片)
1、计时功能图:
图5.1计时功能
2、时间设置功能图:
图5.1时间设置功能
6 心得体会
通过本次课程设计让我更加了解了单片机各模块的功能,包括 数码管显示,4*4键盘,独立按键。
实验过程让我更加了解并进一步掌握了中断,定时计数,4*4键盘输入等程序编写。
以及掌握了通过Proteus构造自己所需要的外围电路,进行仿真实验。
通过此次课程设计,初步掌握了使单片机多个模块进行工作的原理和方法。
7 源程序
#include
typedefunsignedintunint;
unsignedcharh_code,l_code,key_code;
inti=0;
unsignedcharcodekey[]={0xee,0xde,0xbe,0x7e,0xed,0xdd,0xbd,0x7d,0xeb,0xdb,
0xbb,0x7b,0xe7,0xd7,0xb7,0x77};
unsignedcharcodenumber[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x40};
unsignedcharcodewhich[]={0x00,0x01,0x03,0x04,0x06,0x07};
unsignedintHH=0;hh=0;MM=0;mm=0;SS=0;ss=0;
sbitP32=P3^2;
//延迟函数
voiddelay(unintk)
{uninti,j,x;
for(x=1;x<=k;x++)
for(i=0;i<10;i++)
for(j=0;j<17;j++);
}
//按键扫描
unsignedcharScan_keyboard()
{
unsignedcharh_code,l_code,key_code;
P1=0xf0;
h_code=P1;
h_code=h_code&0xf0;
P1=0x0f;
l_code=P1;
l_code=l_code&0x0f;
key_code=h_code|l_code;
returnkey_code;
}
voidtimer0_int(void)interrupt1
{
ss++;
if(ss>9)
{
SS++;
ss=0;
}
if(SS>5)
{
mm++;
SS=0;
}
if(mm>9)
{
MM++;
mm=0;
}
if(MM>5)
{
hh++;
MM=0;
}
if(hh>9&&HH<2)
{
HH++;
hh=0;
}
if(HH==2&&hh>3)
{
HH=0;
hh=0;
}
TH0=0x3c;
TL0=0xb0;
}
voidP3_2()
{
TMOD=0x01;
TH0=0x3c;
TL0=0xb0;
EA=1;
TR0=1;
ET0=1;
while
(1)
{
intk=0;
delay
(2);
P2=0x00;
P0=number[5];
delay
(2);
P2=0x01;
P0=number[hh];
delay
(2);
P2=0x02;
P0=number[10];
delay
(2);
P2=0x03;
P0=number[MM];
delay
(2);
P2=0x04;
P0=number[mm];
delay
(2);
P2=0x05;
P0=number[10];
delay
(2);
P2=0x06;
P0=number[SS];
delay
(2);
P2=0x07;
P0=number[ss];
}
}
main()
{
unsignedcharkeynumber;
while
(1)
{intk=0;
delay
(2);
P2=0x02;
P0=number[10];
delay
(2);
P2=0x05;
P0=number[10];
for(;k<6;k++)
{
delay
(2);
P2=which[k];
P0=number[0];
}
//if(P32==0)
P3_2();
/*keynumber=Scan_keyboard();
if(keynumber!
=0xff)
{
switch(keynumber)
{
case0xee:
P2=0x07;P0=number[i++];break;
case0xde:
P2=0x07;P0=number[i--];break;
case0xbe:
P2=0x07;i=0;P0=number[i];break;
default:
break;
}
delay(150);
}
if(i>9)
i=0;
elseif(i<0)
i=9;*/
}
}
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 学位 论文 单片机 技术 课程设计 报告 数码管 电子 时钟
![提示](https://static.bingdoc.com/images/bang_tan.gif)