基于51单片机的电子秒
实训报告(含有程序和图)
目:基于AT89C51单片机的电子秒表
的设计与制作
目录
1 单片机版图及模块简介 ............................................................................................................... 1
1.1 LED点阵屏,8*8点阵, ................................................................................................. 2
1.2 单片机以及LED数码管显示 ........................................................................................... 2
1.3 EEPROM模块时钟模块 ...................................................................................................... 3
1.4 串口通信 ........................................................................................................................... 4
1.5 电源模块 ........................................................................................................................... 5
下载线接口、蜂鸣器、按键模块 ................................................................................... 5 1.6
2 本项目组的设计 ........................................................................................................................... 6
2.1 实验项目及要求 ............................................................................................................... 6
2.1.1 项目原理及完成的功能 ....................................................................................... 6
2.1.2 模块框图 ............................................................................................................... 7
2.2
图的绘制 ................................................................................................................... 9
2.1.2 元件的选取及元件功能简介 ............................................................................... 9
2.2.2 proteus电路图及连线原因 .............................................................................. 10
2.3 程序的编写 ..................................................................................................................... 12
2.3.1 程序框图,流程, ............................................................................................. 12
2.3.2 keilc的使用步骤 .............................................................................................. 12 3 印刷板的焊接及流程 ................................................................................................................. 15 4 调试及遭遇的问题解决方法 ..................................................................................................... 16 5 总结体会..................................................................................................................................... 16
6 附录............................................................................................................................................. 17
6.1程序代码.......................................................................................................................... 17
内容提要:本次实训通过电子秒表的设计与制作,学到了单片机最小系统的概念与设计,对单片机中断、定时等功能模块有了进一步的了解,并利用这个实力对单片机的编程方法有了一定程度的深入了解,并对51单片机有了深入的了解。
关键字:单片机、定时、中断、数码管显示
单片机版图及模块简介
1.1 LED点阵屏,8*8点阵,
LED显示屏是由LED发光二极管以点阵的形式组合而成的。以64个发光二极管排成8*8的矩阵形式~由于具有多个LED而只适用于动态
扫描方式~相当于行列都是公共端~无共阴或
共阳。
1.2 单片机以及LED数码管显示
89c51是一个40引脚的芯片~其中继承了运算器、控制器、存储器~
2
是一个高度集成的芯片~可将编写编译后的程序下载到芯片中去~实现某一功能。
n个LED数码管可以构成n位LED显示器~有n根位选线,即公共端,和8n跟段选线。LED显示器有静态显示和动态显示两种方式。该系统中采用8位的动态数码显示~控制数码显示的数据由两部分组成~一部分为笔段亮灭控制的信号输入由‚A B C D E F G H?端口输入~而控制位显示的控制信号由‚S1 S2 S3 S4 S5 S6
S8?端口输入~同时该动态数码显示采用共阳数码管,具 S7
体的电路原理图如图所示
1.3 EEPROM模块时钟模块
EEPROM是可擦可写存储器~可以对时钟模块的数据修改。 时钟模块采用的是DS1302芯片~内含一个实时时钟/日历逻辑~通过简单的串行接口与单片机进行通信~具有能计算2100年之前的秒、分、时、日、日期、星期、月和年的能力~还有闰年调整的能力~按
3
秒刷新
1.4 串口通信
在PC机内接有EIA-TTL的电平转换和RS-232C连接器~称为COM口。由于单片机的串行发送线TXD和接收线RXD是TTL电平~而PC机的COM1和COM2等的RS-232C连接器是EIA电平~因此单片机需要加接MAX232芯片~通过串行电缆线和PC机相连。
4
1.5 电源模块
电源模块为系统板上其它模块提供,5V电源~电源输入有两种方式~一种为交直流电源从电源插座输入~输入的电压要求~直流输入应大于7.5V~交流输入应大于5V~通过7805三端稳压器得到5V的直流电源供给系统其它模块工作~另一种为从USB接口获取,5V电源~只要用相应配套的USB线从电脑主机获取,5V直流电源~在电源模块中加有保护电路~即电路中有短路~不会对7805三端稳压 器及电脑主机电源有损害:
1.6 下载线接口、蜂鸣器、按键模块
该模块完成源程序代码下载到AT89S51或者是AT89S52芯片中~它需要和微机上的ISP下载器软件配合使用来完成这样的功能。具体的电
路原理图如
图所示:
声音的频谱
范围约在几
十到几千赫
兹~若能利
5
用程序来控制单片机某个口线的‚高?电平或低电平~则在该口线上就能产生一定频率的矩形波~接上喇叭就能发出一定频率的声音~若再利用延时程序控制‚高?‚低?电平的持续时间~就能改变输出频率~从而改变音调~使喇叭发出不同的声音。如图
0 K1 K2 K3?端口输出~具体的电路原理图如开关控制信号由‚K
图所示
2 本项目组的设计
2.1 实验项目及要求
2.1.1 项目原理及完成的功能
1. 系统功能
:
此次实训设计的电子秒表可以实现以下功能:
用开关K0实现秒表的启动~用开关K1实现秒表的数据保存~用开关K2实现秒表的数据的翻页查看~用开关K3实现秒表的停止,将数据显示在数码管上~供使用者数取。
2(系统分析与设计
上述功能只要涉及到单片机定时器、键盘和LED的使用方法. 此设计采用AT89C51单片机为核心控制元件~结合数码管、三极管、发光二极管等器件构成一个显示值达99.99的电子秒表。利用了单片机的延时电路、按键复位电路、定时中断等电路~实现了电子秒表的启动、保存、翻页查看、停止的功能和数码管的动态显示的功能。
6
2.1.2 模块框图
本次实训电子秒表所使用到的模块
1( 按键模块
:stopK0:start启动~K1:save保存数据~K2:look查看数据~K3停止,将四个按键与P1.0、P1.1、P1.2和P1.3想接。通过扫描按键~读取按键实现四个功能的控制。
2(AT89C51单片机与数码管的显示模块
该部分由两个四段的共阳极LED 数码管组成~用来显示秒表的秒值~数码管的使能端接到P2.4、P2.5、P2.6和P2.7上~其余8个引脚分别单片机P1口相连~根据单片机引脚与数码管的连接关系,可以列出显示不同数字的段选码。从而准确的输出秒表的正确秒值和保存的数据秒值。
7
3(时钟模块
单片机必须在时钟的驱动下才能工作.在单片机内部有一个时钟振荡电路,只需要外接一个振荡源就能产生一定的时钟信号送到单片机内部的各个单元, 外接晶体以及电容C1 和C2 构成并联谐振电路接在放大器的反馈回路中~
单片机的工作速度。
一般选用石英晶体振荡器。此电路在加电大约延迟10ms后振荡器起振,在XTAL2引脚产生幅度为3V左右的正弦波时钟信号,其振荡频率主要由石英晶振的频率确定。电路中两个电容 C1,C2的作用有两个:一是帮助振荡器起振;二是对振荡器的频率进行微调。电容的大小会影响振荡器频率的高低、振荡器的稳定性、起振的快速性和温度的稳定性~晶体频率可在1. 2MHz,12MHz 之间任选~电容C1 和C2 的典型值在20pF,100pF 之间选择。C1,C2的典型值为30PF。
4(复位模块
89S52的复位输入引脚RST 为89S52提供了初始化的手段~可以使程序从指定处开始执行~在89S52的时钟电路工作后~只要RST 引
8
脚上出现超过两个机器周期以上的高电平时~即可产生复位的操作。只要RST 保持高电平~则单片机循环复位。只有当RST 由高电平变低电平以后~89S52才从0000H 地址开始执行程序。本系统采用按键复位方式的复位电路。如图
2.2 电路图的绘制
2.1.2 元件的选取及元件功能简介
AT89C51,如下图,
89c51是一个40引脚的芯片~其中继承了运算器、控制器、存储器~是一个高度集成的芯片~可将编写编译后的程序下载到芯片中去~实现某一功能。
LED数码管,如下图,
9
LED数码管采用的是有发光二极管按一定的结构组合起来的显示器件。本次实训采用的是共阳极的方式。A—G因脚输入不同的二进制编码可显示不同的数字。而且本次实训采用的是软件破译方式~通过译码程序来得到要显示的数字的字段码。
三极管,如下图,
Q7Q6Q5Q49013901390139013
三极管在此与P2.4---P2.7相连~起到位选的作用。 排阻,如下图,
RN1 11621531441351261171089
1K
2.2.2 proteus电路图及连线原因
电子秒表的电路图
10
U1:ARN1116218A0Y0215416A1Y1314614A2Y2413812A3Y3 512R106111OE7101k74LS24489U1:B1K119A0Y0137A1Y1155A2Y2173A3Y319OE74LS244
Q7Q6Q5Q49013901390139013C3C230nF30nFX1U2RN2981939XTAL1P0.0/AD010738P0.1/AD1CRYSTAL11637R7R6R5R4P0.2/AD212518361K1K1K1KXTAL2P0.3/AD313435P0.4/AD414334P0.5/AD5C115233P0.6/AD6161932RSTP0.7/AD72110uF10KP2.0/A822P2.1/A923P2.2/A10R82924PSENP2.3/A113025ALEP2.4/A12103126EAP2.5/A1327P2.6/A1428P2.7/A15110P1.0P3.0/RXD211P1.1P3.1/TXD312D4D3D2D1P1.2P3.2/INT0413P1.3P3.3/INT11N41481N41481N41481N4148514P1.4P3.4/T0615P1.5P3.5/T1716P1.6P3.6/WR817P1.7P3.7/RDAT89C51K0K1K2K3
如图:P0.0——P0.7作为数码管显示的输入信号~作为数码管A——G以及DP的输入端~通过软件破译的方式并根据共阳极的数码管成功显示数字~同时破译的数字为
Uchar code BCD_7[11]={0x02,0x9e,0xa0,0x88,
0x1c,0x48,0x40,0x9a,0x00,0x08, 0xff};// 0, 1, 2, 3~4~5~6~7~8~9~灭
P2.4——P2.7作为位选信号~与数码管的1~2~3~4相连~同事结合三极管的驱动完成数码管的位选。
P1.0——P1.3与K0~K1~K2,K3四个开关相连~同时结合程序的键盘扫描功能实现开关的控制功能。P1口可以实现I/O输入输出。
11
2.3 程序的编写
2.3.1 程序框图,流程,
开始
定时器计数器2初始
化
显示缓冲区初始化
开中断
显示 键盘扫描 显示
N
是否有键盘输入,
Y
键号送k
Y
定时计数器2中断 判断是否为start键
N Y
停止计时 判断是否为stop键
N Y 开始 设置堆栈指针 8279芯片初始化 定时器/计数器1初始化 显示缓冲区初始化 开中断 键盘扫描 N 是否有键按下 Y 键号送A累加器 Y 判是否为C键 调时钟清零子程序 N 将数据保存 Y 判是否为A键 调启动计时子程序 N Y 调停止计时子程序 判是否为D键 N Y 调设置时钟初值子程序 判是否为B键 N 显示 开始 判断是否为save键 设置堆栈指针 8279芯片初始化 定时器/计数器1初始化 显示缓冲区初始化 开中断 键盘扫描 N 是否有键按下 Y 键号送A累加器 Y 判是否为C键 调时钟清零子程序 N Y 判是否为A键 调启动计时子程序 N Y 调停止计时子程序 判是否为D键 N Y 调设置时钟初值子程序 判是否为B键 N 显示 N Y
停止后查看数据 判断是否为look键
N 2.3.2 keilc的使用步骤
打开桌面上的Keil软件: ,1,新建项目文件。点击Project 菜单~选择弹出的下拉式菜单中
12
的New Project。在‚文件名?中输入您的第一个C 程序项目名称~ ‚*****.uv2?。‚保存?后的文件扩展名为uv2~这是KEIL uVision2
项目文件扩展名~以后可以直接点击此文件以打开先前做的项目。
2,选择所要的单片机~常用Ateml 公司的AT89C51。
3,在项目中创建新的程序文件。点击新建文件的快捷按钮~出现一个新的文字编辑窗口~这个操作也可以通过菜单File,New 或快捷键Ctrl+N 来实现。好了~现在可以编写程序了。
4,点击保存新建的程序~*****.c~保存在项目所在的目录中~这时会发现程序单词有了不同的颜色~说明KEIL的C 语法检查生效了。
13
5,将程序文件加到项目中。在屏幕左边的Source Group1 文件夹图标上右击弹出菜单~在这里可以做在项目中增加减少文件等操作。选‚Add File to Group ‘Source Group 1’?弹出文件窗口~选择刚刚保存的文件~按ADD 按钮~关闭文件窗~程序文件加到项目中。这时在Source Group1 文件夹图标左边出现了一个小+号说明~文件组中有了文件~点击它可以展开查看。
6,设定创建HEX文件选项。
上一步建立了单片机C语言项目~但为了让编译好的程序能通过编程器写入51芯片中~要先用编译器生成HEX文件。HEX文件格式是Intel公司提出的按地址排列的数据信息,数据宽度为字节,所有数据使用16进制数字表示, 常用来保存单片机或其他处理器的目标程序代码。
14
它保存物理程序存储区中的目标代码映象。一般的编程器都支持这种格式。我们先来打开项目~打开它的所在目录~找到****.Uv2的文件就可以打开先前的项目了。然后右击项目文件夹~弹出项目功能菜单~选Options for Target’Target1’,弹出项目选项设置窗口~同样先选中项目文件夹图标~这时在Project菜单中也有一样的菜单可选。打开项目选项窗口~转到Output选项页。设定:1选择编译输出的路径~2编译输出生成的文件名~3决定是否要创建HEX文件~选中3就可以输出HEX文件到指定的路径中。
7,编译运行。
8,查错并直至无错误。
3 印刷板的焊接及流程
在老师的指导下~首先按照老师发给每个人的实验指导熟悉这次实训的器件以及各个应用软件及硬件设施。按照各个元器件的摆放位置和
15
摆放标准~将印刷版的各个位置弄清楚之后~将元器件一一焊接好~并检查是否正确焊接。
流程:熟悉印刷版的各个方面的情况~将元器件的情况了解~首先焊接印刷版~然后全部焊接完后~将测试程序下载到芯片上测试印刷版时候有问题~有问题再重新检查直到没有问题了。 然后制作USB下载板~先进行焊接然后再测试。将印刷版和USB下载板连接起来。然后就是将编写的程序下载到实验板上就行调试了。
4 调试及遭遇的问题解决方法
将我们项目组所编写的电子秒表的程序下载到芯片中~调试程序。 遇到的问题就是数码管不能正确的显示。没有正确编写数码管的显示程序~将小数点的显示位置改正~同时实验板的数码管采用的是共阳的数码管显示~因为0亮1不亮~必须严格按照这个来编写程序。最后我们终于克服了这个困难~让数码管的后四个显示00.00—99.99,完成了实训的项目。反复进行测试~对四个按键分别进行测试~检查是否完成预定的四个功能:启动、保存数据、查看数据、停止。是否实现了定时/计数器中断。
5 总结体会
通过这个为期三个周的单片机实训使我对AT89C51单片机有了更一层深入的了解~同时加强了动手实践能力。了解了印刷版的组成及各
16
个器件的知识。在这次实训中虽然也遇到了各种困难~但是一个组的人员一起克服了~大家一起才能完成项目~同时结合实践进一步巩固了课本上的理论知识~将学习的理论基础知识又加深了一遍~同时认识到我们所学的知识还是远远不够的~我们需要不断学习提升自己的能力~不仅仅是动手能力~还有编程能力和考虑问题的全面性方面。 6 附录
6.1程序代码
#include "reg52.h"
#define uchar unsigned char #define uint unsigned int //unsigned char key_times; #define start 0xfe #define save 0xfd #define look 0xfb #define stop 0xf7
uint times_10ms;
idata uint s[12];
uchar s_ptr;
17
uchar d[4]; void delay()
{uchar i,j;
for(i=0;i<10;i++)
for(j=0;j<50;j++); }
void display(uint t) {uchar i;
uchar code BCD_7[11]={0x02,0x9e,0xa0,0x88, // 0, 1, 2, 3
0x1c,0x48,0x40,0x9a,0x00,0x08, 0xff};
for(;t>0;t--)
{for(i=0;i<4;i++)
{P0=BCD_7[d[i]];
if(i!=2) P0|=0x01;
P2|=0x80>>i;
delay();
P2&=0x00;
}
}
}
uchar Read_key()
18
{uchar k;
P1=0xff;
k=P1;
if(k==0xff)return 0xff;
else
{delay();
k=P1;
if(k==0xff)return 0xff;
else return k;
}
}
main()
{uchar i,k;
uint tem;
uchar run_sign;
TH2=RCAP2H=(65536-10000)/256;
TL2=RCAP2L=(65536-10000)%256;
19
EA=1;
ET2=1;
EX0=0;
times_10ms=0;
s_ptr=0;
for(i=0;i<12;i++)s[i]=0;
for(i=0;i<4;i++)d[i]=0;
while(1)
{k=Read_key();
if(k!=0xff)
{switch(k)
{case start:
run_sign=1;
TR2=1;
break;
20
case save:
s[s_ptr++]=tem;
display(5);
while(k!=0xff)
{k=Read_key();
display(1);
}
display(5);
break;
case look:
tem=s[s_ptr++];
d[3]=tem/1000;
d[2]=tem/100%10;
d[1]=tem/10%10;
d[0]=tem%10;
display(2);
while(k!=0xff)
21
{k=Read_key();
display(1);
}
display(5);
break;
case stop:
TR2=0;
s_ptr=0;
run_sign=0;
break;
default:
break;
}
}
if(run_sign)
{tem=times_10ms;
if(tem>=9999)
{
times_10ms=0;
}
22
d[3]=tem/1000;
d[2]=tem/100%10;
d[1]=tem/10%10;
d[0]=tem%10;
}
display(1);
}
}
void t2_overFlow(void) interrupt 5 using 3
{if(TF2)
{TF2=0;
times_10ms++;
}
EXF2=0;
}
23