单片机电秒计数器Word下载.docx
《单片机电秒计数器Word下载.docx》由会员分享,可在线阅读,更多相关《单片机电秒计数器Word下载.docx(32页珍藏版)》请在冰豆网上搜索。
系统硬件电路是由主板电路组成。
主板电路包括单片机的最小系统,键盘矩阵电路和8个LED数码显示电路以及继电器电路,这部分电路已制成电路板。
通过单片机系统实现秒表计时功能,可以进行暂停计时、恢复计时、设定时间和清零等操作。
通过程序调试各个部分的功能,运用C语言编程,完成各功能模块,通过下载软件下载到单片机芯片中,最终实现电秒计时器功能。
关键词:
单片机;
键盘矩阵;
C语言编程
1绪论
1.1系统概述
1.1.1设计性质、目的、任务
《单片机系统设计》是在学习《模拟电子技术》、《数字电子技术》、《单片机原理及应用》等相关理论课程之后,所设置的重要的综合性实践教学环节,课程的任务是通过选题的设计、安装和调试,巩固已学的理论知识,综合应用所学知识,进行电子系统的设计,从而培养工程实践能力、创新能力,培养严肃认真的工作作风和科学态度。
通过查阅资料、选定方案、设计电路、安装调试、写报告等过程,得到一次科学研究工作的启蒙训练,也为以后利用单片机开发电子产品奠定坚实的基础。
1.2系统设计方案
本次实验要求设计秒计时器,课程设计分设计、制作和调试三个部分。
设计选题以单片机为核心,基本内容应包括单片机最小系统、键盘和LED显示电路,以及设计系统涉及的其他电路。
系统硬件电路由标准电路构成。
标准电路包括单片机最小系统、8个LED数码管电路和键盘电路以及继电器电路,这部分电路已制成电路板,可根据设计需要进行配置选用。
。
1.2.1系统设计原理框图
1.2.2仿真软件介绍
1.2.3Proteus简介
Proteus软件是来自英国Labcenterelectronics公司的EDA工具软件,Proteus软件有十多年的历史,在全球广泛使用,除了其具有和其它EDA工具一样的原理布图、PCB自动或人工布线及电路仿真的功能外,其革命性的功能是,他的电路仿真是互动的,针对微处理器的应用,还可以直接在基于原理图的虚拟原型上编程,并实现软件源码级的实时调试,如有显示及输出,还能看到运行后输入输出的效果,配合系统配置的虚拟仪器如示波器、逻辑分析仪等,您不需要别的,Proteus为您建立了完备的电子设计开发环境!
尤其重要的是ProteusLite可以完全免费,也可以花微不足道的费用注册达到更好的效果;
功能最强的Proteus专业版也非常便宜,人人用得起,对高校还有更多优惠。
Proteus组合了高级原理布图、混合模式SPICE仿真,PCB设计以及自动布线来实现一个完整的电子设计系统。
此系统受益于15年来的持续开发,被《电子世界》在其对PCB设计系统的比较文章中评为最好产品—“TheRoutetoPCBCAD”。
Proteus产品系列也包含了我们革命性的VSM技术,用户可以对基于微控制器的设计连同所有的周围电子器件一起仿真。
用户甚至可以实时采用诸如LED/LCD、键盘、RS232终端等动态外设模型来对设计进行交互仿真。
其功能模块:
—个易用而又功能强大的ISIS原理布图工具;
PROSPICE混合模型
SPICE仿真;
ARESPCB设计。
PROSPICE仿真器的一个扩展PROTEUSVSM:
便于包括所有相关的器件的基于微处理器设计的协同仿真。
此外,还可以结合微控制器软件使用动态的键盘,开关,按钮,LEDs甚至LCD显示CPU模型。
1.2.4KEILC51编译器简介
8051开发工具
KEILC51标准C编译器为8051微控制器的软件开发提供了C语言环境,同时保留了汇编代码高效,快速的特点。
C51编译器的功能不断增强,使你可以更加贴近CPU本身,及其它的衍生产品。
C51已被完全集成到uVision2的集成开发环境中,这个集成开发环境包含:
编译器,汇编器,实时操作系统,项目管理器,调试器。
uVision2IDE可为它们提供单一而灵活的开发环境。
uVision2集成开发环境
项目管理
工程(project)是由源文件、开发工具选项以及编程说明三部分组成的。
一个单一的uVision2工程能够产生一个或多个目标程序。
产生目标程序的源文件
构成“组”。
开发工具选项可以对应目标,组或单个文件。
uVision2包含一个器件数据库(devicedatabase),可以自动设置汇编器、编译器、连接定位器及调试器选项,来满足用户充分利用特定微控制器的要求。
此数据库包含:
片上存储器和外围设备的信息,扩展数据指针(extradatapointer)或者加速器(mathaccelerator)的特性。
uVision2可以为片外存储器产生必要的连接选项:
确定起始地址和规模。
集成功能
uVision2的强大功能有助于用户按期完工。
A.集成源极浏览器利用符号数据库使用户可以快速浏览源文件。
用详细的符号信息来优化用户变数存储器。
B.文件寻找功能:
在特定文件中执行全局文件搜索。
C.工具菜单:
允许在V2集成开发环境下启动用户功能。
D.可配置SVCS接口:
提供对版本控制系统的入口。
E.PC-LINT接口:
对应用程序代码进行深层语法分析。
F.Infineon的EasyCase接口:
集成块集代码产生。
G.Infineon的DAVE功能:
协助用户的CPU和外部程序。
DAVE工程可被直接输入
uVision2。
第三部分编辑器和调试器
源代码编辑器
uVision2编辑器包含了所有用户熟悉的特性。
彩色语法显像和文件辩识都对C源代码进行和优化。
可以在编辑器内调试程序,它能提供一种自然的调试环境,使你更快速地检查和修改程序。
2.2.3.2断点
uVision2允许用户在编辑时设置程序断点(甚至在源代码未经编译和汇编之前)。
用户启动V2调试器之后,断点即被激活。
断点可设置为条件表达式,变量或存储器访问,断点被触发后,调试器命令或调试功能即可执行。
在属性框(attributescolumn)中可以快速浏览断点设置情况和源程序行的位置。
代码覆盖率信息可以让你区分程序中已执行和未执行的部分。
调试函数语言
uVision2中,你可以编写或使用类似C的数语言进行调试。
A.内部函数:
如printf,memset,rand及其它功能的函数。
B.信号函数:
模拟产生CPU的模拟信号和脉冲信号(simulateanaloganddigitalinputstoCPU)。
C.用户函数:
扩展指令范围,合并重复动作。
变量和存储器
用户可以在编辑器中选中变呈来观察其取值。
双层窗口显示,可进行以下调整:
A.当前函数的局部变量
B.用户在两个不同watch窗口页面上的自定义变量C.堆栈调用(callstack)页面上的调用记录(树)(calltree)D.不同格式的四个存储区
C51编译器
KEILC51编译器在遵循ANSI标准的同时,为8051微控制器系列特别设计。
语言上的扩展能让用户使用应用中的所有资源。
存储器和特殊功能寄存器的存取
C51编译器可以实现对8051系列所有资源的操作。
SFR的存取由sfr和sbit两个关键字来提供。
变量可旋转到任一个地址空间。
用关键字-at-还能把变量放入固定的存储器存储模式(大,中,小)决定了变量的存储类型。
连接定位器支持的代码区可达32个,这就允许用户在原有64KROM的8015基础上扩展程序。
在V2的编译器和许多高性能仿真器中,可以支持应用程序的调试。
中断功能
C51允许用户使用C语言编写中断服务程序,快速进、出代码和寄存器区的转换功能使C语言中断功能更加高效。
可再入功能是用关键字来定义的。
多任务,中断或非中断的代码要求必须具备可再入功能。
灵活的指针
C51提供了灵活高效的指针。
通用指针用3个字节来存储存储器类型及目标地址,可以在8051的任意存储区内存取任何变量。
特殊指针在声明的同时已指定了存储器类型,指向某一特定的存储区域。
由于地址的存储只需1-2字节,因此,指针存取非常迅速。
2硬件电路设计
系统硬件电路由标准电路和自制电路两部分组成。
标准电路包括单片机最小系统、8个LED数码管电路和键盘电路,这部分电路已制成电路板,可根据设计需要进行配置选用。
自制电路需自行设计焊接,包含标准电路不具备的其他电路。
2.1单片机电路
2.1.1单片机电路板
单片机电路板电路框图如图2;
PROTEL绘制的原理图见附录2;
PROTEL绘制的电路排版图见附录1。
2.1.2单片机最小系统
该原理图包含单片机以及外部连接译码,锁存电路端口,其中的ALE,REST为高电平时用来启动ADC0809.P0口控制数码输出显示以及控制键盘的。
晶振采用12MHZ,该频率有利于提高串口的通信可靠性,同时又保证单片机有较高的运行速度。
2.1.3单片机的复位电路
复位电路
当开关断开的时候,VCC对电容充电,RESET端为低电平;
在开关闭合时电容放电,RESET端为高电平。
2.1.4显示译码电路
显示电路采用8位共阴极LED动态扫描显示,SN74HC273N输出所需字形,SN74HC273N选择字位。
在动态方式中,逐个地循环地点亮各位显示器。
如图所示:
数码管显示电路
显示译码电路部分由P0口输出显示包含:
图8:
显示译码电路
显示译码电路
利用芯片SN74HC273N以总线型控制数码管:
SN74HC273N是一个8D触发器,
其内部结构如图:
SN74HC273N内部结构图
2.1.5电路设计
硬件资源分配
数码管显示电路:
用P2口
键盘电路:
16个键--P0(0-3)
继电器部分
3软件设计
3.1设计任务
3.1.1基本任务
利用单片机系统设计电秒表计时器
3.2按键定义及显示标志
1.设置按键S13,当S13按下时,秒表计时停止,数码管显示当前数值,再次按下时恢计时。
2.当停止计时时,按下S14键,可以设置秒数,按键S1-S10分别对应数字0-9;
3.设置按键S15,当S15按下时,数码管显示为“99”,秒表从新开始计时。
3.3程序设计
3.3.1主程序框图
主程序框图
3.3.2正常显示
正常显示程序
#include<
reg52.h>
#include<
ABSACC.h>
#defineucharunsignedchar
#defineuintunsignedint
#defineFont_codeXBYTE[0xefff]//字符码写地址
#definereg_codeXBYTE[0xdfff]//字位码写地址
#definekey_addrXBYTE[0xf7ff]//读按键地址
bitx=0;
bity=0;
ucharkey_n;
uintm;
uints;
sbitP12=P1^0;
unsignedcharconstjian[];
unsignedcharconstdofly[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,
0x77,0x7c,0x39,0x5e,0x79,0x71};
//0-F
voiddelay(ucharx)
{
uchari;
while(x--)
for(i=0;
i<
100;
i++);
}
voidmain(void)
uintp,t,l;
RCAP2H=0x10;
RCAP2L=0x00;
m=99;
while
(1)
{
get_key();
if(key_n==14)
m=99;
}
if(key_n==13)
if((s%2)!
=0)
{
x=1;
y=0;
}
if(key_n==12)
delay(3);
if(key_n==12)
if((s%2)==0)
TR2=1;
ET2=1;
EA=1;
}
TR2=0;
ET2=0;
EA=0;
}
if(m==0)
p=m/10;
t=m%10;
Font_code=dofly[p];
reg_code=0x20;
delay(10);
Font_code=dofly[t];
reg_code=0x40;
timer2()interrupt5
staticuchart;
TF2=0;
t++;
if(t==10)
t=0;
if(m!
m--;
3.3.3按键判断
a.按13--数码管显示停止
b.按下S14键,可以设置秒数,按键S1-S10分别对应数字0-9;
c.按键S15,当S15按下时,数码管显示为“99”,秒表从新开始计时。
按键程序:
voidget_key(void)
{
uchartemp;
Font_code=0x00;
reg_code=0xfe;
temp=key_addr&
0x0f;
//第一列
if(temp==0x0e)
{delay(200);
key_n=0;
if((x==1)&
&
(y==0))
{m=m%10;
y=1;
}
else
{m=(m/10)*10;
y=0;
if(temp==0x0d)
key_n=4;
if((x==1)&
(y==0))
{m=m%10+40;
{m=(m/10)*10+4;
if(temp==0x0b)
key_n=8;
{m=m%10+80;
{m=(m/10)*10+8;
if(temp==0x07)
key_n=12;
s++;
x=0;
y=0;
reg_code=0xfd;
//第二列
if(temp==0x0e)
key_n=1;
{m=m%10+10;
{m=(m/10)*10+1;
key_n=5;
{m=m%10+50;
{m=(m/10)*10+5;
key_n=9;
{m=m%10+90;
{m=(m/10)*10+9;
if(temp==0x07)key_n=13;
reg_code=0xfb;
//第三列
key_n=2;
{m=m%10+20;
{m=(m/10)*10+2;
key_n=6;
{m=m%10+60;
{m=(m/10)*10+6;
if(temp==0x0b)key_n=10;
if(temp==0x07)key_n=14;
reg_code=0xf7;
//第四列
{m=m%10+30;
{m=(m/10)*10+3;
{m=m%10+70;
{m=(m/10)*10+7;
if(temp==0x0b)key_n=11;
key_n=15;
4系统调试
系统调试包括硬件调试和软件调试两部分,介绍一下我在这两方面遇到一些问题,以及如何解决的。
4.1硬件部分
硬件焊接
在焊接过程中单独的排针忘记焊上,并且在焊接芯片座得过程中出现了方向错误,导致在插芯片的过程出现了倒插的现象出现。
4.2软件部分
由于C语言对自己来说并不擅长,没有真正掌握,所以在编程时编写不出程序。
但是,通过去图书馆找资料,翻阅书籍,以及在课堂上通过老师的讲解,让自己对C语言基本掌握,平时也对编写一些简单的编程来锻炼自己,让自己对C语言有了进一步的了解。
最后,通过程序调试各个部分的功能,完成各功能模块,实现电秒计时器。
5总结
三周的单片机课程设计,重新对单片机及C语言进行了运用,从而让我在单片机的硬件结构和软件设计方法上有了更进一步的理解和提高。
此次课程设计,让我对数码管动态显示原理使用方法有了详细的了解。
并且学会用C语言编程对单片机进行开发。
熟悉了各个功能模块的编程思想并学会加以应用。
在提高了自己焊接水平的同时,对单片机的工作原理及应用有了更深一步的了解。
本次课程设计比较顺利的完成了,这些离不开老师的指导和同学的互相帮助。
让我的水平有了很大的提升。
参考文献:
1、胡汉才,《单片机原理及其接口技术》(2版),清华大学出版社
2、单片机实验指导书
3、张毅刚,彭喜元,孟升卫,刘兆庆MCS-51单片机实用子程序设计(第二版)哈尔滨工业大学出版社2003年
4、孙育才,《MCS-51系列单片微型计算机及其应用》,东南大学出版社
5、曹巧媛,《单片机原理及应用——教学、实践、设计指导》,电子工业出版社
6、谢自美,《电子线路设计·
实验·
测试》(2版),华中科技大学出版社
7、求是科技单片机通信技术与工程实践人民邮电出版社2005年
附录
附录一单片机印刷电路板原理图
附录二单片机印刷电路板布线图
附录三元件清单
单片机主板
型号
元件号
数量
0.01μF
电容
C21,C22
2
0.1μF
C2,C3,C4,C5,C6,C7,C8,C9,C10,C17,C19,C25,C80,C81
14
1K
电阻
R1,R2,R4,R6,R7,R9,R10,R11,R12,R16,R17,R18,R19,R23,R28,R37,R39,R40,R41,R42,R43,R44,R45,R46,R47,R51,R53,R82,R85
29
1N4148
二极管
D1,D2,D3
3
1N4729
稳压二极管
D82,D83
2K
R31,R36
2.2K
R99
1
4.7K
9针排阻
RES2
4.7Kdon'
tfitit
不焊接
RES1
4.7μF
C23
10K
R5,R13,R21,R30,R35,