找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 18418|回复: 2
收起左侧

单片机8位LED数码管的静态显示课程设计说明书与仿真源码下载

[复制链接]
ID:268172 发表于 2018-1-21 20:07 | 显示全部楼层 |阅读模式
设计单片机控制8位LED数码管的动态驱动电路,并编写程序实现在8位LED数码管上静态信息的显示。                                                     
    电路方面主要包括以下3部分。
(a)设计单片机的最小系统(包括复位电路和外接的晶振电路),并确定相关元器件参数。
(b)采用动态驱动的方式,设计单片机并行端口与LED数码管的动态显示电路,包括LED数码管位选线和段选线的连线。
(c)设计LED数码管位选端(线)给电流电路。                                                         
     编写单片机控制(驱动)8位LED数码管显示程序,实现数字(0—9)或简单的英文字符(A—F)的静态信息显示。显示方式和内容自定,如每隔一段时间循环显示数字0—9 或英文字符(A—F)。

下面是该仿真实验的课程设计说明书的重要内容节选(附件里面有proteus仿真工程文件+完整代码下载):

4 结果分析
4.1 程序调试与仿真
完成硬件设计和软件程序编写后,将Keil uVision4软件中编辑好的程序输出文件载入Protues软件中的单片机STC89C52,进行仿真。按照显示的结果进行程序的调试,显示的时间通过延时函数改变。调试结束后,可以验证该设计的硬件方案和软件方案的正确性。首先没有出现错误显示且显示的数字稳定清晰,说明了电路原理的合理,所选元件也是正确的;其次显示的内容也与所编程序相符合,说明软件方案也是可行的。
4.2 仿真结果
调试完成后进行仿真,仿真开始运行后8位LED数码管上依次显示数字“0”,“1”,“2”,“3”,“4”,“5”,“6”,“7”,“8”,“9”,并循环显示。结果如图4-1,图4-2,图4-3所示,分别为显示的“0”“1”“9”三个数字。

               

图4-1 仿真结果
图4-2 仿真结果
图4-3 仿真结果
5 结论和总结
本次单片机课程设计历时两周,从开始的查阅资料,初步确定设计方案,到熟悉protues和keil uvison4两个应用软件,最后进行程序编写和仿真图制作。通过本次课设,我完成了8位LED数码管显示的要求,在这过程中,我掌握了单片机指令系统中c语言的基本语句以及C语言的基础知识,还有单片机与其他设备相连接输入输出接口技术。虽然过程磕磕绊绊,但在老师的课设指导和同学的帮助下,还是顺利完成了。得出结果固然重要,但是在这个过程中的收获则更为珍贵。

参 考 文 献
  • 何宏.单片机原理及应用.清华大学出版社.2012:271


目 录
1 选题背景
1.1 课题简介
1.2 指导思想
2 方案论证
2.1 设计原理
2.2 设计方案
2.2.1 硬件方案
2.2.2 软件方案
2.3 方案特点
3 8位LED数码管显示器的静态信息显示过程设计论述
3.1 系统硬件框图设计
3.2 系统原理图设计
3.2.1 整体原理图
3.2.2 单片机最小系统设计
3.2.3 字符段控制电路设计
3.2.4 位选传输电路设计
3.3 驱动程序
3.3.1 程序流程
3.3.2 程序分析
4 结果分析
4.1 程序调试与仿真
4.2 仿真结果
5 结论和总结
参考文献


1 选题背景
1.1 课题简介
LED数码管(LED Segment Displays)由多个发光二极管封装在一起组成“8”字型的器件,引线已在内部连接完成,只需引出它们的各个笔划,公共电极。数码管实际上是由七个发光管组成8字形构成的,加上小数点就是8个。这些段分别由字母a,b,c,d,e,f,g,dp来表示。
                    
                           图1-1 选题背景图
当数码管特定的段加上电压后,这些特定的段就会发亮,以形成我们眼睛看到的字样了。如:显示一个“2”字,那么应当是a亮b亮g亮e亮d亮f不亮c不亮dp不亮。LED数码管有一般亮和超亮等不同之分,也有0.5寸、1寸等不同的尺寸。小尺寸数码管的显示笔画常用一个发光二极管组成,而大尺寸的数码管由二个或多个发光二极管组成,一般情况下,单个发光二极管的管压降为1.8V左右,电流不超过30mA。发光二极管的阳极连接到一起连接到电源正极的称为共阳数码管,发光二极管的阴极连接到一起连接到电源负极的称为共阴数码管。常用LED数码管显示的数字和字符是0、1、2、3、4、5、6、7、8、9、A、B、C、D、E、F。
1.2 指导思想
本课题需要了解LED数码管结构及字形码,熟悉LED数码管动态驱动的基本原理。设计单片机控制8位LED数码管的动态驱动电路,并编写程序实现在8位LED数码管上静态信息的显示。
2 方案论证
2.1 设计原理
    本课题采用动态驱动的方式,即将所有位数码管的段选线并联在一起,由位选线控制是哪一位数码管有效。通过动态扫描轮流向各位数码管送出字形码和相应的位选,利用发光管的余辉和人眼视觉暂留作用,使人的感觉好像各位数码管同时都在显示。

2.2 设计方案
2.2.1 硬件方案
硬件电路由四部分组成,即单片机最小系统,数据字符段控制电路,位选择传输电路,LED数码管显示电路。各部分实现功能及设计如下:
a)单片机最小系统包括外接时钟电路和单片机复位电路。时钟电路由一个晶振和两个小电容组成,用来产生时钟频率;复位电路由一个电阻、按键和一个电容组成,用来产生复位信号,使单片机上电的时候复位。
b)数据字符段控制电路采用一片74HC573组成,与单片机的I/O口中的P0.0,P0.1,P0.2,P0.3,P0.4,P0.5,P0.6,P0.7口相连,通过P2.6口进行数据字符段进行选择控制。(74HC573是八路输出的透明锁存器,数据的进和出没有逻辑关系,当锁存使能端LE为高时,这些器件的锁存对于数据是透明的。当锁存使能变低时,符合建立时间和保持时间的数据会被锁存。输出能直接接到CMOS,NMOS 和TTL 接口上。)
c)位选择传输电路同样采用一片74HC573组成,与单片机的I/O口中的P0.0,P0.1,P0.2,P0.3,P0.4,P0.5,P0.6,P0.7口相连,通过P2.6口进行位选择控制。
d)8位LED数码管显示屏由两个7SEG-MPX4-CC拼接而成。
2.2.2 软件方案
本次设计软件方案程序使用C语言编写,主要包括循环显示数字主函数,显示函数,字符段数据的有关函数,选位控制的有关函数以及延时函数。
2.3 方案特点
该方案硬件方面,字符数据段和位选控制分别用一个74HC573进行控制,74HC573实质是锁存器,能够实现“直入直出”的功能。使用一个I/O口就分别完成了字符数据与位选数据的发送。只需用74HC573的LE口进行锁存控制即可完成字符段与位选的不同数据输出,这样只需一个I/O口即可,极大节省了I/O资源。
该方案软件方面,采用C语言进行编译,相对于汇编语言它具有灵活性强,可移植性强,库函数多的特点。
3 8位LED数码管显示器的静态信息显示过程设计论述3.1 系统硬件框图设计
根据确定的硬件方案设计系统硬件框图,包括为单片机提供时钟信号的晶振电路,进行复位操作的复位电路,字符段控制电路,位选传输电路,LED数码管显示电路。如图3-1所示。

                             图3-1 系统硬件框图(详见附件)


3.2 系统原理图设计3.2.1 整体原理图
根据系统硬件框图分为四大部分设计整体硬件图,如图3-2所示。
              
图3-2 原理图

电路设计需要的元器件包括电阻,电容,单片机,锁存器,LED数码管等。具体元器件规格数量见表3-1所示。[1]
表3-1 元器件清单

元器件型号

规格参数

数量

电阻

10kΩ

1个

电阻

220kΩ

1个

电容

10nF

1个

电容

22pF

2个

晶振

11.0592MHz

1个

单片机

STC89C52

1个

VCC

5V

3个

GND

接地

3个

按键

四角直插

1个

4位LED数码管


2个

74HC573


2个

3.2.2 单片机最小系统设计
AT89C51单片机芯片内部有一个反向放大器构成的振荡器,XTAL1和XTAL2分别为振荡器电路的输入端和输出端,时钟由内部和外部生成,引脚上外接定时元件,内部震荡电路产生自激振荡。系统采用的定时元件为石英晶体和电容组成的并联谐振回路。晶振频率选择11.0592MHz,电容值取22PF。元件清单见表3-1所示。具体线路连接如图3-3所示。

图3-3 单片机最小系统

3.2.3 字符段控制电路设计
用一个74HC573锁存器,输入端接STC89C52的P0口,LE端接P2.6控制锁存输出。具体电路连接如图3-4所示。

图3-4 字符段控制电路

3.2.4 位选传输电路设计
用一个74HC573锁存器,输入端接STC89C52的P0口,LE端接P2.7控制锁存输出。具体电路连线如图3-5所示。
图3-5 位选传输电路
3.3 驱动程序
3.3.1 程序流程
程序主要有头文件,端口定义,定义所用的函数,字符函数,具体函数编写包括主函数。根据电路图原理,主体流程图如图3-6所示(详见51hei附件)。

单片机源程序如下:
  1. #include<reg52.h>
  2. #include<intrins.h>
  3. #define uint unsigned int
  4. #define uchar unsigned char


  5. sbit DA=P2^6;                     //
  6. sbit WEI=P2^7;                    //

  7. uint shu=0;


  8. unsigned char code tab[] ={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x79,0x00,0x5c};//共阴数码码表
  9. unsigned char Display_Digit[]={0,0,0,0,0,0,0,0,0,0};//待显示

  10. void Delay(uint x)
  11. {
  12.          while(--x);
  13. }

  14. void delayms(uint z)     //延时N ms
  15. {
  16.         uint x,y;
  17.         for(x=z;x>0;x--)
  18.         for(y=120;y>0;y--);
  19. }


  20. //7F,BF,DF,EF, F7,FB,FD,FE

  21. void SMG_DIS(void)     //
  22. {
  23.         P0 = 0xFE;
  24.         WEI=1;
  25.         WEI=0;  //位控制
  26.         P0=(tab[shu]); //个位和小数点
  27.         DA=1;
  28.         DA=0;         //显示数据输出
  29.         delayms(3);

  30.         P0 = 0xFD;
  31.         WEI=1;
  32.         WEI=0;  //位控制
  33.         P0=(tab[shu]); //个位和小数点
  34.         DA=1;
  35.         DA=0;         //显示数据输出
  36.         delayms(3);

  37.         P0 = 0xFB;
  38.         WEI=1;
  39.         WEI=0;  //位控制
  40.         P0=(tab[shu]); //个位和小数点
  41.         DA=1;
  42.         DA=0;         //显示数据输出
  43.         delayms(3);

  44.         P0 = 0xF7;
  45.         WEI=1;
  46.         WEI=0;  //位控制
  47.         P0=(tab[shu]); //个位和小数点
  48.         DA=1;
  49.         DA=0;         //显示数据输出
  50.         delayms(3);


  51.         P0 = 0xEF;
  52.         WEI=1;
  53.         WEI=0;  //位控制
  54.         P0=(tab[shu]); //个位和小数点
  55.         DA=1;
  56.         DA=0;         //显示数据输出
  57.         delayms(3);

  58.         P0 = 0xDF;
  59.         WEI=1;
  60.         WEI=0;  //位控制
  61.         P0=(tab[shu]); //个位和小数点
  62.         DA=1;
  63.         DA=0;         //显示数据输出
  64.         delayms(3);

  65.         P0 = 0xBF;
  66.         WEI=1;
  67.         WEI=0;  //位控制
  68.         P0=(tab[shu]); //个位和小数点
  69.         DA=1;
  70.         DA=0;         //显示数据输出
  71.         delayms(3);

  72.         P0 = 0x7F;
  73.         WEI=1;
  74.         WEI=0;  //位控制
  75.         P0=(tab[shu]); //个位和小数点
  76.         DA=1;
  77.         DA=0;         //显示数据输出
  78.         delayms(3);
  79. }


  80. void main(void)
  81. {  
  82.                 uint d=0;               //整型数据        
  83.                 uint i=0;
  84.                         Display_Digit[0]=1;
  85.                         Display_Digit[1]=2;
  86.                         Display_Digit[2]=3;
  87.                         Display_Digit[3]=4;
  88.                         Display_Digit[4]=5;
  89.                         Display_Digit[5]=6;
  90.                         Display_Digit[6]=7;
  91. ……………………

  92. …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码



所有资料51hei提供下载(含word格式的课设说明书与任务书+仿真工程+源码):

8位LED数码管显示器的静态信息显示 .rar (481.47 KB, 下载次数: 90)

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

回复

使用道具 举报

ID:493418 发表于 2019-3-18 18:44 | 显示全部楼层
很好有帮助
回复

使用道具 举报

ID:650452 发表于 2019-11-27 00:31 | 显示全部楼层
很有帮助!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表