下载此文档

单片机电子秒表设计(Proteus).docx


文档分类:通信/电子 | 页数:约12页 举报非法文档有奖
1/12
下载提示
  • 1.该资料是网友上传的,本站提供全文预览,预览什么样,下载就什么样。
  • 2.下载该文档所得收入归上传者、原创者。
  • 3.下载的文档,不会出现我们的网址水印。
1/12 下载此文档
文档列表 文档介绍
简易秒表设计单片机硬件设计结课论文专业:计算机科学与技术学生姓名:学号:1307064248完成时间:2019年8月25日目录一、简述 1二、主要工具 1三、线路连接图(ISIS7Professional环境) 1四、实现细则 1显示电路 1定时计数器 2五、程序 2六、模拟运行截图 7七、心得体会 7一、简述此秒表主要实现的功能是利用单片机内部定时计数器实现计时,然后通过LED组件显示出来。因为这次设计时使用的是并排的6个数字显示LED,所以在计时时精确到10ms,最大即时59分59秒99。实现过程中的主要部分包含显示和定时。因为该LED与单片机相接的引脚只有14个,其中8个接在P0口上实现字形的显示,剩下的6个接在P2口用于选择6个数字型LED中的一个显示,所以每次只能显示一个数字。要实现多个数字的显示需要快速显示每个LED,利用人的视觉差来实现多个数字同时显示。计时只用到定时计数器T1(因为需要配合中断优先级,故没有使用T0,下文会详细讲到)。另外还用到了两个按键,和两个LED灯(红、绿)。按键用于控制开始计时和暂停、重置,LED灯用于指示当前工作状态。二、主要工具KeiluVision3,ISIS7Professional,AT89C51基础组件(试验箱)。三、线路连接图(ISIS7Professional环境)四、实现细则显示电路数字型LED的实现原理为每个单元(共6个单元)含8个发光独立的LED灯,其中7个构成“8”字形,剩下的一个为小数点。6个单元的每个相同位置引脚并联起来,最后通过8根线连接到单片机的P0口。因此如果不把另外6根线连接上,每次通过P0口输出值时6个显示单元都会显示相同的图形(数字)。LED单元组中另外6根引脚连接到单片机上,实现“按位显示”,并且是低电平选择,例如“111101”对应显示的是从右到左的第5个LED单元。为了同时显示多个数字,需要快速地将六个单元中的内容轮流显示,重复这个过程直到产生中断,即定时中断和外部中断。为了配合人的视觉误差,我在程序中的实现方式是:每个单元显示2ms,然后熄灭1ms。具体代码详见(五、程序)。定时计数器定时计数器T1的初值是D8F0H,对应计时时间是10ms,即该秒表能显示计时的最小单位。当产生中断时程序显示10ms的那一个LED单元会不断的重复显示0~9,而程序会根据该值来判断是否需要进位,依次类推,每一位变化时程序都会判断高位显示的数字是否需要变化。简易秒表上有两个按键,分别表示开始/暂停/继续当前计时和重置秒表,在按下第一个按键时会触发INT0中断,随即通过改变程序中的一个参数来改变程序的走向。例如当在初始状态下按下开始按钮,系统会将k1_count赋值为1,表示为需要秒表开始运行,当程序检测到该值变化时会立即执行该操作。另外一个按键的实现原理与一致。因此在设置中断的时候计时器中断优先级最低,为的是两个外部中断能打断计时。五、程序#include<>unsignedinttable[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//0~9数字字样对应十六进制数unsignedintplace[]={0x1f,0x2f,0x37,0x3b,0x3d,0x3e};//对应六个LED位置0~5unsignedintdoc[]={0x3f,0x3f,0x3f,0x3f,0x3f,0x3f};//存放每个位置需要显示的数unsignedchart=0;unsignedintcount[6]={0,0,0,0,0,0}; //用于每个位的计数,实现满10进位或者满6进位unsignedintk1_count=0; //对按键k1计数,用于识别按下按键所需要进行的操作//各个函数的声明voidreset();voidinitDoc();voidinitCount();voidsuspend();voidinit();voidtimerRun();voiddelay1ms(void) //延迟一毫秒{ unsignedchara,b; for(a=199;a>0;a--) for(b=1;b>0;b--);}voidinitDoc() //初始化doc,使每个LED都初始显示数字0{ unsignedinti; for(i=0;i<6;i++) doc[i]=table[0];}voidinitCount() //初始化计数器,每一位初始值为0{ unsignedinti; for(i=0;i<6;i++) count[i]=0;}voiddisplay() //将当前doc中存放的数组显示出来{ unsignedinti; for(i=0;i<6;i++) { P0=doc[i]; P2=p

单片机电子秒表设计(Proteus) 来自淘豆网www.taodocs.com转载请标明出处.

非法内容举报中心
文档信息
  • 页数12
  • 收藏数0 收藏
  • 顶次数0
  • 上传人phl806
  • 文件大小41 KB
  • 时间2019-08-25