开题报告毛伟.docx

上传人:b****3 文档编号:10474641 上传时间:2023-05-26 格式:DOCX 页数:29 大小:80.85KB
下载 相关 举报
开题报告毛伟.docx_第1页
第1页 / 共29页
开题报告毛伟.docx_第2页
第2页 / 共29页
开题报告毛伟.docx_第3页
第3页 / 共29页
开题报告毛伟.docx_第4页
第4页 / 共29页
开题报告毛伟.docx_第5页
第5页 / 共29页
开题报告毛伟.docx_第6页
第6页 / 共29页
开题报告毛伟.docx_第7页
第7页 / 共29页
开题报告毛伟.docx_第8页
第8页 / 共29页
开题报告毛伟.docx_第9页
第9页 / 共29页
开题报告毛伟.docx_第10页
第10页 / 共29页
开题报告毛伟.docx_第11页
第11页 / 共29页
开题报告毛伟.docx_第12页
第12页 / 共29页
开题报告毛伟.docx_第13页
第13页 / 共29页
开题报告毛伟.docx_第14页
第14页 / 共29页
开题报告毛伟.docx_第15页
第15页 / 共29页
开题报告毛伟.docx_第16页
第16页 / 共29页
开题报告毛伟.docx_第17页
第17页 / 共29页
开题报告毛伟.docx_第18页
第18页 / 共29页
开题报告毛伟.docx_第19页
第19页 / 共29页
开题报告毛伟.docx_第20页
第20页 / 共29页
亲,该文档总共29页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

开题报告毛伟.docx

《开题报告毛伟.docx》由会员分享,可在线阅读,更多相关《开题报告毛伟.docx(29页珍藏版)》请在冰点文库上搜索。

开题报告毛伟.docx

开题报告毛伟

 

巴音郭楞职业技术学院

中职生毕业设计(论文)

设计(论文)题目:

数字电路时钟

系别:

电子信息工程学院

专业(方向):

电子

年级、班:

09高职电子

学生姓名:

毛伟

指导教师:

王庆红

 

2011年3月30日

 

巴音郭楞职业技术学院11届学生

毕业设计(论文)题目审批表

学院:

电子信息工程学院专业:

电子信息工程技术

班级:

09高职电子学生姓名:

毛伟

指导教师姓名

职称

设计(论文)题目

数字电电路时钟

选题内容及理由:

(200字左右)

一块单片机芯片就是一台计算机,由于单片机以其集成度高、体积小、可靠性高、控制功能强、低电压、低功耗等特点使它应用于智能仪器仪表、机电一体化、实时程控、人类生活中。

由此可见掌握单片机的使用方法和利用单片机解决实际问题具有重要的意义。

本次设计根据AT89C51单片机系统扩展的基本原理和方法、常用总线标准和典型接口电路的应用,结合本次设计的题目,通过单片机芯片引脚的分析,实现对数码管的位选和段选,最后通过PNP三极管的驱动LED动态显示的方式完成设计任务,设计论文中附有电路图、程序清单、各数据存储单元的所在地址和输入输出口对应表。

因水平有限,难免有疏落不足之处,恳请老师和同学能给予指正。

指导教师意见:

 

指导教师签字:

年月日

教研室审查意见:

 

主任签字:

年月日

巴音郭楞职业技术学院毕业设计(论文)开题报告

院系

电子信息工程学院

所学专业

电子信息工程技术

学生学号

2009004106

学生姓名

毛伟

班级名称

09高职电子

任务起止日期

2011年03月09日至2011年月

课题方向

电子技术

设计(论文)题目

LED数码管电子时钟

题目来源

教材,网络

题目类型

工程、设计型

论文型

综述型

其它

一、设计(论文)选题的依据(选题的目的和意义)

本次设计中的LED数码管电子时钟电路采用24小时制记时方式,本次设计采用AT89C51单片机的扩展芯片和6个PNP三极管做驱动,由三块LED数码管构成的显示系统,与传统的基于8/16位普通单片机的LED显示系统相比较,本系统在不显著地增加系统成本的情况下,可支持更多的LED数码管稳定显示。

设计采用AT98C51单片机,使用5V电源供电,并且在按键的作用下可以进行调时,调分,复位功能。

计时数据的更新在计算机C语言的驱动下每秒自动进行一次,但不需程序干预其输出状态。

二、设计(论文)的主要内容及预期目标

本次设计采用AT89C51单片机的扩展芯片和6个PNP三极管做驱动,由三块LED数码管构成的显示系统,与传统的基于8/16位普通单片机的LED显示系统相比较,本系统在不显著地增加系统成本的情况下,可支持更多的LED数码管稳定显示。

 

三、设计(论文)的主要方案(拟采用的方法、准备工作情况及主要措施)

 

四、设计(论文)工作进展安排

 

五、主要参考文献

见p3

六、指导老师意见

指导老师(签名)年月日

七、教研室意见:

 

主任签字:

年月日

 

目录

1        方案论证与比较………………………………………………………………………4

1.1   采样方法比较与选择……………………………………………………………4

1.2   单片机的构成……………………………………………………………………4

1.3   振荡器(晶振)特性………………………………………………………………5

1.4   芯片擦除………………………………………………………………………5

1.5   AT89C51单片机的引脚说明 …………………………………………………6

1.6   LED简介 ………………………………………………………………………8

 2    系统设计………………………………………………………………………………10

      

2.1  总体设计…………………………………………………………………………10

      2.2  电路设计…………………………………………………………………………11

2.2.1三极管接Vcc的限流电阻电路设计………………………………………11

2.2.2晶振负载电容电路设计……………………………………………………12

3  软件设计………………………………………………………………………………12

   

3.1程序流程图………………………………………………………………………13

   3.2程序分析…………………………………………………………………………13

 

4结论……………………………………………………………………………………16

 

1、方案论证与比较

1.1采样方法比较与选择

   方案一:

用6个1.5K的电阻配合6个PNP型的三极管对信号进行放大,通过1.5K的电阻接Vcc正5V电产生稳定上拉信号作为数码管的片选信号输入信号。

这样连接的话数码管的显示会很暗,看不清。

   方案二:

直接用3个1.5K的电阻并联接到Vcc然后在电阻的另一端分别接上6个PNP型的三极管,三个电阻并联的目的是为了减低电阻直接的分压,是数码管能显示的亮一点,同时还能起到对三极管的保护作用,三个1.5K的电阻并联后的电阻是0.5K。

   由于方案二,在制作材料上能达到节省材料,和在数码管显示效果上能加强,所以我们选择方案二作为电路的焊接电路。

1.2单片机的构成

 AT89C51单片机是在一块芯片中集成了CPU、RAM、ROM、定时器/计数器和多种功能的I/O线等一台计算机所需要的基本功能部件,AT89C51单片机单片机内包含下列几个部件:

(1)一个8位CPU;

(2)一个片内振荡器及时钟电路;

(3)4K字节ROM程序存储器;

(4)128字节RAM数据存储器;

(5)两个16位定时器/计数器;

(6)可寻址64K外部数据存储器和64K外部程序存储器空间的控制电路;

(7)32条可编程的I/O线(四个8位并行I/O端口);

(8)一个可编程全双工串行口;

(9)具有五个中断源、两个优先级嵌套中断结构。

其内部机构框图如图2.2所示:

   

          

 

 

 

1.3振荡器(晶振)特性

XTAL1(19脚)和XTAL2(18脚)分别为反向放大器的输入和输出,通过这两个引脚接上晶振,其频率为12.000MHz。

 

1.4芯片擦除

整个PEROM阵列和三个锁定位的电擦除可通过正确的控制信号组合,并保持ALE管脚处于低电平10ms来完成。

在芯片擦操作中,代码阵列全被写“1”且在任何非空存储字节被重复编程以前,该操作必须被执行。

此外,AT89C51单片机设有稳态逻辑,可以在低到零频率的条件下静态逻辑,支持两种软件可选的掉电模式。

在闲置模式下,CPU停止工作,但RAM,定时器,计数器,串口和中断系统仍在工作。

在掉电模式下,保存RAM的内容并且冻结振荡器,禁止所用其他芯片功能,直到下一个硬件复位为止。

为了满足一些应用系统的特殊要求,有时要进行一些系统的扩展设计以弥补单片机内部资源的不足。

单片机的扩展系统通过并行I/O接口或串行I/O接口做总线,在外部扩展程序存储器、数据存储器或输入/输出接口及其他功能部件以满足一些控制系统的特殊要求,AT89C51单片机的扩展系统结构如图2.3所示。

                   

1.5AT89C51单片机的引脚说明

AT89C51单片机采用40条引脚双列直插式器件,引脚除5V(40脚)和电源地(20脚)外,其功能分为时钟电路、控制信号、输入/输出三大部分,逻辑框图及引脚图分别如图2.4(a)(b)所示

AT89C51单片机的内部硬件结构中除了程序存储器由FPEROM取代了87C51单片机的EPROM外,其余部分完全相同,其管脚说明如下:

(1)VCC:

供电电压

(2)GND:

接地

(3)时钟电路

  XTAL1(19脚)——芯片内部振荡电路(单级反相放大器)输入端。

   XTAL2(18脚)——芯片内部振荡电路(单级反相放大器)输出端。

(4)控制信号

RST(9脚)复位信号:

时钟电路工作后,在此引脚上将出现两个机器周期的高电平,芯片内部进行初始复位,P0口~P3口输出高电平,将初值07H写入堆栈指针。

ALE(30脚)地址锁存信号:

当访问外部存储器时,P0口输出的低8位地址由ALE输出的控制信号锁存到片外地址锁存器,P0口输出地址低8位后,又能与片外存储器之间传送信息。

另外,ALE可驱动4个TTL门。

(29脚)片外程序存储器读选通:

低电平有效,作为程序存储器的读信号,输出负脉冲,将相应的存储单元的指令读出并送到P0口,可驱动8个TTL门。

/Vpp(30脚):

当为高电平且PC值小于0FFFH时,CPU执行内部程序存储器程序;当为低电平时,CPU仅执行外部程序存储器程序。

(5)I/O接口

P0口(P0.0~P0.7,39~32脚)三态双向口:

P0口结构包括一个输出锁存器、两个三态缓冲器、一个输出驱动电路和一个输出控制端。

P0口做地址/数据复用总线使用。

若从P0口输出地址数据信息,此时控制端为高电平,若从P0口输入数据指令信息时,引脚信号应从输入三态缓冲器进入地址总线,它可驱动8个TTL门。

P0~P3口上的“读-修改-写”功能,其操作是先将字节的全部8位数读入,再通过指令修改某些位,然后将新的数据写回到口锁存器中。

P1口(P1.0~P1.7,1~8脚)准双向口:

P1口做通用I/O接口使用,P1口的每一位口线能独立地作用于输入线,P1口可驱动4个TTL门。

P2口(P2.0~P2.7,21~28脚)通用I/O接口:

它做通用I/O接口使用时,是一个准双向口,此时转换开关MUX倒向左边,输出极与锁存器相连,引脚可作为用户I/O口线使用,输入/输出操作与P1口完全相同,P2口做地址总线使用。

当系统中接有外部存储器时,P2口用于输出高8位地址A8~A15,这时在CPU控制下,转换开关MUX倒向右边,接通内部地址总线。

P2口的口线状态取决于片内输出的地址信息,这些信息来源于PC、DPTR等。

在外接程序存储器中,由于访问外部存储器操作连续不断,P2口不断送出地址高8位。

AT89C51单片机的P2口一般只做地址总线使用,不做I/O接口直接连外部设备使用。

P3口(P3.0~P3.7,10~17脚)双功能口:

P3口做通用I/O接口使用,输出功能控制线为高电平,与非门的输出取决于锁存器的状态,此时锁存器Q端的状态与其引脚状态是一致的。

在这种情况下,P3口的结构和操作与P1口相同。

P3口第二功能是可作为系统具有控制功能的控制线,另外P3口可驱动4个LSTTL门电路。

P3口:

P3口管脚是8个带内部上拉电阻的双向I/O口,可接收输出4个TTL门电流。

当P3口写入“1”后,它们被内部上拉为高电平,并用作输入。

作为输入,由于外部下拉为低电平,P3口将输出电流,这是由于上拉的缘故。

P3口也可作为AT89C51的一些特殊功能口使用如:

P3.0RXD(串行输入口);

P3.1TXD(串行输出口);

P3.2/INT0(外部中断0);

P3.3/INT1(外部中断1);

P3.4T0(记时器0外部输入);

P3.5T1(记时器1外部输入);

P3.6/WR(外部数据存储器写选通);

P3.7/RD(外部数据存储器读选通);

 

1.6LED简介

LED数码管根据LED的接法不同分为共阴和共阳两类,了解LED的这些特性,对编程是很重要的,因为不同类型的数码管,除了它们的硬件电路有差异外,编程方法也是不同的。

图2.7(a)是共阴和共阳极数码管的内部电路图,它们的发光原理是一样的,只是它们的电源极性不同而已。

将多只LED的阴极连在一起即为共阴式,而将多只LED的阳极连在一起即为共阳式。

以共阴式为例,如把阴极接地,在相应段的阳极接上正电源,该段即会发光。

当然,LED的电流通常较小,一般均需在回路中接上限流电阻。

假如我们将"b"和"c"段接上正电源,其它端接地或悬空,那么"b"和"c"段发光,此时,数码管显示将显示数字“1”。

而将"a"、"b"、"d"、"e"和"g"段都接上正电源,其它引脚悬空,此时数码管将显示“2”。

其它数字的显示原理与此类同。

LED的7段数码管利用单只LED组合排列成“8”字型的数码管,分别引出它们的电极,点亮相应的点划来显示出0-9的数字。

在这次的设计中采用的均是共阴极的LED显示,当I/O口输出为高电平的时候,对应段就被点亮。

LED数码管的结构图如图2.7(b)所示。

                                     

这次设计的显示部分采用AT89C51单片机动态扫描完成, 在多数的应用场合中,我们并不希望使用多I/O端口的单片机,原则上是使用尽量少引脚的器件。

在没有富余端口的情况下,应通过优化设计程序和扩展电路达到预期的目的。

动态扫描的频率有一定的要求,频率太低,LED将出现闪烁现象。

如频率太高,由于每个LED点亮的时间太短,LED的亮度太低,肉眼无法看清,所以一般均取几个ms左右为宜,这就要求在编写程序时,选通某一位LED使其点亮并保持一定的时间,程序上常采用的是调用延时子程序。

LED显示电路

(1) 静态显示电路

LDE显示器工作在静态显示时,其公共阳极(或阴极)接VCC(或GND),一直处于显示有效状态,所以每一位的显示内容必须由锁存器加以锁存,显示各位相互独立。

(2)动态显示电路   

将所有位的段选线的同名端联在一起,由一个8位I/O口控制,形成段选线的多位复用。

而各位的公共阳极或公共阴极则分别由相应的I/O口线控制,实现各位的分时选通,即同一时刻只有被选通位是能显示相应的字符,而其他所有位都是熄灭的。

由于人眼有视觉暂留现象,只要每位显示间隔足够短,则会造成多位同时点亮的假象。

这就需要单片机不断地对显示进行控制,CPU需要不断地进行显示刷新.

 

2 系统设计

2.1 总体设计

数码管选中信号从P2口出来进过三极管的放大来到数码管的共阳极引脚,选中6个数码管中的其中一个;P1口出来是数码管的段选信号,通过对数码管的编码显示不同的数字进行显示。

本设计,设置了三个按键,一个调时,一个调分,还有一个复位

    

2.2 单元电路设计

2.2.1 三极管接Vcc的限流电阻电路设计

 

因为元器件的限制0.5k左右的电阻只有6个,通过三个1.5k的电阻并联接法得到大小为0.5k左右的电阻,接0.5k左右的电阻是为了限流,同时又不会使数码管的显示很暗。

2.2.2       晶振负载电容电路设计

 

 

晶体元件的负载电容是指在电路中跨接晶体两端的总的外界有效电容。

是指晶振要正常震荡所需要的电容。

一般外接电容,是为了使晶振两端的等效电容等于或接近负载电容。

要求高的场合还要考虑ic输入端的对地电容。

应用时一般在给出负载电容值附近调整可以得到精确频率。

此电容的大小主要影响负载谐振频率和等效负载谐振电阻。

 

       晶振的负载电容=[(Cd*Cg)/(Cd+Cg)]+Cic+△C式中Cd,Cg为分别接在晶振的两个脚上和对地的电容,Cic(集成电路内部电容)+△C(PCB上电容).就是说负载电容15pf的话,两边个接27pf的差不多了,一般a为6.5~13.5pF  

 

3 软件设计

主控制芯片为AT89C51,为了直观和易懂,所以采用c语言编程方便简单.

3.1  软件流程图如下:

        

     

 

 

3.2程序分析如下:

 

#include

#defineucharunsignedchar        //宏定义

#defineuintunsignedint

ucharcodedispcode[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff};//不带小数点控制显示什么内容

ucharcodedispcodedian[]={0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10,0xff};//显示小数点的数据显示表

//uchardispbitcode[]={0x81,0x82,0x84,0x88,0x90,0xa0};          //控制那个数码管亮npn

uchardispbitcode[]={0x5f,0x7e,0x7d,0x7b,0x77,0x6f};         //控制那个数码管亮pnp

uchardispbuf[6];          //中间变量

uchardispbitcnt,second,minite,hour;

uinttcnt;                     //计数

sbitk1=P3^0;              //复位           

sbitk2=P3^1;              //调分

sbitk3=P3^2;              //调时

 

voidkey(void);                   //按键子程序

voiddelay(uintz);        //延时子程序声明

voidinit();                   //初始化子程序

voiddisplay();                    //显示子程序

voidmain(void)

{

      init();

      while

(1)

   { 

             key();

             display();       //调用延时

   }

}

voiddisplay()              //显示子函数

{

      dispbuf[0]=dispcode[second%10];

      dispbuf[1]=dispcode[second/10];

      dispbuf[2]=dispcodedian[minite%10];

      dispbuf[3]=dispcode[minite/10];

      dispbuf[4]=dispcodedian[hour%10];

      dispbuf[5]=dispcode[hour/10];

      

      P2=dispbitcode[dispbitcnt];

      P1=dispbuf[dispbitcnt];      

   dispbitcnt++;

      if(dispbitcnt==6)

      {

             dispbitcnt=0;

      }

      delay(5); 

}

voidkey(void)                    //按键设置

{

      if(k1==0)             //复位

      {

             delay(5);       //延时5ms,实现判断时跳过不稳定时期,在稳定期判断。

             if(k1==0)

             {

                    second=0;

                    minite=0;

                    hour=12;

                    

             }

             while(k1==0);       

             delay(5);

             while(k1==0);

      }

      if(k2==0)  //调分

      {

             delay(5);

             if(k2==0)

             {

                    minite++;

                    if(minite==60)

                    {

                           minite=0;

                    }                  

             }

             while(k2==0);

             delay(5);

             while(k2==0);

      }

      if(k3==0)//调时

      {

             delay(5);

             if(k3==0)

             {

                    hour++;

                    if(hour==24)

                    {

                           hour=0;

                    }                  

             }

             while(k3==0);

             delay(5);

             while(k3==0);

      }   

}

 

voidtimer()interrupt1//中断程序控制时间的自动的累加

{

      

      TH0=(65536-5000)/256;

      TL0=(65536-5000)%256; 

      tcnt++;

      if(tcnt==200)        

      {

             tcnt=0;

             second++;

             if(second==60)

       {

                    second=0;

                    minite++;

                    if(minite==60)

           {

                           minite=0;

                           hour++;

                           if

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 经管营销 > 经济市场

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2