LED数码管动态扫描显示实验

LED数码管动态扫描显示实验
LED数码管动态扫描显示实验

单片机实验五LED数码管动态扫描显示实验

一.实验目的

掌握LED数码管动态扫描显示的原理和编程实现方法。

二.实验原理

LED数码管动态扫描显示即各数码管循环轮流显示,当循环显示频率较高时,利用人眼的暂留特性,看不出闪烁现象,这种显示需要一个接口完成字形码的输出(段码),另一接口完成各数码管的点亮(位选)。

三.实验内容及要求

1.对于显示的字形码数据此实验采用查表的方法来完成。

2.此实验要求是在八个数码管中显示学生的班级号(如11040601)或日历年月日(如2014 05 20)。

四.实验电路

图中,SEG1为八个封装在一起的共阴数码管,RP1为排阻,其余同实验三,导线以总线形式完成。

五.实验步骤

1.在KEIL4中编写、调试、编译程序。

2.在PRTUSE中设计电路,加载HEX文件运行。

3.(1)将单片机实验箱通过USB口与PC机连接;

(2)用杜邦线(8根线)将实验箱上的JP8与J16连接(去掉原J15和J16之间的短路跳线帽),JP10与J12连接。

(3)打开实验箱电源开关POWER;

(4)打开STC自动下载器,将步骤1中创建的*.HEX文件下载到单片机,完成后观测LED数码管显示内容。

六.实验参考程序

(请同学自己编写实验程序)

七.思考题

1.某同学在实验时数码管闪烁,可能的原因是什么?

2.为节省I/O口,可采用7段译码器(比如CD4511,74LS 等)和3-8译码器74LS138,如何连接电路并编程。

LDE数码管动态试验

ORG 0000H

AJMP MAIN

ORG 0100H

MAIN: SP,#60H

MOV 30H,#02H

MOV 31H,#00H

MOV 32H,#01H

MOV 33H,#04H

MOV 34H,#00H

MOV 35H,#05H

MOV 36H,#02H

MOV 37H,#00H

START:MOV R0,#30H

MOV R3,#0FEH

NEXT: MOV P1,#0FFH

MOV A,@R0

MOV DPTR,#TAB

MOVC A,@A+DPTR

MOV P0,A

MOV P1,R3

LCALL DLY2MS

INC R0

JNB P1.7,STRAT

MOV A,R3

RL A

MOV R3,A

AJMP NEXT

DLY2MS:MOV R6,#2

DL2: MOV R7,#250

DL1:NOP

NOP

DJNZ R7,DL1

DJNZ R6,DL2

RET

TAB:DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH END

多位数码管动态扫描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单片机;数码管;滚动显示

基于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数码管动态显示的流程如下所示。

数码管动态扫描显示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

数码管动态显示实验报告

实验四数码管动态显示实验一 一、实验要求 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]; }

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

数码管动态显示c语言程序

//这是一个,四位数码管动态显示c语言程序,每隔一秒加一,直至加到9999为止#include unsigned char code LED[]={0xc0, 0xf9, 0xa4, 0xb0, 0x99, 0x92, 0x82, 0xf8, 0x80, 0x90}; unsigned char LEDbuff[]={0xff,0xff,0xff,0xff}; //定义数码管的位选段 sbit SEG_bit_1 = P0^1; sbit SEG_bit_2 = P0^2; sbit SEG_bit_3 = P0^3; sbit SEG_bit_4 = P0^4; unsignedintcnt=0; unsignedint sec =0; unsigned char i=0; void main() { TMOD=0x01; /*设置定时器*/ TH0=0xfc; TL0=0x18; TR0=1; EA=1; /*设置中断*/ ET0=1; while(1) { if(0==TF0) { if(cnt>=1000) { cnt=0; sec++; LEDbuff[0]=LED[sec%10]; /*设置数码管显示位*/ LEDbuff[1]=LED[sec/10%10]; LEDbuff[2]=LED[sec/100%10]; LEDbuff[3]=LED[sec/1000%10]; } } } } void interrupttimer0() interrupt 1 /*设置中断函数*/

{ TH0=0xfc; TL0=0x18; cnt++; P1=0xff; switch(i) { case 0: SEG_bit_1 = 1;SEG_bit_4 = 0;P1=LEDbuff[0];i++;break; case 1: SEG_bit_4 = 1;SEG_bit_3 = 0;P1=LEDbuff[1];i++;break; case 2: SEG_bit_3 = 1;SEG_bit_2 = 0;P1=LEDbuff[2];i++;break; case 3: SEG_bit_2 = 1;SEG_bit_1 = 0;P1=LEDbuff[3];i=0;break; default:break; } }

LED数码管动态显示

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口,然后打开相应的数码管显示位的电源控制即可显示相应的字符。

双位数码管显示控制程序及说明 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

8位数码管动态显示程序

/*----------------------------------------------- 名称:8位数码管动态扫描显示 论坛:https://www.360docs.net/doc/248919384.html, 编写:shifang 日期:2009.5 修改:无 内容:8位数码管分别显示不同数字,这种扫描显示方式成为动态扫描 ------------------------------------------------*/ #include //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义 #define DataPort P0 //定义数据端口程序中遇到DataPort 则用P0 替换 sbit LATCH1=P2^2;//定义锁存使能端口段锁存 sbit LATCH2=P2^3;// 位锁存 unsigned char code dofly_DuanMa[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};// 显示段码值01234567 unsigned char code dofly_WeiMa[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};//分别对应相应的数码管点亮,即位码 void Delay(unsigned int t); //函数声明 /*------------------------------------------------ 主函数 ------------------------------------------------*/ main() { unsigned char i=0; while(1) { DataPort=dofly_WeiMa[i]; //取位码 LATCH2=1; //位锁存 LATCH2=0; DataPort=dofly_DuanMa[i]; //取显示数据,段码 LATCH1=1; //段锁存 LATCH1=0; Delay(60000); // 扫描间隙延时,时间太长会闪烁,太短会造成重影, //这里故意延长时间,方便直观看出动态扫描原理 i++; if(8==i) //检测8位扫描完全结束?如扫描完成则从第一个 //开始再次扫描8位 i=0; }

四位数码管动态显示c语言程序

//这是一个四位数码管动态显示c语言程序,每隔一秒加一,直至加到9999为止//使用时需采用锁存器 #include #include"stdio.h" unsigned char code LED[]={0xc0, 0xf9, 0xa4, 0xb0, 0x99, 0x92, 0x82, 0xf8, 0x80, 0x90}; unsigned char LEDbuff[]={0xff,0xff,0xff,0xff}; //定义数码管的位选段 sbit SEG_bit_1 = P0^1; sbit SEG_bit_2 = P0^2; sbit SEG_bit_3 = P0^3; sbit SEG_bit_4 = P0^4; unsigned int cnt=0; unsigned int sec =0; unsigned int mini=0; unsigned int hour=0; unsigned char i=0; /*void delay(unsigned int z ) { unsigned int x,y; for(x=z;x>0;x--) for(y=110;y>0;y--); } */ void interrupttimer0() interrupt 1 /*设置中断函数*/ { TH0=0xfc; TL0=0x18; cnt++; //P1=0x80; //delay(1); switch(i) { case 0: SEG_bit_1 = 0;SEG_bit_4 = 1;P1=LEDbuff[0];i++;break; case 1: SEG_bit_4 = 0;SEG_bit_3 = 1;P1=LEDbuff[1];i++;break; case 2: SEG_bit_3 = 0;SEG_bit_2 = 1;P1=LEDbuff[2]&;i++;break; case 3: SEG_bit_2 = 0;SEG_bit_1 = 1;P1=LEDbuff[3];i=0;break; default:break; } } /************************************************ void serial_init() {

数码管动态显示程序

#include //#include #define uchar unsigned char #define uint unsigned int sbit we0=P3^4; sbit we1=P3^5; sbit we2=P3^6; sbit we3=P3^7; sbit led0=P2^0; sbit led1=P2^0; sbit led2=P2^0; sbit led3=P2^0; sbit led4=P2^0; sbit led5=P2^0; uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07, 0x07f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};//0123456789ABCDEF void delay_ms(uint x) { uint i,j; for(i=x;i>0;i--) for(j=240;j>0;j--); } void main() { while(1) { we3=0; P0=~table[1]; we0=1; we1=1; we2=1; delay_ms(1); we2=0; P0=~table[2]; we0=1;

we1=1; we3=1; delay_ms(1); we1=0; P0=~table[3]; we0=1; we3=1; we2=1; delay_ms(1); we0=0; P0=~table[4]; we3=1; we1=1; we2=1; delay_ms(1); } }

8段数码管动态显示详解

原理图:8 个数码管它的数据线并联接到 JP5,位控制由 8 个 PNP 型三级管驱动后由 JP8 引出。个。我们分别把他命名为 A,B,C,D,E,F,G,H 搞懂了这个原理, 我们如果要显示一个数字 2, 那么 A,B,G,E,D 这 5 个段的发光管亮就可以了。也就是把B,E,H(小数点)不亮,其余全亮。根据硬件的接法我们编出以下程序。当然在此之前,还必须指定哪一个数码管亮,这里我们就指定最后一个 P2.7。 显示数字 2 则是 C,F,H(小数点)不亮,同时由于接法为共阳接法,那么为 0(低电平)是亮 为 1(高电平)是灭。从高往低排列,(p0.7_p0.0)写成二进制为 01111110,把他转化为 16 进制则为 A2H。我们可以根据硬件的接线把数码管显示数字编制成一个表格,以后直接调用就行了。 原理图中把所有数码管的 8 个笔划段 a-h 同名端连在一起,而每一个 显示器的公共极 COM 是各自

独立地受 I/O 线控制。CPU 向字段输出口送出字形码时,所有显示器接收到相同的字形码,由 8 个 PNP 的三极管,来控制这 8 位哪一位工作,例如上面的 例子中我们选中的是 P2.7.就是最后的一位亮了. 同样的如果要第一位亮, 只 需要把程序 CLR P2.7 改为 CLR P2.0 即可。 在这里就有了一个矛盾, 所有数码管的 8 个笔划段 a-h 同名端连在一起, 那么在一个屏幕上如何显示 0,1,2,3,4,5 这样不同的数字呢? 的确, 在这样的接法中,同一个瞬间所有的数码管显示都是相同的, 不能显示不同的数字。在单片机里,首先显示一个数, 然后关掉.然后显示第二个数,又关掉, 那么将看到连续的数字显示,轮流点亮扫描过程中,每位显示器的点亮时间是极为短暂的(约 1ms),由于人的视觉暂留 现象及发光二极管的余辉效应,尽管实际上各位显示器并非同时点亮,但只要 扫描的速度足够快,给人的印象就是一组稳定的显示数据,不会有闪烁感。 例如数码管显示 01234567 这么 8 个数,在单片机中实际的工作流程如下:先打开 P2.0,送 0, 然后关掉 P2.0,开 P2.1 送 1, 再关掉 P2.1,打开 P2.2 送 2 , 依次向下,由于速度足够快, 那么我们将连续的看到 01234567 这 8 个数。 程序运行照片: 1、接 8 位数码管的数据线。将数码管部份的数据口 JP5 接到 CPU 部份的 P0 口 JP51. 2、接 8 位数码管的显示位线。将数码管部份的显示位口 JP8 接到 CPU 部份 的 P2 口 JP52. 程序流程图:

位数码管动态显示电路设计说明

电子课程设计 —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所示。 图1 数码管 数码管里有八个小LED 发光二极管,通过控制不同的LED 的亮灭来显示出不同的字形。数码管又分为共阴极和共阳极两种类型,其实共阴极就是将八个LED 的阴极连在一起,让其接地,这样给任何一个LED 的另一端高电平,它便能点亮。而共阳极就是将八个LED 的阳极连在一起。 2、非门 非门又称为反相器,是实现逻辑非运算的逻辑电路。非门有输入和输出两个端,电路符号如图2所示,其输出端的圆圈代表反相的意思,当其输入端为高电平时输出端为低电平,当其输入端为低电平时输出端为高电平。也就是说,输入端和输出端的电平状态总是反相的。其真值表如表1所示。 图2 非门 表1 真值表

数码管动态扫描显示实验

姓名:xxx 专业:电子信息工程学号:2010***** 日期:2012 11 30成绩: 实验七数码管动态扫描显示实验 一:实验目的 1、掌握Keil C51软件与proteus 软件的联合仿真调试的方法。 2、掌握单片机对数码管的动态显示控制方法。 3、掌握定时器的基本应用与编程方法。 二:实验内容 1、用proteus设计一8位数码管动态扫描显示电路。要求利用P0口作数码管的线段选线,P1.0~P1.2与74LS138译码器的3个输入端相连,其译码输出Y0~Y7作为数码管的位选线。 2、编写程序,将数字1~8分别显示在8个数码管上,要求显示无闪烁。 3、编写程序,利用Proteus中的“激励源/DCLOCK/数字类型/时钟”产生频率为1HZ的方波输出,并利用定时/计数器T1统计脉冲的个数,将统计结果动态实时在数码管上显示。该脉冲计数电路在以上电路的基础上自行修改。 4、实验电路: 5:、实验程序: 实验一: #include #define uchar unsigned char uchar code table[]={0xfc,0x60,0xda,0xf2,0x66,0xb6,0xbe,0xe0,0xfe,0xf6,0xee,0x3e,0x9c,0x7a,0x9e,0x8e};

uchar code adress[]={0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07}; void delay(a) { uchar i,j; for(;a>0;a--) for(i=142;i>0;i--) for(j=2;j>0;j--); } void main() { uchar m=0; uchar n; P0=0x00; while(1) { if(m==8)m=0; if(n==0)n=8; P1=adress[m++]; n=m; P0=table[n]; delay(5); } } 实验二: #include #define uchar unsigned char #define uint unsigned int #define ulong unsigned long ulong num; uchar code table1[]={0xfc,0x60,0xda,0xf2,0x66,0xb6,0xbe,0xe0,0xfe,0xf6,0xee,0x3e,0x9c,0x7a,0x9e,0x8e}; uchar code adress[]={0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07}; uchar table2[8]; void delay(a) { while(a--); } void main() { TMOD=0x60; TH1=TL1=0xff; EA=1;

相关文档
最新文档