数码管显示程序注释
- 格式:docx
- 大小:17.13 KB
- 文档页数:2
数码管动态显示程序编写步骤一、准备工作在编写数码管动态显示程序之前,我们需要准备以下工作:1. 硬件设备:数码管、开发板等;2. 开发环境:Arduino IDE等;3. 相关库函数:例如“TM1637.h”库。
二、引入库函数在编写数码管动态显示程序之前,我们首先需要在代码中引入相应的库函数。
在Arduino IDE中,可以通过“库管理器”来搜索并安装需要的库函数。
三、初始化设置在开始编写程序之前,我们需要先对数码管进行初始化设置。
这包括设置数码管的引脚连接方式、亮度等参数。
四、定义变量在程序中我们需要定义一些变量来保存要显示的数字、字符等信息。
可以根据需要定义不同类型的变量,例如整型、字符型等。
五、编写显示函数编写一个显示函数来控制数码管的显示效果。
该函数可以接收一个参数,用来指定要显示的内容。
六、主函数在主函数中,我们可以通过调用显示函数来控制数码管的显示效果。
可以根据需要设置循环次数、延时时间等参数,来实现不同的显示效果。
七、编译与上传在编写完程序后,我们需要将代码进行编译,并将程序上传到开发板中进行运行。
在Arduino IDE中,可以点击“编译”按钮进行代码的编译,然后点击“上传”按钮将代码上传到开发板。
八、调试与优化在程序运行过程中,可能会出现一些问题,例如数码管显示异常、数字错误等。
这时候我们需要对程序进行调试,并进行相应的优化。
可以通过添加调试信息、查看变量的值等方式来进行调试。
九、总结通过以上步骤,我们可以编写出一个简单的数码管动态显示程序。
通过调整不同的参数和函数,我们可以实现不同的显示效果。
读者可以根据自己的需求进一步扩展和优化程序,实现更加复杂的功能。
编写数码管动态显示程序并不复杂,只需要按照上述步骤进行操作即可。
希望本篇文章对读者有所帮助,能够让大家更好地理解和掌握数码管动态显示程序的编写方法。
祝大家编程愉快!。
数码管显示程序一、程序X11、程序X1的功能:最右边的数码管显示“0”2、程序:ORG 0LJMP STRORG 0100HSTR: MOV P3, #0FEH ;送最低位有效的位码MOV P0, #0C0H ;送“0”的段码“0C0H”SJMP STREND二、程序X2: 用查表方式显示某个显示缓冲器中的数字1、查表显示的预备知识设从右到左各显示器对应的显示缓冲器为片内RAM79H~7EH3、 实例:例:已知(79H )= 0 7H , 查段码表在最右边的数码管显示79H 中的“7”;注:共阳极的段码表:TAB: DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90HDB 88H,83H,0C6H,0A1H,86H,8EH,0FFH,0CH,89H,0DEH若:(A )= 0XH则数字“X ”对应的段码在段码表中的表地址 = TAB + XORG 0LJMP STRORG 0100H① 各显示器与显示缓冲器地址对应关系显示缓冲器: 7EH 7DH 7CH 7BH 7AH 79H对应显示器:② 显示缓冲器的值与显示数字的关系:显示缓冲器中的值 对应段码表地址 显示的数字0XH表首址+OXH XSTR: MOV P3, #11111110B ;送最低位有效的位码MOV 79H , #07H ;送要显示的数据到显示缓冲器MOV A , 79H ;显示缓冲器的数作为查表变址送A MOV DPTR , #TAB ;表首址送DPTRMOVC A , @A+ DPTR ;查表将数字转换为对应段码MOV P0, A ; 段码送段码口(P0)SJMP STRTAB: DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H DB 88H,83H,0C6H,0A1H,86H,8EH,0FFH,0CH,89H,0DEHEND例2:. 查段码表在最右边的数码管循环显示“0”~“F”ORG 0LJMP STRORG 0100HSTR: MOV P3, #11111110B ;送最低位有效的位码LP0: MOV 79H , #0H ;送要显示的数据的初值到显示缓冲器MOV R3 , #6 ; 送要显示的数据的个数LP: MOV A , 79H ;显示缓冲器的数作为查表变址送A MOV DPTR , #TAB ;表首址送DPTRMOVC A , @A+ DPTR ;查表将数字转换为对应段码MOV P0, A ; 段码送段码口(P0)LCALL SE19INC 79HDJMZ R3 ,LPSJMP LP0TAB: DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H DB 88H,83H,0C6H,0A1H,86H,8EH,0FFH,0CH,89H,0DEHSE19: MOV R6 , #0A0HLO36: MOV R7 , #0FFHLO35: DJNZ R7 , LO35DJNZ R6 , LO36RETEND3、修改程序查段码表在最左边的数码管循环显示“0”~“9”三、对6个数码管的操作程序X3四、功能:通过查表使6个数码管从右到左依次循环显示对应显示缓冲器79H~7EH中的数字0~51.程序:ORG 0LJMP X3ORG 0100HX3: SETB RS1 ;选工作寄存器2MOV SP , #40H ;设置堆栈指针MOV R0 , #79H ;对79H~7EH单元送0~5MOV R2 , #6 ;CLR A ;LP0: MOV @R0 , AINC AINC R0DJNZ R2, LP0LP1: M OV 30H , #11111110B ;对字位口送选择第一个数码管的位电平;反相后得有效的位码01H(共阳极) MOV R2 , #6 ;送数码管个数,即重复操作的次数 MOV R0 , #79H ;送第一个数码管对应的显存地址LP: MOV A ,30H ;送位码MOV P3 , A ;MOV A , @R0 ;要显示的数字送AMOV DPTR , #TAB ;送段码表的首地址MOVC A , @A + DPTR ;查表将A中的数字转换为其对应的段码MOV P0 , A ; 段码送段码口LCALL SE19 ;调延时MOV A , 30H ;位码左移一位,变为使下一个数码管的位;电平有效的位码RL A ;MOV 30H , A ;位码存回30H,解放AINC R0 ;显存地址加1,指向下一个显存地址DJNZ R2 , LP ;(R2)- 1不为0(即没有使所有数码管都显;示),转LP,继续使下一个数码管显示的操作。
两位半数码管程序-概述说明以及解释1.引言1.1 概述概述部分:半数码管是一种常见的数字显示装置,通常由LED灯构成。
在数字电子领域中,半数码管广泛应用于计数器、电子钟、温度计等设备中。
本文将介绍两位半数码管程序,通过编程实现对两位数的显示和控制。
两位半数码管程序是一种简单而实用的数字显示方案,可以通过控制每个数码管的LED灯点亮状态来显示0-99的数字。
通过分析和编程实现两位半数码管程序,读者可以了解数字显示技术的基本原理和应用场景,同时也可以学习如何利用编程语言实现数字显示功能。
本文将分别介绍两位半数码管程序的设计思路和代码实现,以帮助读者理解数字显示技术的实现过程。
同时,通过对比多种实现方案,读者可以了解不同方法的优缺点和适用场景,从而在实际项目中选择合适的方案。
综上所述,在数字电子领域中,两位半数码管程序是一种常见且实用的数字显示方案,通过本文的介绍和实践,读者可以更好地理解和应用这一技术,为自己的项目开发和学习提供参考和帮助。
1.2 文章结构文章结构部分包括了引言、正文和结论三个主要部分。
在引言部分,我们将介绍本文的概述、文章结构和目的。
在正文部分,我们将详细介绍两位半数码管程序的具体实现方法和代码。
最后,在结论部分,我们将总结本文的重点内容,探讨这两位半数码管程序的实践意义,并展望未来可能的发展方向。
通过这样的文章结构,读者可以清晰地了解本文的内容和框架,从而更好地理解和掌握两位半数码管程序的相关知识。
1.3 目的目的部分的内容:本文旨在介绍两位半数码管程序的设计与实现,通过对比不同的程序方案,展示不同的实现思路和技术手段。
通过深入分析每个程序的优缺点,读者可以更全面地了解数码管程序的设计原理和编程技巧。
同时,本文也旨在启发读者对数字电子技术的学习和应用,促进读者对数字电路的理解和实践能力的提升。
希望读者通过本文的阅读,能够对数码管程序有更深入的认识,为日后的电子项目开发提供有益的参考和借鉴。
51单片机(四位数码管的显示)程序基于单片机V1或V2实验系统,编写一个程序,实现以下功能:1)首先在数码管上显示“P_ _ _”4个字符;2)等待按键,如按了任何一个键,则将这4个字符清除,改为显示“0000”4个字符(为数字的0)。
最佳答案下面这个程序是4x4距阵键盘,LED数码管显示,一共可以到0-F显示,你可以稍微改一下就可以实现你的功能了,如还有问题请发信息,希望能帮上你!#include<at89x52.h>unsigned char codeDig[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1 ,0x86,0x8e}; //gongyang数码管0-F 代码unsigned char k; //设置全局变量k 为键盘的键值/************************************键盘延时函数****************************/void key_delay(void) //延时函数{int t;for(t=0;t<500;t++);}/************************************键盘扫描函数******************************/void keyscan(void) //键盘扫描函数{unsigned char a;P2 = 0xf0; //键盘初始化if(P2!=0xf0) //有键按下?{key_delay(); //延时if(P2!=0xf0) //确认真的有键按下?{P2 = 0xfe; //使行线P2.4为低电平,其余行为高电平key_delay();a = P2; //a作为缓存switch (a) //开始执行行列扫描{case 0xee:k=15;break;case 0xde:k=11;break;case 0xbe:k=7;break;case 0x7e:k=3;break;default:P2 = 0xfd; //使行线P2.5为低电平,其余行为高电平a = P2;switch (a){case 0xed:k=14;break;case 0xdd:k=10;break;case 0xbd:k=6;break;case 0x7d:k=2;break;default:P2 = 0xfb; //使行线P2.6为低电平,其余行为高电平a = P2;switch (a){case 0xeb:k=13;break;case 0xdb:k=9;break;case 0xbb:k=5;break;case 0x7b:k=1;break;default:P2 = 0xf7; //使行线P2.7为低电平,其余行为高电平a = P2;switch (a){case 0xe7:k=12;break;case 0xd7:k=8;break;case 0xb7:k=4;break;case 0x77:k=0;break;default:break;}}}break;}}}}/****************************** ***主函数*************************************/ void main(void){while(1){keyscan(); //调用键盘扫描函数switch(k) //查找按键对应的数码管显示代码{case 0:P0=Dig[0];break;case 1:P0=Dig[1];break;case 2:P0=Dig[2];break;case 3:P0=Dig[3];break;case 4:P0=Dig[4];break;case 5:P0=Dig[5];break;case 6:P0=Dig[6];break;case 7:P0=Dig[7];break;case 8:P0=Dig[8];break;case 9:P0=Dig[9];break;case 10:P0=Dig[10];break;case 11:P0=Dig[11];break;case 12:P0=Dig[12];break;case 13:P0=Dig[13];break;case 14:P0=Dig[14];break;case 15:P0=Dig[15];break;default:break; //退出}}}/**********************************end***************************************/。
项目3:数码管的显示专业:应用电子技术班级:092 学号:06号姓名:郑升一、思考题完成两个十进制数的加法,并在数码管上显示相加的结果。
提示:(1)完成BCD码的十进制相加;(2)将相加后的BCD码进行拆分;(3)生成ASCII码并显示二、设计思路老师给的要求是让我们把程序调试出来,然后修改一下,在数码管上显示出来,至于延时的长短可以做相应的改变,不过思考题让我是一阵头疼,平时没多上机练习一些,一时之间不知该怎么做。
三、接线图四、程序框图位选通信号(8002H)数据位(0FE06H)时钟位(8004H)五、参考程序OUTBIT equ 0FE02h ; 位控制口CLK164 equ 0FE04h ; 段控制口(接164时钟位) DAT164 equ 0FE06h ; 段控制口(接164数据位) IN equ 0FE00h ; 键盘读入口LEDBuf equ 60h ; 显示缓冲 Num equ 70h ; 显示的数据 DelayT equ 75h ; 0000 020055 ljmp StartLEDMAP: ; 八段管显示码 0003 3F065B 0006 4F666D0009 7D07 db 3fh, 06h, 5bh, 4fh, 66h, 6dh, 7dh, 07h 000B 7F6F77 000E 7C395E0011 7971 db 7fh, 6fh, 77h, 7ch, 39h, 5eh, 79h, 71hDelay: ; 延时子程序 0013 7F00 mov r7, #0 DelayLoop:0015 DFFE djnz r7, DelayLoop 0017 DEFC djnz r6, DelayLoop 0019 22 retDisplayLED:001A 7860 mov r0, #LEDBuf001C 7906 mov r1, #6 ; 共6个八段管 001E 7A20 mov r2, #00100000b ; 从左边开始显示 Loop:0020 90FE02 mov dptr, #OUTBIT 0023 7400 mov a, #00025 F0 movx @dptr, a ; 关所有八段管0026 E6 mov a, @r0开始 初始化显示参数关所有位显示 取显示数据数据移位输出到164 输出时钟脉冲到1648段码完成输出位选通信号延时位选通信号移位指向下一个显示数据返回6位完成0027 75F008 mov B, #8 ; 送164DLP:002A 33 rlc a002B FB mov r3, a002C 92E0 mov acc.0, c002E 90FE06 mov dptr, #DAT1640031 F0 movx @dptr, a0032 90FE04 mov dptr, #CLK1640035 D2E0 setb acc.00037 F0 movx @dptr, a0038 C2E0 clr acc.0003A F0 movx @dptr, a003B EB mov a, r3003C D5F0EB djnz B, DLP003F 90FE02 mov dptr, #OUTBIT0042 EA mov a, r20043 F0 movx @dptr, a ; 显示一位八段管0044 7E01 mov r6, #10046 1113 call Delay0048 EA mov a, r2 ; 显示下一位0049 03 rr a004A FA mov r2, a004B 08 inc r0004C D9D2 djnz r1, Loop004E 90FE02 mov dptr, #OUTBIT0051 7400 mov a, #00053 F0 movx @dptr, a ; 关所有八段管0054 22 retStart:0055 758140 mov sp, #40h0058 757000 mov Num, #0MLoop:005B 0570 inc Num005D E570 mov a, Num005F F5F0 mov b, a0061 7860 mov r0, #LEDBufFillBuf:0063 E5F0 mov a, b0065 540F anl a, #0fh0067 900003 mov dptr, #LEDMap006A 93 movc a, @a+dptr ; 数字转换成显示码006B F6 mov @r0,a ; 显示在码填入显示缓冲006C 08 inc r0006D 05F0 inc b006F B866F1 cjne r0, #LEDBuf+6, FillBuf0072 75751E mov DelayT,#30DispAgain:0075 111A call DisplayLED ; 显示0077 D575FB djnz DelayT,DispAgain007A 02005B ljmp MLoopend六、程序调试过程中的问题这次的实验相对以前难了很多,基本上就是我们按照老师给的程序,在硬件上运行显示,然后做小范围的改动,比如延时的长短,数码管显示的顺序之类的,根本无法在本质上给予改变和修改。
期中大作业学院:物理与电子信息工程学院课题:【利用8255和51单片机实现数码管显示按键数值的程序】要求:【4*4矩阵键盘,按0到15,数码管上分别显示0~9,A~F】芯片资料:8255:8255是Intel公司生产的可编程并行I/O接口芯片,有3个8位并行I/O口。
具有3个通道3种工作方式的可编程并行接口芯片(40引脚)。
其各口功能可由软件选择,使用灵活,通用性强。
8255可作为单片机与多种外设连接时的中间接口电路。
8255作为主机与外设的连接芯片,必须提供与主机相连的3个总线接口,即数据线、地址线、控制线接口。
同时必须具有与外设连接的接口A、B、C口。
由于8255可编程,所以必须具有逻辑控制部分,因而8255内部结构分为3个部分:与CPU连接部分、与外设连接部分、控制部分。
8255特性:1.一个并行输入/输出的LSI芯片,多功能的I/O器件,可作为CPU总线与外围的接口。
2.具有24个可编程设置的I/O口,即3组8位的I/O口,分别为PA口、PB口和PC 口。
它们又可分为两组12位的I/O口:A组包括A口及C口(高4位,PC4~PC7),B组包括B口及C口(低4位,PC0~PC3)。
A组可设置为基本的I/O口,闪控(STROBE)的I/O闪控式,双向I/O三种模式;B组只能设置为基本I/O或闪控式I/O两种模式,而这些操作模式完全由控制寄存器的控制字决定.引脚说明RESET:复位输入线,当该输入端处于高电平时,所有内部寄存器(包括控制寄存器)均被清除,所有I/O口均被置成输入方式。
CS:芯片选择信号线,当这个输入引脚为低电平时,即CS=0时,表示芯片被选中,允许8255与CPU进行通讯;CS=1时,8255无法与CPU做数据传输。
RD:读信号线,当这个输入引脚为低电平时,即CS=0且RD=0时,允许8255通过数据总线向CPU发送数据或状态信息,即CPU从8255读取信息或数据。
WR:写入信号,当这个输入引脚为低电平时,即CS=0且WR=0时,允许CPU将数据或控制字写入8255。
数码管静态显示程序源码解读数码管是一种常见的数字显示器件,它可以用来显示数字、字母、符号等信息。
在很多电子设备中,数码管都扮演着重要的角色。
本文将介绍数码管静态显示程序的源码,并对其进行解读。
数码管静态显示程序的源码如下:```#include <reg52.h>sbit D1 = P2^0;sbit D2 = P2^1;sbit D3 = P2^2;sbit D4 = P2^3;void main(){unsigned char num = 0;while(1){D1 = num % 10 == 1 ? 1 : 0;D2 = num % 10 == 2 ? 1 : 0;D3 = num % 10 == 3 ? 1 : 0;D4 = num % 10 == 4 ? 1 : 0;num++;if(num == 100){num = 0;}}}```该程序使用了51单片机的寄存器编程方式,通过控制P2口的四个引脚来控制数码管的显示。
其中,sbit是单片机中的一种特殊类型,用于定义单个引脚的输入输出状态。
在程序的主函数中,首先定义了一个无符号字符型变量num,并将其初始化为0。
然后进入一个无限循环,每次循环都会对num进行加1操作。
当num等于100时,将其重新赋值为0,以实现循环显示的效果。
在每次循环中,程序通过对num取模运算来判断应该显示哪些数字。
例如,当num % 10等于1时,将D1引脚设置为1,否则设置为0。
同理,对于D2、D3、D4引脚也进行了类似的操作。
这样就可以实现静态显示数字的效果。
需要注意的是,该程序只能显示0~4这五个数字,因为它只使用了四个引脚来控制数码管的显示。
如果要显示更多的数字,需要使用更多的引脚或者采用其他的显示方式。
数码管静态显示程序是一种比较简单的程序,通过对单片机的引脚进行控制,可以实现数字的静态显示。
对于初学者来说,这是一个很好的练手项目,可以帮助他们更好地理解单片机的编程原理。
七段数码管动态显示程序七段数码管动态显示程序2009-04-20 19:20:06| 分类:计算机阅读1288 评论1 字号:大中小订阅; 七段数码管动态显示程序; 四位数码管固定显示"1234";************************************************* ACC EQU [05H] ;定义专用寄存器ACCTBLP EQU [07H] ;定义专用寄存器TBLPPCL EQU [06H] ;定义专用寄存器PCLPA EQU [12H] ;定义专用寄存器PAPAC EQU [13H] ;定义专用寄存器PACPB EQU [14H] ;定义专用寄存器PBPBC EQU [15H] ;定义专用寄存器PBCPC EQU [16H] ;定义专用寄存器PCPCC EQU [17H] ;定义专用寄存器PCCDISP_RAM EQU [78H] ;查表得到显示代码DISP_RAM1 EQU [79H] ;数码管1显示内容寄存器DISP_RAM2 EQU [7AH] ;数码管2显示内容寄存器DISP_RAM3 EQU [7BH] ;数码管3显示内容寄存器DISP_RAM4 EQU [7CH] ;数码管4显示内容寄存器DISP_NUM1 EQU [7DH] ;每个数码管显示时延时寄存器DISP_NUM2 EQU [7EH] ;一次调用显示时延时寄存器NUM1 EQU 20H ;每个LED显示时延时参数NUM2 EQU 30H ;一次调用显示时延时参数;---------------------------------------- ORG 000HJMP START ;芯片上电,程序开始执行地址ORG 004HRETI ;外中断子程序开始地址ORG 008HRETI ;定时器0中断子程序开始地址ORG 00CHRETI ;定时器1中断子程序开始地址ORG 020HSTART:MOV A,00HMOV PAC,A ;设置PA口为输出口MOV PCC,A ;设置PC口为输出口SET PA ;PA口为高,关LED数码管CLR PC ;PC口为低,关四个三极管MAIN:MOV A,01HMOV DISP_RAM1,A ;数码管1显示"1"MOV A,02HMOV DISP_RAM2,A ;数码管2显示"2"MOV A,03HMOV DISP_RAM3,A ;数码管3显示"3"MOV A,04HMOV DISP_RAM4,A ;数码管4显示"4"MAIN1:CALL DISPLAY ;调显示子程序JMP MAIN1 ;反复循环.;*****************************************; DISPLAY [DISP_RAM1]==> LED1 [DISP_RAM2]==> LED2 ; [DISP_RAM3]==> LED3 [DISP_RAM4]==> LED4;*****************************************DISPLAY PROC ;显示子程序MOV A,NUM2MOV DISP_NUM2,A ;四个数码管循环显示的次数.LOOP:MOV DISP_NUM1,A ;数码管1 显示的延时时间设置.MOV A,04HMOV PC,A ;PC.2=1,数码管1的VDD接通MOV A,DISP_RAM1MOV TBLP,A ;取显示值,放入查表的偏移量寄存器TABRDL DISP_RAM ;查表,取显示代码MOV A,DISP_RAMMOV PA,A ;将显示代码输出到PA口LOOP1:DEC DISP_NUM1SZ DISP_NUM1JMP LOOP1 ;延时功能SET PA ;关显示CLR PC.2 ;PC.2=0,数码管1的VDD断开MOV A,NUM1MOV DISP_NUM1,A ;数码管2 显示的延时时间设置MOV A,08HMOV PC,A ;PC.3=1,数码管2的VDD接通MOV A,DISP_RAM2MOV TBLP,A ;取显示值,放入查表的偏移量寄存器TABRDL DISP_RAM ;查表,取显示代码MOV A,DISP_RAMMOV PA,A ;将显示代码输出到PA口LOOP2:DEC DISP_NUM1SZ DISP_NUM1JMP LOOP2 ;延时功能SET PA ;关显示CLR PC.3 ;PC.3=0,数码管2的VDD断开MOV DISP_NUM1,A ;数码管3 显示的延时时间设置.MOV A,10HMOV PC,A ;PC.4=1,数码管3的VDD接通MOV A,DISP_RAM3MOV TBLP,A ;取显示值,放入查表的偏移量寄存器TABRDL DISP_RAM ;查表,取显示代码MOV A,DISP_RAMMOV PA,A ;将显示代码输出到PA口LOOP3:DEC DISP_NUM1SZ DISP_NUM1JMP LOOP3 ;延时功能SET PA ;关显示CLR PC.4 ;PC.4=0,数码管3的VDD断开MOV A,NUM1MOV DISP_NUM1,A ;数码管4 显示的延时时间设置.MOV A,20HMOV PC,A ;PC.5=1,数码管4的VDD接通MOV A,DISP_RAM4MOV TBLP,A ;取显示值,放入查表的偏移量寄存器TABRDL DISP_RAM ;查表,取显示代码MOV A,DISP_RAMMOV PA,A ;将显示代码输出到PA口LOOP4:DEC DISP_NUM1SZ DISP_NUM1JMP LOOP4 ;延时功能SET PA ;关显示CLR PC.5 ;PC.5=0,数码管4的VDD断开DEC DISP_NUM2 ;循环显示次数-1SZ DISP_NUM2 ;判断循环结束否?JMP LOOP ;没结束,跳去LOOP,继续循环RET ;循环结束,子程序返回.DISPLAY ENDP;****************************************; WORK1;****************************************WORK1 PROC ;WORK1功能模块,留给学习者自己加RETWORK1 ENDP;****************************************; WORK2;****************************************WORK2 PROC ;WORK2功能模块,留给学习者自己加RETWORK2 ENDP;************************************************************** **; 表格区,0~9对应的显示代码.;************************************************************** **ORG 0F00H; 0 1 2 3 4 5 6 7 8 9 TABLE: DW 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H ;************ ****************************************************END。
数码管静态显示程序源码解读1. 任务背景数码管是一种常见的显示设备,可以用于显示数字、字母、符号等信息。
静态显示是指将需要显示的内容直接显示在数码管上,而不进行滚动或闪烁等效果。
在这个任务中,我们将解读一个数码管静态显示程序源码,以帮助读者理解如何控制数码管进行静态显示。
2. 源码解读2.1 引用库源码开头部分通常会包含一些引用库的语句,用于导入所需的库文件。
在这个源码中,我们需要引用”Arduino.h”库文件,该文件提供了与Arduino开发板相关的函数和变量。
#include <Arduino.h>2.2 定义引脚在使用数字管显示时,需要将数字管的引脚与Arduino开发板进行连接。
引脚定义部分会告诉我们连接哪些引脚。
#define A 2#define B 3#define C 4#define D 5#define E 6#define F 7#define G 8#define DP 9这里通过#define定义了8个引脚,分别对应数码管的A、B、C、D、E、F、G、DP 引脚。
2.3 初始化引脚在开始使用引脚前,需要先将引脚进行初始化。
初始化主要是设置引脚的输入或输出模式。
void setup() {pinMode(A, OUTPUT);pinMode(B, OUTPUT);pinMode(C, OUTPUT);pinMode(D, OUTPUT);pinMode(E, OUTPUT);pinMode(F, OUTPUT);pinMode(G, OUTPUT);pinMode(DP, OUTPUT);}这里使用了pinMode函数将A、B、C、D、E、F、G、DP引脚都设置为输出模式。
2.4 定义数码管显示函数在这个源码中,定义了一个名为displayDigit的函数,用于将数字显示在数码管上。
void displayDigit(int digit) {switch (digit) {case 0:digitalWrite(A, HIGH);digitalWrite(B, HIGH);digitalWrite(C, HIGH);digitalWrite(D, HIGH);digitalWrite(E, HIGH);digitalWrite(F, HIGH);digitalWrite(G, LOW);digitalWrite(DP, LOW);break;case 1:digitalWrite(A, LOW);digitalWrite(B, HIGH);digitalWrite(C, HIGH);digitalWrite(D, LOW);digitalWrite(E, LOW);digitalWrite(F, LOW);digitalWrite(G, LOW);digitalWrite(DP, LOW);break;case 2:digitalWrite(A, HIGH);digitalWrite(B, HIGH);digitalWrite(C, LOW);digitalWrite(D, HIGH);digitalWrite(E, HIGH);digitalWrite(F, LOW);digitalWrite(G, HIGH);digitalWrite(DP, LOW);break;// more cases for digits 3 to 9...default:// default case for other digitsbreak;}}这个函数采用了switch语句,根据输入的数字参数,设置对应的引脚状态以显示相应的数字。
STM32--数码管显⽰使⽤STM32 – 数码管显⽰简介1.硬件部分STM32F103C8T6 最⼩系统板 ⼀位共阴数码管2.软件部分Keil软件编程 数码管码表硬件部分数码管简介数码管,也称作辉光管,是⼀种可以显⽰数字和其他信息的电⼦设备。
玻璃管中包括⼀个⾦属丝⽹制成的阳极和多个阴极。
⼤部分数码管阴极的形状为数字。
管中充以低压⽓体,通常⼤部分为氖加上⼀些汞和/或氩。
给某⼀个阴极充电,数码管就会发出颜⾊光,视乎管内的⽓体⽽定,⼀般都是橙⾊或绿⾊。
分类数码管也称LED数码管,不同⾏业⼈⼠对数码管的称呼不⼀样,其实都是同样的产品。
按发光⼆极管单元连接⽅式可分为共阳极数码管和共阴极数码管。
共阳数码管是指将所有发光⼆极管的阳极接到⼀起形成公共阳极(COM)的数码管,共阳数码管在应⽤时应将公共极COM接到+5V,当某⼀字段发光⼆极管的阴极为低电平时,相应字段就点亮,当某⼀字段的阴极为⾼电平时,相应字段就不亮。
共阴数码管是指将所有发光⼆极管的阴极接到⼀起形成公共阴极(COM)的数码管,共阴数码管在应⽤时应将公共极COM接到地线GND上,当某⼀字段发光⼆极管的阳极为⾼电平时,相应字段就点亮,当某⼀字段的阳极为低电平时,相应字段就不亮。
1.共阳数码管共阳数码管在应⽤时应将公共极COM接到+5V,当某⼀字段发光⼆极管的阴极为低电平时,相应字段就点亮,当某⼀字段的阴极为⾼电平时,相应字段就不亮。
2.共阴数码管对于共阴极数码管来说,当某个发光⼆极管的阳极为⾼电平时,发光⼆极管点亮,相应的段被显⽰。
同样,共阳极数码管的阳极连接在⼀起,公共阳极接+5V,当某个发光⼆极管的阴极接低电平时,该发光⼆极管被点亮,相应的段被显⽰数码管码表unsigned char code smgduan[17] ={0xc0, 0xf9, 0xa4, 0xb0, 0x99, 0x92, 0x82, 0xf8,0x80, 0x90, 0x88, 0x83, 0xc6, 0xa1, 0x86, 0x8e};//共阳数码管unsigned char code smgduan[17]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};共阴数码管静态数码管硬件电路设计实物软件部分/*********************************************************************** ⽂件名:smg.c* 描述:smg 应⽤函数库* 硬件连接:-----------------* | PA0 - A |* | PA1 - B |* | PA2 - C |* | PA3 - D |* | PA4 - E |* | PA5 - F |* | PA6 - G |* | PA7 - DP |* -----------------*********************************************************************/#include "smg.h"#include "delay.h"//共阳数码管断码表u8 const smg_data[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};/** 函数名:SMG_GPIO_Config* 描述:配置数码管⽤到的I/O⼝* 输⼊:⽆* 输出:⽆*/void SMG_GPIO_Config(void){GPIO_InitTypeDef GPIO_InitStructure;RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOA, ENABLE);GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3 | GPIO_Pin_4 | GPIO_Pin_5 | GPIO_Pin_6 | GPIO_Pin_7;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOA, &GPIO_InitStructure);GPIO_SetBits(GPIOA, GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3 | GPIO_Pin_4 | GPIO_Pin_5 | GPIO_Pin_6 | GPIO_Pin_7); // turn o ff all led}/** 函数名:SMG_Display* 描述:驱动数码管显⽰0-F* 输⼊:⽆* 输出:⽆*/void SMG_Display(void){u8 i;for(i=0;i<16;i++){GPIO_Write(GPIOA,smg_data[i]);delay_ms(1000);}}void Display_N(u8 N){GPIO_Write(GPIOA,smg_data[N]);}smg.h#ifndef __SMG_H#define __SMG_H#include "stm32f10x.h"void SMG_GPIO_Config(void);void SMG_Display(void);void Display_N(u8 N);#endif /* __SMG_H */数码管案例(基于51单⽚机四位数码管模块(74HC595))14脚:DS(SER),串⾏数据输⼊引脚13脚:OE, 输出使能控制脚,它是低电才使能输出,所以接GND12脚:RCK,存储寄存器时钟输⼊引脚。
数码管静态显示程序源码解读数码管静态显示程序源码解读数码管是一种常见的数字显示器件,它可以用来显示数字、字母等字符。
在嵌入式系统中,常使用数码管作为输出设备,通过编写程序控制其显示内容。
下面是一个数码管静态显示程序的源码解读。
代码如下:```#include <reg52.h> //头文件#define uint unsigned int //定义无符号整型#define uchar unsigned char //定义无符号字符型sbit LSA=P2^2; //定义LSA引脚sbit LSB=P2^3; //定义LSB引脚sbit LSC=P2^4; //定义LSC引脚void delay(uint i) //延时函数{while(i--);}void datapros(uchar dat) //数据处理函数{switch(dat) //根据输入的数据选择相应的输出方式 {case(0): LSA=0;LSB=0;LSC=0;break;case(1): LSA=1;LSB=0;LSC=0;break;case(2): LSA=0;LSB=1;LSC=0;break;case(3): LSA=1;LSB=1;LSC=0;break;case(4): LSA=0;LSB=0;LSC=1;break;case(5): LSA=1;LSB=0;LSC=1;break;case(6): LSA=0;LSB=1;LSC=1;break;case(7): LSA=1;LSB=1;LSC=1;break;default:break;}}void main() //主函数{uchar i;while(1){for(i=0;i<8;i++) //循环输出0~7{datapros(i); //调用数据处理函数delay(10000); //延时}}}```这段程序的作用是通过三个引脚控制数码管的显示,实现静态显示0~7的数字。
51单片机(四位数码管的显示)程序基于单片机V1或V2实验系统,编写一个程序,实现以下功能:1)首先在数码管上显示“P_ _ _”4个字符;2)等待按键,如按了任何一个键,则将这4个字符清除,改为显示“0000”4个字符(为数字的0)。
最佳答案下面这个程序是4x4距阵键盘,LED数码管显示,一共可以到0-F显示,你可以稍微改一下就可以实现你的功能了,如还有问题请发信息,希望能帮上你!#include<at89x52.h>unsigned char codeDig[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1 ,0x86,0x8e}; //gongyang数码管0-F 代码unsigned char k; //设置全局变量k 为键盘的键值/************************************键盘延时函数****************************/void key_delay(void) //延时函数{int t;for(t=0;t<500;t++);}/************************************键盘扫描函数******************************/void keyscan(void) //键盘扫描函数{unsigned char a;P2 = 0xf0; //键盘初始化if(P2!=0xf0) //有键按下?{key_delay(); //延时if(P2!=0xf0) //确认真的有键按下?{P2 = 0xfe; //使行线P2.4为低电平,其余行为高电平key_delay();a = P2; //a作为缓存switch (a) //开始执行行列扫描{case 0xee:k=15;break;case 0xde:k=11;break;case 0xbe:k=7;break;case 0x7e:k=3;break;default:P2 = 0xfd; //使行线P2.5为低电平,其余行为高电平a = P2;switch (a){case 0xed:k=14;break;case 0xdd:k=10;break;case 0xbd:k=6;break;case 0x7d:k=2;break;default:P2 = 0xfb; //使行线P2.6为低电平,其余行为高电平a = P2;switch (a){case 0xeb:k=13;break;case 0xdb:k=9;break;case 0xbb:k=5;break;case 0x7b:k=1;break;default:P2 = 0xf7; //使行线P2.7为低电平,其余行为高电平a = P2;switch (a){case 0xe7:k=12;break;case 0xd7:k=8;break;case 0xb7:k=4;break;case 0x77:k=0;break;default:break;}}}break;}}}}/****************************** ***主函数*************************************/ void main(void){while(1){keyscan(); //调用键盘扫描函数switch(k) //查找按键对应的数码管显示代码{case 0:P0=Dig[0];break;case 1:P0=Dig[1];break;case 2:P0=Dig[2];break;case 3:P0=Dig[3];break;case 4:P0=Dig[4];break;case 5:P0=Dig[5];break;case 6:P0=Dig[6];break;case 7:P0=Dig[7];break;case 8:P0=Dig[8];break;case 9:P0=Dig[9];break;case 10:P0=Dig[10];break;case 11:P0=Dig[11];break;case 12:P0=Dig[12];break;case 13:P0=Dig[13];break;case 14:P0=Dig[14];break;case 15:P0=Dig[15];break;default:break; //退出}}}/**********************************end***************************************/。
/*****************************************************
(本程序基于本人单片机实际电路开发,只需改动个别地方,即可实现)
数码管显示其实就是利用视觉停留来显示
实际上它是一个接着一个亮,但人以为是一起亮的
当然它也可以全部一起亮(不同数字)但物理连接麻烦得多,成本高,所以一般不采用(个人理解)
***************************************************/
#include<reg51.h>
#define unint unsigned int
#define unchar unsigned char
/*****************************************************
位声明
***************************************************/
sbit guan1=P2^4; //位选:第1个数码管io
sbit guan2=P2^5; //位选:第2个数码管io
sbit guan3=P2^6; //位选:第3个数码管io
sbit guan4=P2^7; //位选:第4个数码管io
unsigned char code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; //数码管编码
/*****************************************************
函数功能:延时
***************************************************/
void delay(unsigned int i)
{
unsigned char j;
for(;i>0;i--)
for(j=110;j>0;j--);
}
void display(unint num)//带参数显示函数
{
unchar ge,shi,bai,qian,sh,fe; //存储个,十,百,千位的空间
sh=num/100; //将num数的前两位分离并存储在sh
fe=num%100;//将num数的后两位分离并存储在fe
guan1=0;//P2=0Xbf;//11101111 第一个数码管亮位选开
qian=sh/10; //分离千位
P0=table[qian];//段选
delay(60); //延时
guan1=1; //位选关
guan2=0;//P2=0X7f;//11011111
bai=sh%10; //分离百位
P0=table[bai]; //段选
delay(60); //延时
guan2=1; //位选关
guan3=0;//P2=0Xef;//10111111
shi=fe/10; //分离十位
P0=table[shi];
delay(60);
guan3=1;
P0=0xff; delay(10);
guan4=0;//P2=0Xdf;//01111111
ge=fe%10; //分离个位
P0=table[ge];
delay(60);
guan4=1;
P0=0xff;
}
void main()
{
while(1)
{
display(122); //123可以改成任意数,就是在数码管中显示的数
}
}。