第十一节多个数码管动态显示

第十一节多个数码管动态显示
第十一节多个数码管动态显示

第十一节多个数码管动态显示

一、编写程序

步骤一:打开bascom-avr编程环境;

步骤二:新建空白编程文件;

步骤三:设置系统频率,系统的波特率

步骤四:输入程序

程序举例:

将下面程序在bascom-avr中编译及仿真

'——————————————————————————————————

'名称: 多个数码管动态显示程序

'目的: 多个数码管动态显示程序,了解I/0口及数码管。

'目标芯片: Mega16

'作者: 张恩锋

'编译环境: BASCOM-A VR 1.11.8.4

'protues 7仿真通过'———————————————————————————————————

$regfile = "m16def.dat" ' 单片机型号

$crystal = 8000000 ' 定义晶振频率

Config Porta = Output '定义A口为输出口Config Portb = Output

Dim I As Byte

Dim T As Byte

Dim S As Byte

Dim D As Byte

Dim Dled(16) As Byte '定义七段数码管显示数据数组

Restore Dataled7 '为读入数据准备,调用子程序Daima

For I = 1 To 16 '依次把0-F的显示值输入到数组Dled () Read Dled(i)

Next I

Do '死循环

S = &B00000001 '第一个显示数字的数码管为最低位

For I = 1 To 4 '在数码管上显示数字1-4循环4次

T = I + 1 '选择在数据数组中显示数字的对应数据

Porta = 0 '关数码管

Portb = S '数码管选择数据为二进制11111110 Porta = Dled(t) '显示数据

Waitms 1

Rotate S , Left , 1 '选择数码管

Next I '循环DO__LOOP Loop

End

Dataled7: 'LED 7段显示代码表Data &H3F , &H06 , &H5B , &H4F , &H66 , &H6D , &H7D , &H07 , &H7F , &H6F , &H77 , &H7C , &H39 , &H5E , &H79 , &H71

'——————————————————————————————————

'共阴极字形码

'&H3F 0

'&H06 1

'&H5B 2

'&H4F 3

'&H66 4

'&H6D 5

'&H7D 6

'&H07 7

'&H7F 8

'&H6F 9

'&H77 a

'&H7C b

'&H39 c

'&H5E d

'&H79 e

'&H71 f '——————————————————————————————————

步骤五:保存程序

步骤六:编译文件

如下图所示:在菜单栏中单击“compile program”或按F7键编译文件,若提示错误请认真检查并及时更正错误。

二、仿真模拟

在桌面中打开protues仿真软件(仿真为理想状态下运行,实际还有一点不同,后续章节中有介绍)

2.1 添加元件

点击新建文件

单击“P”从库中选取元件

在关键字中输入“7seg-mpx1-cc”添加一个共阴级数码管(因前面章节所用数码管达不到要求所以选用这一类型)

选择结果中的元件并双击。

同样的方法在关键字中输入“atmega16”添加A VR单片机

单击“确定”退出添加元件界面。

单击添加的元件,在编辑界面鼠标会变成笔状。

在编辑界面单击鼠标,会出现器件的外形,选择好器件所放位置并单击鼠标就可放置元件

单击鼠标后

同样的方法放置数码管。

2.2 线路连接

在器件的管脚上单击鼠标,当鼠标变成绿色笔状且在笔尖处出现小红方框就可拖动鼠标连接线路。同理,在把线拖到要连接的另一个元件的管脚时鼠标变成绿色笔状即可单击鼠标连接线路。

完成连接效果图:

2.3 仿真运行

双击单片机出现“编辑元件”界面

在program file这一栏中,找到前面编程所编译的扩展名为“.HEX”的文件并选择它

回到“编辑元件”界面点击确定。

最后,单击主界面左下角的“开始”按钮即可进行仿真,若不能运

行应仔细检查是否线路连接错误。

三、回味提升

1、改变延时时间,观察其变化

2、更改显示数字,多加几个数码管让其显示自己喜欢的数字,总结经验

3、其它尝试

数码管显示动态数字 单片机报告

目录 一、设计题目 (2) 二、设计目的 (2) 2.1设计目的要求 (2) 2.2 系统设计意义 (2) 三、系统硬件图 (3) 四、程序流程图 (3) 五、系统说明与分析 (4) 5.1系统主要组成部分 (4) 5.2 单片机最小系统部分 (4) 5.2.1 MCS-51系列单片机概述 (4) 5.2.2 MCS-51系列单片机的并行I/O口 (5) 5.2.3 MCS-51系列单片机的工作方式和时序 (8) 5.3串行转并行部分 (10) 5.3.1 74ls164的概述 (10) 5.3.2 74ls164的功能 (15) 5.4数码显示部分 (16) 5.4.1概述 (16) 5.4.2 LED数码管引脚结构 (16) 5.4.3 LED数码管显示原理 (17) 5.4.4 LED数码管的驱动方式 (17) 5.5电路板的制作 (18) 5.6 系统连线说明分析 (19) 六、源程序 (20) 七、总结 (22) 八、参考文献 (23)

一、设计题目 通过51系列单片机的串行口和74ls164显示0~9十个数字。 二、设计目的 该单片机最小应用系统设计目的及要求如下: 2.1设计目的要求 1、通过本次实验,掌握单片机串行口的扩展功能; 2、通过对单片机的使用和编程,了解单片机的应用编程; 3、搭建单片机最小应用系统,进一步加深对单片机应用的理解,提高处理实际问题的能力和独立分析思考的能力; 4、掌握单片机汇编编程技术中的设计和分析方法; 5、学会使用并熟练掌握电路绘制软件Protel99SE(或DXP); 6、掌握电路图绘制及PCB图布线技巧。 2.2 系统设计意义 1、在系统掌握单片机相应基础知识的前提下,熟悉单片机最小应用系统的设计方法及系统设计的基本步骤。 2、完成所需单片机最小应用系统原理图设计绘制的基础上完成系统的电路图设计。 3、完成系统所需的硬件设计制作,在提高实际动手能力的基础上进一步巩固所学知识。 4、进行题目要求功能基础上的软件程序编程,会用相应软件进行程序调试和测试工作。 5、用AT89S51,74ls164设计出题目所要求的数字显示,实现循环显示,并针对实际设计过程中软、硬件设计方面出现的问题提出相应解决办法。 6、通过单片机应用系统的设计将所学的知识融会贯通,锻炼独立设计、制作和调试单片机应用系统的能力;领会单片机应用系统的软、硬件调试方法和系统的研制开发过程,为进一步的科研实践活动打下坚实的基础。

多位数码管动态扫描protues仿真

实验题目:多位数码管动态扫描电路设计与调试 一、实验要求与目的 1、设计要求 8位数码管显示“8.8.8.8.8.8.8.8.”,即点亮显示器所有段,持续约500ms 之后,数码管持续约1s ;最后显示“HELLO —10”,保持。 2、实验目的 1、掌握数码管动态扫描显示原理及实现方法。 2、掌握动态扫描显示电路驱动程序的编写方法。 二、设计思路 1、在Proteus 中设计仿真电路原理图。 2、在Keil C51软件中编译并调试程序,程序后缀必须是.c 。调试时生成hex 文件,确认 无误后将生成的hex 文件添加到原理图的单片机中进行仿真。 3、观察电路仿真结果对程序进行更改直至达到预期结果 三、实验原理 p2[0..3] p0[0..7]p 00p 00p 07p 06p 0605p 02p 05p 04p 04p 03p 03p 02p 02p 01p 01p 07p 23p 22p 21p 20A 15B 14C 13D 12 01122334455667798109 11 U2 7445 A 02 B 018A 13B 117A 24B 216A 35B 315A 46B 414A 57B 513A 68B 612A 7 9 B 7 11 C E 19A B /B A 1 U3 74HC245 234567891 RP1 RESPACK-8 XTAL2 18 XTAL119 RST 9 P3.0/RXD 10P3.1/TXD 11P3.2/INT012P3.3/INT113P3.4/T014P3.7/RD 17 P3.6/WR 16P3.5/T115AD[0..7]A[8..15] ALE 30EA 31PSEN 29 P1.0/T21 P1.1/T2EX 2P1.23P1.34P1.45P1.56P1.67P1.78 U4 AT89C52 图1 原理图

数码管显示程序(汇编语言)

实验三数码显示 一、实验目的 了解LED数码管动态显示的工作原理及编程方法。 二、实验内容 编制程序,使数码管显示“DJ--88”字样。 三、实验程序框图 四、实验步骤 联机模式: (1)在PC机和实验系统联机状态下,运行该实验程序,可用鼠标左键单击菜单栏“文件”或工具栏“打开图标”,弹出“打开文件”的对话框,然后打开598K8ASM

文件夹,点击S6.ASM文件,单击“确定”即可装入源文件,再单击工具栏中编译装载,即可完成源文件自动编译、装载目标代码功能,再单击“调试”中“连续运行”或工具图标运行,即开始运行程序。 (2)数码管显示“DJ--88”字样。 脱机模式: 1、在P.态下,按SCAL键,输入2DF0,按EXEC键。 2、数码管显示“DJ--88”字样。 五、实验程序清单 CODE SEGMENT ;S6.ASM display "DJ--88" ASSUME CS:CODE ORG 2DF0H START: JMP START0 PA EQU 0FF20H ;字位口 PB EQU 0FF21H ;字形口 PC EQU 0FF22H ;键入口 BUF DB ?,?,?,?,?,? data1: db0c0h,0f9h,0a4h,0b0h,99h,92h,82h,0f8h,80h,90h,88h,83h,0 c6h,0a1h db 86h,8eh,0ffh,0ch,89h,0deh,0c7h,8ch,0f3h,0bfh,8FH,0F0H START0: CALL BUF1 CON1: CALL DISP JMP CON1 DISP: MOV AL,0FFH ;00H MOV DX,PA OUT DX,AL MOV CL,0DFH ;显示子程序 ,5ms MOV BX,OFFSET BUF DIS1: MOV AL,[BX] MOV AH,00H PUSH BX MOV BX,OFFSET DATA1 ADD BX,AX MOV AL,[BX] POP BX MOV DX,PB

数码管动态显示教案

电子综合设计实训 题目数码管动态显示 _ 姓名 专业 学号 指导教师 郑州科技学院电气工程学院

目录 摘要.................................................................................................. I 1背景. (1) 1.1介绍 (1) 1.2设计步骤 (2) 2 设计思路 (3) 2.1方案对比 (3) 3元件的选择 (6) 3.1单片机 (6) 3.2 显示元器件的选择 (6) 4 设计原理及功能说明 (8) 4.1 各部分功能说明 (8) 5 装配与调试 (14) 5.1装配 (14) 5.2调试 (14) 6 总结 (15) 附录 (17) 附录一:元件清单 (17) 附录二:电路源程序 (17)

数码管动态显示的设计 摘要 本文介绍了一种基于AT89C51单片机的8个数码管滚动显示单个数字的设计,让八位数码管滚动显示0、1、2、3、4、5、6、7,我们以液晶显示技术的发展为背景,选择了比较常用的液晶数码管显示模块,利用了单片机控制数码管模块的显示机理。研究学习AT89C51单片机其功能,对学习过的单片机,C语言课程进行巩固,设计一款在8只数码管上流动显示单个数字的程序,并用PROTEUS进行电路设计和实时仿真。该电路有两部分组成:AT89C51单片机和显示模块组成。AT89C51单片机具有超低功耗和CPU外围的高度整合性;显示模块数码管是由多个发光二极管封装在一起组成“8”字型的器件,引线已在内部连接完成,只需引出它们的各个笔划,公共电极,方便易用。实际应用中不需要外部任何元器件即可实现,具有接口电路简单、可靠,易于编程的特点,抗干扰性好等特点。 单片机技术使我们可以利用软硬件实现数码管准确显示各种数码。而且这种技术相对简单,性价比较高,在我们生活中应用很广泛,具有一定的发展前景。 关键词:AT89C51单片机;数码管;滚动显示

数码管动态显示数字

/***********************用译码器*******************************************/ #include #define GPIO_DIG P0 sbit LSA=P2^0; sbit LSB=P2^1; sbit LSC=P2^2; unsigned char code DIG_CODE[17]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f, 0x77,0x7c,0x39,0x5e,0x79,0x71};//共阴极数码管字型码0~F void Delay10ms(unsigned int c) //误差0us { unsigned char a, b; for (;c>0;c--) { for (b=38;b>0;b--) { for (a=130;a>0;a--); } } } void main() { unsigned char i=0; P2=0x00; //位显示 while(1) { GPIO_DIG=DIG_CODE[i++]; //段显示 Delay10ms(100); //55us GPIO_DIG=0x00;//消隐 P2=(P2+1)%8; if(i==8) i=0; } } /*******************不用译码器****************************************/ #include //--定义使用的IO口--// #define GPIO_DIG P0 //段选 #define GPIO_PLACE P1 //位选 //--定义全局变量--// unsigned char code DIG_PLACE[8] = {

数码管显示变化数字

/*----------------------------------------------- 名称:单个共阳数码管动态显示变化数字 内容:通过循环赋值给P1,让数码管显示特定的字符或者数字 ------------------------------------------------*/ #include //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义 unsigned char code dofly_table[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,}; // 显示数值表0-9 void Delay(unsigned int t); //函数声明 /*------------------------------------------------ 主函数 ------------------------------------------------*/ void main (void) { unsigned char i; //定义一个无符号字符型局部变量i 取值范围0~255 while (1) //主循环 { for(i=0;i<10;i++) //加入for循环,表明for循环大括号中的程序循环执行10次 { P1=dofly_table[i]; //循环调用表中的数值 Delay(60000); //延时,方便观看数字变化 } //主循环中添加其他需要一直工作的程序 } }/*------------------------------------------------ 延时函数,含有输入参数unsigned int t,无返回值 unsigned int 是定义无符号整形变量,其值的范围是 0~65535 ------------------------------------------------*/ void Delay(unsigned int t) { while(--t); }

基于51单片机的LED数码管动态显示

基于51单片机的LED数码管动态显示 LED数码管动态显示就是一位一位地轮流点亮各位数码管,对于每一位LED数码管来说,每隔一段时间点亮一次,利用人眼的“视觉暂留"效应,采用循环扫描的方式,分时轮流选通各数码管的公共端,使数码管轮流导通显示。当扫描速度达到一定程度时,人眼就分辨不出来了。尽管实际上各位数码管并非同时点亮,但只要扫描的速度足够快,给人的印象就是一组稳定的显示数据,认为各数码管是同时发光的。若数码管的位数不大于8位时,只需两个8位I/O口。 1 硬件设计 利用51单片机的P0口输出段码,P2口输出位码,其电路原理图如下所示。 在桌面上双击图标,打开ISIS 7 Professional窗口(本人使用的是v7.4 SP3中文版)。单击菜单命令“文件”→“新建设计”,选择DEFAULT模板,保存文件名为“DT.DSN”。在器件选择按钮中单击

“P”按钮,或执行菜单命令“库”→“拾取元件/符号”,添加如下表所示的元件。 51单片机AT89C51 一片 晶体CRYSTAL 12MHz 一只 瓷片电容CAP 22pF 二只 电解电容CAP-ELEC 10uF 一只 电阻RES 10K 一只 电阻RES 4.7K 四只 双列电阻网络Rx8 300R(Ω) 一只 四位七段数码管7SEG-MPX4-CA 一只 三极管PNP 四只 若用Proteus软件进行仿真,则上图中的晶振和复位电路以及U1的31脚,都可以不画,它们都是默认的。 在ISIS原理图编辑窗口中放置元件,再单击工具箱中元件终端图标,在对象选择器中单击POWER 和GROUND放置电源和地。放置好元件后,布好线。左键双击各元件,设置相应元件参数,完成电路图的设计。 2 软件设计 LED数码管动态显示是一位一位地轮流点亮各位数码管的,因此要考虑每一位点亮的保持时间和间隔时间。保持时间太短,则发光太弱而人眼无法看清;时间太长,则间隔时间也将太长(假设N位,则间隔时间=保持时间X(N-1)),使人眼看到的数字闪烁。在程序中要合理的选择合适的保持时间和间隔时间。而循环次数则正比于显示的变化速度。 LED数码管动态显示的流程如下所示。

实验七、数码管动态扫描显示实验

实验七 数码管动态扫描显示实验 姓名:丁亚芳 专业:通信工程 学号:2011412435 成绩: 一、实验目的 1.掌握keil C51软件与protues 软件联合仿真调试的方法; 2.掌握单片机对数码管的动态显示控制方式; 3.掌握定时器的基本应用及编程方法。 二、实验内容 1.用Proteus 设计一8位数码管动态扫描显示电路。要求利用P0口作数码管的段选线,P1.0~P1.2与74LS138译码器的3个输入端相连,其译码输出Y0~Y7作为数码管的位选线。 2.编写程序,将数字1~8分别显示在8个数码管上,要求显示无闪烁。 3.编写程序,利用Proteus 中的“激励源/DCLOCK/数字类型/时钟”产生频率为1HZ 的方波输出,并利用定时/计数器T1统计脉冲的个数,将统计结果动态实时的显示在数码管上。该脉冲计数电路的基础上自行修改。 三、实验原理及步骤 1.用Proteus 设计数码管动态扫描显示电路; 2.在Keil C51中编写键盘识别程序,编译通过后,与Proteus 联合调试; 3.启动仿真,观察数码管显示是否正确; 4.用Proteus 设计脉冲计数电路,仿真调试、运行程序并查看效果; 5.提高时钟频率(如100KHZ ),观察显示情况。 四、电路设计及调试 (1)动态数码管显示电路设计 P1.0P1.1P1.2 P1.0P1.1P1.2 XTAL2 18 XTAL1 19 ALE 30EA 31 PSEN 29RST 9 P0.0/AD039P0.1/AD138P0.2/AD237P0.3/AD336P0.4/AD435P0.5/AD534P0.6/AD633P0.7/AD732P1.01P1.12P1.23P1.34P1.45P1.56P1.67P1.78 P3.0/RXD 10P3.1/TXD 11P3.2/INT012P3.3/INT113P3.4/T014P3.7/RD 17 P3.6/WR 16P3.5/T115P2.7/A1528P2.0/A821P2.1/A922P2.2/A1023P2.3/A1124P2.4/A1225P2.5/A1326P2.6/A1427U1 AT89C51 X1 CRYSTAL FREQ=12MHz C1 22pF C2 22pF R1 800 C3 20uF +5v +5v A 1 B 2C 3 E16E24E35 Y015Y114Y213Y312Y411Y510Y69Y7 7 U2 74LS138 23456789 1RP1 RESPACK-8 +5v +5v

数码管动态扫描显示01234567

实验5 数码管动态扫描显示01234567 原理图:8个数码管它的数据线并联接到JP5, 位控制由8个PNP型三级管驱动后由JP8引出。 相关原理: 数码管是怎样来显示1,2,3,4呢?数码管实际上是由7个发光管组成8字形构成的,加上小数点就是8个。我们分别把他命名为 A,B,C,D,E,F,G,H。

搞懂了这个原理, 我们如果要显示一个数字2, 那么 A,B,G,E,D这5个段的发光管亮就可以了。也就是把B,E,H(小数点)不亮,其余全亮。根据硬件的接法我们编出以下程序。当然在此之前,还必须指定哪一个数码管亮,这里我们就指定最后一个P2.7。 LOOP: CLR P2.7 ;选中最后的数码管 SETB P0.7 ;B段不亮 SETB P0.5 ;小数点不亮 SETB P0.1 ;C段不亮 CLR P0.2 ;其他都亮 CLR P0.3 CLR P0.4 CLR P0.6 CLR P0.0 JMP LOOP ;跳转到开始重新进行

END 把这个程序编译后写入单片机,可以看到数码管的最后一位显示了一个数字2。 也许你会说:显示1个2字就要10多行程序,太麻烦了。 显示数字2则是C,F,H(小数点)不亮,同时由于接法为共阳接法,那么为0(低电平)是亮 为1(高电平)是灭。从高往低排列,(p0.7_p0.0)写成二进制为01111110, 把他转化为16进制则为A2H。我们可以根据硬件的接线把数码管显示数字编制成一个表格, 以后直接调用就行了。 有了这个表格上面显示一个2的程序则可简化为: LOOP: CLR P2.7 ;选中左边的数码管 MOV P0,#0A2H ;送数字2的代码到P0口 JMP LOOP ;跳转到开始重新进行 END

8位数码管动态显示电路设计.

电子课程设计 — 8位数码管动态显示电路设计 学院:电子信息工程学院 专业、班级: 姓名: 学号: 指导老师: 2014年12月

目录 一、设计任务与要求 (3) 二、总体框图 (3) 三、选择器件 (3) 四、功能模块 (9) 五、总体设计电路图 (10) 六、心得体会 (12)

8位数码管动态显示电路设计 一、设计任务与要求 1. 设计个8位数码管动态显示电路,动态显示1、2、3、4、5、6、7、8。 2. 要求在某一时刻,仅有一个LED 数码管发光。 3. 该数码管发光一段时间后,下一个LED 发光,这样8只数码管循环发光。 4. 当循环扫描速度足够快时,由于视觉暂留的原因,就会感觉8只数码管是在持续发光。 5、研究循环地址码发生器的时钟频率和显示闪烁的关系。 二、总体框图 设计的总体框图如图2-1所示。 图2-1总体框图 三、选择器件 1、数码管 数码管是一种由发光二极管组成的断码型显示器件,如图1所示。 U13 DCD_HEX 图1 数码管 数码管里有八个小LED 发光二极管,通过控制不同的LED 的亮灭来显示出 不同的字形。数码管又分为共阴极和共阳极两种类型,其实共阴极就是将八个 74LS161计数器 74LS138译码 器 数码管

LED的阴极连在一起,让其接地,这样给任何一个LED的另一端高电平,它便能点亮。而共阳极就是将八个LED的阳极连在一起。 2、非门 非门又称为反相器,是实现逻辑非运算的逻辑电路。非门有输入和输出两个端,电路符号如图2所示,其输出端的圆圈代表反相的意思,当其输入端为高电平时输出端为低电平,当其输入端为低电平时输出端为高电平。也就是说,输入端和输出端的电平状态总是反相的。其真值表如表1所示。 图2 非门 表1 真值表 输入输出 A Y 0 1 1 0 3、5V电源 5V VCC电源如图3所示。 图3 5V电源

数码管动态显示实验报告

实验四数码管动态显示实验一 一、实验要求 1.在Proteus软件中画好51单片机最小核心电路,包括复位电路和晶振电路 2.在电路中增加四个7段数码管(共阳/共阴自选),将P1口作数据输出口与7段数码 管数据引脚相连,P2.0~P2.3引脚输出选控制信号 3.在Keil软件中编写程序,采用动态显示法,实现数码管分别显示数字1,2,3,4 二、实验目的 1.巩固Proteus软件和Keil软件的使用方法 2.学习端口输入输出的高级应用 3.掌握7段数码管的连接方式和动态显示法 4.掌握查表程序和延时等子程序的设计 三.实验说明 本实验是将单片机的P1口做为输出口,将四个数码管的七段引脚分别接到P1.0至P1.7。由于电路中采用共阳极的数码管,所以当P1端口相应的引脚为0时,对应的数码管段点亮。程序中预设了数字0-9的段码。由于是让四个数码管显示不同的数值,所以要用扫描的方式来实现。因此定义了scan函数,接到单片机的p2.0至p2.3 在实验中,预设的数字段码表存放在数组TAB中,由于段码表是固定的,因此存储类型可设为code。 在Proteus软件中按照要求画出电路,再利用Keil软件按需要实现的功能编写c程序,生成Hex文件,把Hex文件导到Proteus软件中进行仿真。为了能够更好的验证实验要求,在编写程序时需要延时0.5s,能让人眼更好的分辨;89C51的一个机器周期包含12个时钟脉冲,而我们采用的是12MHz晶振,每一个时钟脉冲的时间是1/12us,所以一个机器周期为1us。在keil程序中,子函数的实现是用void delay_ms(int x),其中x为1时是代表1ms。 四、硬件原理图及程序设计 (一)硬件原理图设计 电路中P1.0到P1.7为数码管七段端口的控制口,排阻RP1阻值为220Ω,p2.0到p2.3为数码管的扫描信号。AT89c51单片机的9脚(RST)为复位引脚,当RST为高电平的时间达到2个机器周期时系统就会被复位;31引脚(EA)为存取外部存储器使能引脚,当EA为高电平是使用单片机内部存储器,当EA为低电平时单片机则使用外部存储器。18、19引脚是接晶振脚。而接地和电源端在软件中已经接好,所以不用在引线。 如下图所示:

数码管动态显示(中断 延时)

W R D I P 31191 8T 9 R D 17W R 161213141512345678P S E N A L E /P C P P P P P P P P T T I p 1 D Y 4 - 6543210 5 V 80C51中断系统的结构

SCON TCON IE IP 硬件查询 从0~100循环显示程序, #include #define uint unsigned int #define uchar unsigned char

sbit wela=P2^7; uchar code table[]={ 0x3f,0x06,0x5b,0x4f, 0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x77,0x7c, 0x39,0x5e,0x79,0x71}; void display(uchar bai,uchar shi,uchar ge); //数码管显示子程序void delay(uint z); //延时子程序 void init(); //初始化子程序 void main() { init();//初始化子程序 while(1) { if(aa==20) { aa=0; //千万别忘记计时器从0开始。 temp++; if(temp==100) { temp=0; } bai=temp/100; shi=temp%100/10; ge=temp%10; } display(bai,shi,ge); } } void delay(uint z) uint x,y; for(x=z;x>0;x--) for(y=110;y>0;y--); }

数码管动态显示的51单片机时钟设计

一看就会,适合初学者参考 T0,T1同时开中断,和别人的有点不一样 源程序如下 //数码管设计的可调电子钟 //K1,K2分别调整小时和分钟 #include<> #include<> #define uchar unsigned char #define uint unsigned int uchar code DSY_CODE[]={0xC0,0xF9,0xA4,0xB0,0x99, //共阳段码 0x92,0x82,0xF8,0x80,0x90,0xFF}; uchar DSY_BUFFER[]={0,0,0xBF,0,0,0xBF,0,0}; //显示缓存uchar Scan_BIT; //扫描位,选择要显示的数码管 uchar DSY_IDX; //显示缓存索引 uchar Key_State; //P1端口按键状态 uchar h,m,s,s100; //十分秒,1/100s void DelayMS(uchar x) //延时 { uchar i; while(x--) for(i=0;i<120;i++); } void Increase_Hour() //小时处理函数 { if(++h>23)h=0; DSY_BUFFER[0]=DSY_CODE[h/10]; DSY_BUFFER[1]=DSY_CODE[h%10]; } void Increase_Minute()//分钟处理函数 { if(++m>59) { m=0;Increase_Hour(); } DSY_BUFFER[3]=DSY_CODE[m/10]; DSY_BUFFER[4]=DSY_CODE[m%10]; }

数码管动态显示数字

单片机实习 课题:数码管动态显示数字

LED数码管动态显示 共阳极的LED数码管,共阳就是7段的显示字码共用一个电源的正。 原理示意图: 从上图可以看出,要是数码管显示数字,有两个条件:1、是要在VT端(3/8脚)加正电源;2、要使(a,b,c,d,e,f,g,dp)端接低电平或“0”电平。这样才能显示的。例:如要显示“0”,则要 a,b,c,d,e,f六个字段亮就显示“0”了,而g和dp字段不亮;这样只要向P0口送出相应的代码即可, 编码方法如下表: dp g f e d c b a P0.7 P0.6 P0.5 P0.4 P0.3 P0.2 P0.1 P0.0 显示的 字符 编码 0 0 0 1 0 0 1 0 0 0C0H 1 0 1 1 1 0 1 1 1 0F9H 1 1 0 0 0 0 1 0 2 0A4H 1 0 1 0 0 0 1 0 3 0B0H 0 0 1 0 1 0 1 1 4 99H 0 0 1 0 0 1 1 0 5 92H 0 0 0 0 0 1 1 0 6 82H 1 0 1 1 1 0 1 0 7 0F8H 0 0 0 0 0 0 1 0 8 80H 0 0 1 0 0 0 1 0 9 90H 程序使用时,只需将显示数字所对应的编码送P0口,然后打开相应的数码管显示位的电源控制即可显示相应的字符。 5

双位数码管显示控制程序及说明 START: MOV R0,#0 ;清零 MOV DPTR,#TABLE ;指定查表起始地址 LOOP: ACALL DISPLAY ;调用子程序DISPLAY INC R0 ;R0加1 CJNE R0,#100,LOOP ;R0未到100则转换 JMP START ;跳转 DISPLAY: MOV A,R0 ;把R0里的数据送入A MOV B,#10 ;把10送入B DIV AB ;a b相除 MOV 20H,A ;十位送入20H MOV 21H,B ;个位送入21H MOV R3,#50 ;把50送入R3 LOOP1: MOV A,21H ;取个位数 ACALL CHANG ;调用子程序CHANG CLR P2.4 ;开个位显示 ACALL DLY ;调用子程序DLY SETB P2.4 ;关闭个位显示 MOV A,20H ;取十位数 6

51单片机控制数码管动态显示程序

51单片机控制数码管动态显示程序 说明:驱动四位一体数码管动态显示数字,可方便的移植到其它程序中。 例如:1、硬件改为三位一体或二位一体数码管,只需修改Display_Scan()函数COM个数。 2、本例中,采用了共阴数码管,如果用在共阳数码管,只需修改相应段码表。 本程序使用P0口作为段码数据发送端,P2.0-P2.3作为数码管扫描选通, 使用P0口时,因单片机内部没有上拉电阻,所以要外接上拉电阻(参考阻值470欧姆). // STC89C52RC // +---------------+

// | | // | | Digital Number // | | _______________________ // | | | __ __ __ __

| // | P0.0--P0.7|===>;| | | | | | | | | | // | (a,b...g,h)| | |--| |--| |--| |--| | 4位共阴数码管// | | | |__|.|__|.|__|.|__|.| // | | ----------------------- // | |

| | | | // | | | | | | // | P2.7(COM3)|--------+ | | | // | |

| | // | P2.6(COM2)|-------------+ | | // | | | | // | P2.5(COM1)|------------------+

// | | | // | P2.4(COM0)|-----------------------+ // +---------------+ #include // 函数声明 //=============================================== ======================== void DisplayNumber(unsigned int Num); void delayms( int ms); //=============================================== ======================== unsigned char code LED_table[]={

基于51单片机的LED数码管动态显示

NDM XTW2 potm 畑 PO^.I P0v.l m\ JO.TAI 啊 P2.W 細 iSEiT ALE ER卩2訥 92辄 MJ 儿1辽帽 112w S13阳F m PR #15P35/ MJ 基于51单片机的LED数码管动态显示 LED数码管动态显示就是一位一位地轮流点亮各位数码管,对于每一位LED数码管来说,每隔一段 时间点亮一次,利用人眼的“视觉暂留"效应,采用循环扫描的方式,分时轮流选通各数码管的公共 端,使数码管轮流导通显示。当扫描速度达到一定程度时,人眼就分辨不出来了。尽管实际上各位数码管并非同时点亮,但只要扫描的速度足够快,给人的印象就是一组稳定的显示数据,认为各数码管是同时发光的。若数码管的位数不大于8位时,只需两个8位I/O 口。 1 硬件设计 利用51单片机的P0 口输出段码,P2 口输出位码,其电路原理图如下所示。 在桌面上双击图标,打开 ISIS 7 Professional窗口(本人使用的是 v7.4 SP3中文版)。单击菜单命令“文件新建设计”,选择DEFAULT模板,保存文件名为“ DT.DSN ”。在器件选择按钮中单击“P”按钮,或执行菜单命令“库”7“拾取元件/符号”,添加如下表所示的元件。 51单片机AT89C51 —片 晶体 CRYSTAL 12MHz —只 瓷片电容CAP 22pF 二只 电解电容CAP-ELEC 10uF —只 电阻RES 10K 一只 电阻RES 4.7K四只 双列电阻网络 Rx8 300R( Q ) 一只

四位七段数码管 7SEG-MPX4-CA —只 三极管PNP 四只 若用Proteus软件进行仿真,则上图中的晶振和复位电路以及U1的31脚,都可以不画,它们都是 默认的。 在ISIS原理图编辑窗口中放置元件,再单击工具箱中元件终端图标,在对象选择器中单击POWER 和GROUND放置电源和地。放置好元件后,布好线。左键双击各元件,设置相应元件参数,完成电路图的设计。2软件设计 LED数码管动态显示是一位一位地轮流点亮各位数码管的,因此要考虑每一位点亮的保持时间和间隔时间。保持时间太短,则发光太弱而人眼无法看清;时间太长,则间隔时间也将太长(假设N位,则间隔时间=保持时间X( N-1 )),使人眼看到的数字闪烁。在程序中要合理的选择合适的保持时间和间隔时间。而循环次数则正比于显示的变化速度。

数码管的动态显示

电气工程系毕业论文/设计 J10秋应用电子技术班 XXX 2012-05-29 \\

引言 3一数码管的结构及工作原理 4 1.1 数码管的结构 1.2 数码管的工作原理 二利用单片机控制数码管动态显示功能实现数字功能的设计6 2.1 数字钟的硬件电路图的设计 2.1.1 系统时钟电路的设计 2.1.2 系统复位电路的设计 2.1.3 按键与按钮电路的设计 2.1.4 数字钟的显示电路设计 三系统主要程序设计 9 3.1 主程序 3.2 显示子程序 3.3 定时器T0中断服务程序 3.4 定时器T1中断服务程序 3.5 调时功能程序 四软件电路的调试13 4.1 软件电路调试 4.2 系统程序调试 致谢 17 附录 18 参考文献 26

20世纪末,电子技术获得了飞速的发展,在其推动下,现代电子产品几乎渗透了社会的各个领域,有力地推动了社会生产力的发展和社会信息化程度的提高,同时也使现代电子产品性能进一步提高,产品更新换代的节奏也越来越快。 时间对于我们每个人来说都是很宝贵的,市场上出现的各式个样的钟表都很受消费者的欢迎和喜爱,钟表的数字化给人们生产生活带来了极大的方便,满足大家的需求,而且大大地扩展了钟表原先的报时功能。诸如定时自动报警、按时自动打铃、时间程序自动控制、定时广播、定时启闭电路、定时开关烘箱、通断动力设备,甚至各种定时电气的自动启用等等,所有这些,都是以钟表数字化为基础的。 本设计克服了机械式钟表的诸多缺点,而且在常规电子式钟表的功能上加上了省电模式;其次,利用单片机的精确计数功能,可对时、分、秒进行精确的计数。

一 LED数码管的结构及原理 1.1 LED数码管的结构 LED数码管(LED Segment Displays)是由多个发光二极管封装在一起组成“8”字型的器件,引线已在内部连接完成,只需引出它们的各个笔划,公共电极。LED数码管常用段数一般为7段有的另加一个小数点,还有一种是类似于3位“+1”型。位数有半位,1,2,3,4,5,6,8,10位等等....,LED数码管根据LED的接法不同分为共阴和共阳两类,了解LED的这些特性,对编程是很重要的,因为不同类型的数码管,除了它们的硬件电路有差异外,编程方法也是不同的。图2是共阴和共阳极数码管的内部电路,它们的发光原理是一样的,只是它们的电源极性不同而已。颜色有红,绿,蓝,黄等几种。LED数码管广泛用于仪表,时钟,车站,家电等场合。选用时要注意产品尺寸颜色,功耗,亮度,波长等。下面将介绍常用LED数码管内部引脚图片 图1 这是一个7段两位带小数点 10引脚的LED数码 管 图2 引脚定义 每一笔划都是对应一个字母表示 DP是小数点. LED数码管要正常显示,就要用驱动电路来驱动数码管的各个段码,从而显示出我们要的数位,因此根据LED数码管的驱动方式的不同,可以分为静态式和动态式两类。

第十一节多个数码管动态显示

第十一节多个数码管动态显示 一、编写程序 步骤一:打开bascom-avr编程环境; 步骤二:新建空白编程文件; 步骤三:设置系统频率,系统的波特率 步骤四:输入程序 程序举例: 将下面程序在bascom-avr中编译及仿真 '—————————————————————————————————— '名称: 多个数码管动态显示程序 '目的: 多个数码管动态显示程序,了解I/0口及数码管。 '目标芯片: Mega16 '作者: 张恩锋 '编译环境: BASCOM-A VR 1.11.8.4 'protues 7仿真通过'——————————————————————————————————— $regfile = "m16def.dat" ' 单片机型号 $crystal = 8000000 ' 定义晶振频率 Config Porta = Output '定义A口为输出口Config Portb = Output Dim I As Byte Dim T As Byte Dim S As Byte Dim D As Byte Dim Dled(16) As Byte '定义七段数码管显示数据数组 Restore Dataled7 '为读入数据准备,调用子程序Daima For I = 1 To 16 '依次把0-F的显示值输入到数组Dled () Read Dled(i) Next I Do '死循环 S = &B00000001 '第一个显示数字的数码管为最低位 For I = 1 To 4 '在数码管上显示数字1-4循环4次 T = I + 1 '选择在数据数组中显示数字的对应数据 Porta = 0 '关数码管 Portb = S '数码管选择数据为二进制11111110 Porta = Dled(t) '显示数据 Waitms 1

数码管动态显示数字

7段数码管动态显示数字 一、实验原理图 共阳极的LED数码管,共阳就是7段的显示字码共用一个电源的正。 原理示意图: 数码管显示数字的两个条件为:1、是要在VT端(3/8脚)加正电源;2、要使(a,b,c,d,e,f,g,dp)端接低电平或“0”电平。这样才能显示的。例:如要显示“0”,则要 a,b,c,d,e,f六个字段亮就显示“0”了,而g和dp字段 程序使用时,只需将显示数字所对应的编码送P0口,然后打开相应的数码管显示位的 电源控制即可显示相应的字符。 两位数码管显示控制程序及说明 START: MOV R0,#0 ;清零

MOV DPTR,#TABLE ;指定查表起始地址LOOP: ACALL DISPLAY ;调用子程序DISPLAY INC R0 ;R0加1 CJNE R0,#100,LOOP ;R0未到100则转换 JMP START ;跳转 DISPLAY: MOV A,R0 ;把R0里的数据送入A MOV B,#10 ;把10送入B DIV AB ;a b相除 MOV 20H,A ;十位送入20H MOV 21H,B ;个位送入21H MOV R3,#50 ;把50送入R3 LOOP1: MOV A,21H ;取个位数 ACALL CHANG ;调用子程序CHANG CLR P2.4 ;开个位显示 ACALL DLY ;调用子程序DLY SETB P2.4 ;关闭个位显示 MOV A,20H ;取十位数 ACALL CHANG ;调用子程序CHANG CLR P2.5 ;开十位显示 ACALL DLY ;调用子程序DLY SETB p2.5 ;关闭十位显示 DJNZ R3,LOOP1 ;循环50次

数码管显示数字

在第6课里,我们讲到数码管的静态显示,利用静态显示法,通过控制位选和段选,可以让数任意几位数码管显示任意字符,但由于所有位数码管的相同的段选全部接在一起,所以只能同时显示相同的数字,例如8位同时显示8字,1、3、5位同时显示3字。但大家想一下,如果我们要让数码管同一时刻显示不同的数字,如图1所示的现象,用静态显示的方法就不能够实现,这里就只能用到动态显示的方法,今天这一节我们主要讲解数码管动态显示的原理的程序实现的方法。 图1 数码管同时显示123456 在讲解动态显示方法之前,我们先介绍在种数码管及单片机程序开发过程常用的方法-数组编码法。 1、数组编码 在跟数码管相关的程序中,可以对位进行编码,也可对段进行编码,这里我们以段编码进行讲解。通过第8课的程序我们知道,在位选确定后,要显示数字8时,P0=0x80,显示数字3时P0=0xb0,也就是0xb0,0x80分别可以表示数字3和8,按此方法,我们把在数码管上显示0-f,16个数字全部用16制度表示出来,这16个16进制数就称为数码管可显示0-f的相应的编码,如图2所示(注意共阳和共阴极数码管相应的编码有所不同,这里以实验板上共阳极的为例)。

图2 共阳极数码管编码 在编程中,编码的表示方法如下: unsigned char code table[]={ 0xc0,0xf9,0xa4,0xb0, 0x99,0x92,0x82,0xf8, 0x80,0x90,0x88,0x83, 0xc6,0xa1,0x86,0x8e }; 这里编码表示的方法与C语言中数组定义的方法基本一样。table是数组名,后面需加[],中括号中需加上数组中元素的个数,也可以不写。等号的右边用一个大括号将所有元素包含起来,里面的元素之间用“,”隔开,在大括号外用“;”结束。等号左边的unsigned char 是数据元素的数据类型,这里定义为无符号字符型,也就是元素的值范围只能是0-255之间。Code表示把这个数组定义为编码,这样定义的好处是其元素转化成二进文件后可能直接存储到程序存储器中,当然这里也可以不加code,但是这样编译后会将其直接存储到数据存储器中,要知道单片机中数据存储器的容量是非常有限的,定义为code后可节约单片机数据存储器的空间。 调用程序的方法如下, P0=table[1]; 这里表示将数组中的第2个元素(注意第一个是table[0])0xf9赋给P1口, 即P0=0xf9;也就是此时位被选通的数码管会显示数字2. 下面利用编码的方法让6个数码管以间隔1秒的时间循环显示0-f。相应程序如例1. 例1:6个数码管循环显示0-f #include #define uint unsigned int #define uchar unsigned char sbit duan=P2^6; sbit wei=P2^7;

相关文档
最新文档