51单片机项目教程项目 6 数码管静态显示
- 格式:pptx
- 大小:872.36 KB
- 文档页数:8
单片机数码管静态显示实验程序org 00hnum equ p0;p0口连接数码管clr p2.0;mov dptr ,#tabclr amov r2,#0loop:movc a,@a+dptrmov num ,aacall delay_200msinc r2mov a,r2cjne r2,#15, loopmov r2,#0clr aajmp looptab :DB0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H,88H,83H,0C6H,0A1H,86H,8EHdelay_200ms:mov r3,#20delay:acall delay_10msdjnz r3,delayret;;;;;;;;;;;;;;;;非中断精确delay_1ms:MOV R7 ,#249signed:nopnopdjnz R7 ,signed 1MS定时程序;循环部分;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4机器周期ret;2+249*4+2=1000us;返回指令2机器周期可以精确定时1MS,假设外部晶振是12M;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;非中断精确10MS 定时程序;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; mov r6,#9;2个机器周期用2usdelay_10ms_sined: ;9次循环共用 9(1ms+4us)=9036us acalldelay_1msdjnz r6,delay_10ms_sinedMOV r6 ,#240;2个机器中期用 2ussigned_10ms :;循环部分 4机器周期共240次nopnopdjnz r6 ,signed_10msret;返回指令要2us;2us+9036us+240*4us+2us = 10ms 即可精确定时10ms ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;非中断精确定时 1s;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;delay_1s:mov r5,#99delay_1s_signed:acall delay_10msdjnz r5,delay_1s_signed mov r5 ,#9signed_1s:acall delay_1msdjnz r5 ,signed_1smov r5 ,# 140signed_1s_:nopnopdjnz r5,signed_1s_;两个机器周期2us;循环指令周期为4us,加上延时10ms;(10ms+4us)*99 = 990.396ms;两个机器周期2us;循环指令周期为4us,加上延时1ms;(1ms+4us)*9 = 9ms+36us;机器周期2us;一次循环4us共有140次。
单片机数码管的静态显示是一种常见的数字显示方式,它通过单片机控制数码管的每个段(a~g、dp)的开关状态,以显示所需的数字或字符。
以下是单片机数码管静态显示的基本原理:1. 数码管构成:数码管通常由七段LED(a~g)和一个小数点(dp)组成。
每个段代表数字或字符的一部分。
2. 驱动电路:数码管需要适当的电流和电压来点亮各个段。
通常,使用共阳极(Common Anode)或共阴极(Common Cathode)的数码管。
-共阳极数码管:该类型的数码管的阳极(正极)是共用的,而七段LED的阴极(负极)是分开的。
通过向某个段的阴极引入低电平(通电),并向共阳极引入高电平(不通电),就可以点亮该段。
其他段则保持高电平,不点亮。
-共阴极数码管:该类型的数码管的阴极是共用的,而七段LED的阳极是分开的。
通过向某个段的阳极引入高电平(通电),并向共阴极引入低电平(不通电),就可以点亮该段。
其他段则保持低电平,不点亮。
3. 单片机控制:使用单片机(如Arduino、PIC、8051等)来控制数码管的静态显示。
通过单片机的GPIO(通用输入输出)引脚连接到数码管的各个段,可以控制每个段的开关状态。
-共阳极数码管控制:通过将特定的段引脚设置为低电平(通电),并将共阳极引脚设置为高电平(不通电),来点亮该段。
其他段的引脚则设置为高电平,不点亮。
-共阴极数码管控制:通过将特定的段引脚设置为高电平(通电),并将共阴极引脚设置为低电平(不通电),来点亮该段。
其他段的引脚则设置为低电平,不点亮。
4. 数据刷新:由于单片机的处理速度很快,对人眼来说会感觉到数码管的显示是同时发生的。
实际上,单片机会不断地刷新数码管的显示。
它通过快速地切换各个段的开关状态,使人眼感知到连续的静态显示。
通过以上的原理,单片机可以根据需要控制数码管的每个段的开关状态,以实现所需的数字或字符的显示。
第1篇一、实验目的1. 熟悉数码管的结构和原理,掌握数码管的静态显示方法。
2. 学习使用单片机控制数码管显示数字的方法。
3. 提高编程能力和实际动手操作能力。
二、实验原理数码管是一种用于显示数字和符号的电子显示器件,它由若干个发光二极管(LED)组成,每个LED对应数码管的一个段,通过控制LED的亮与灭,可以显示出相应的数字和符号。
本实验采用共阴极数码管,当对应的段亮起时,显示相应的数字。
数码管的静态显示方式是指,当数码管显示一个数字时,该数字的各个段都会持续亮起,直到下一次更新显示内容。
三、实验设备1. 单片机实验箱2. AT89C51单片机3. 5V电源4. 共阴极数码管5. 连接线6. 调试工具(如示波器、万用表等)四、实验步骤1. 连接电路:按照实验原理图,将单片机的P0口与数码管的各个段连接,将单片机的VCC和GND与数码管的VCC和GND连接。
2. 编写程序:使用C语言编写程序,控制单片机输出相应的数字到数码管。
3. 烧录程序:将编写的程序烧录到单片机中。
4. 调试程序:使用调试工具观察数码管显示的数字,确认程序运行正常。
5. 修改程序:根据实验要求,修改程序,实现不同的显示效果。
五、实验内容1. 显示数字0-9:编写程序,使数码管依次显示数字0-9。
2. 显示特殊字符:编写程序,使数码管显示特殊字符,如“”、“”等。
3. 显示自定义字符:编写程序,使数码管显示自定义的字符,如“ABC”等。
4. 显示数字与字符混合:编写程序,使数码管同时显示数字和字符。
六、实验结果与分析1. 显示数字0-9:程序运行正常,数码管依次显示数字0-9。
2. 显示特殊字符:程序运行正常,数码管显示特殊字符。
3. 显示自定义字符:程序运行正常,数码管显示自定义字符。
4. 显示数字与字符混合:程序运行正常,数码管同时显示数字和字符。
在实验过程中,遇到以下问题:1. 数码管显示不清晰:经过检查,发现数码管与单片机的连接线存在松动,重新连接后,数码管显示清晰。
33第2卷 第22期产业科技创新 2020,2(22):33~34Industrial Technology Innovation 基于51单片机实现LED数码管静态与动态显示的设计浅析龙 志(广州大学松田学院,广州 增城 511370)摘要:随着社会的发展,在我们日常的生活中,数码管的应用随处可见,尤其是在电子应用设计显示等方面常常发挥着非常重要的作用,因此研究数码管的显示有非常重要的现实意义。
数码管我们可以分为静态显示和动态显示,这两种显示有着本质的区别,静态显示的特点是占用CPU 时间少,显示便于监测和控制,显示字形稳定,而动态数码管的显示,效果相对静态显示亮度差少许,但成本较低。
本设计主要是基于51单片机,先通过结合集成芯片74HC573对LED 数码管静态显示的硬件电路设计与分析,进一步拓展到采用芯片74HC138与LED 数码管动态显示的硬件电路设计与分析,最终实现两种不同的电路设计显示的方法。
关键词:LED 数码管;静态显示;动态显示;51单片机中图分类号:TP368.12 文献标识码:A 文章编号:2096-6164(2020)22-0033-02随着电子应用技术的不断发展,显示电路在电子设计应用方面更加广泛,尤其是LED 数码管显示在各行各业中的应用更加重要,如红绿交通灯显示,电子时钟显示,家电产品功能显示等方面都需要用到LED 数码管作为显示。
因此,对LED 数码管的显示控制有着非常重要的现实意义。
因此我们要实现LED 数码管的熟练显示控制,我们必须要根据数码管的特点来进行分析和设计,数码管有静态显示和动态显示的两种方法,接下对这两种电路作详细的分析与设计,最终实现对LED 数码管静态与动态的两种不同显示设计方法。
1 数码管静态显示电路设计数码管静态显示设计是利用MCS-51单片机结合两片集成芯片74HC573,实现对4个LED 数码管的显示控制。
具体设计如图1所示:图1 数码管静态显示设计电路图本电路设计主要是利用单片机的P0口来实现对数码管的位选控制与段选的控制,P0口之所以能够正确的对数码管进行位选与段选的控制,关键是在于设计中使用了芯片74HC573。
电子信息与自动化学院《可编程逻辑器件》实验报告学号:姓名:实验名称:数码管静态显示一、实验原理七段数码管是电子开发过程中常用的输出显示设备。
在实验系统中使用的是四个共阳极型七段数码管。
由于七段数码管公共端连接到VCC(共阳极型),当送入一次字形码后,显示字形可一直保持,直到送入新字形码为止。
图1数码管原理图图2程序设计大致流程图二、实验步骤1、打开QuartusII软件,新建一个工程然后创建一个Verilog File,打开VHDL编辑对话框进行编程;2、主要程序如下:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_arith.all;use ieee.std_logic_unsigned.all;entity JINGTAI isport (clk:in std_logic;x: out std_logic_vector(6 downto 0);y: out std_logic_vector(3 downto 0));end JINGTAI;architecture behave of JINGTAI issignal number :integer range 50000000 downto 0;signal count: std_logic_vector (1 downto 0);signal key: std_logic_vector (3 downto 0);beginy<="0000";PROCESS(clk)begin if clk'event and clk='1' then if number<50000000 thennumber <= number+1;else number <= 0;key <= key +1;end if;end if;end process;process(key)begincase key iswhen "0000" => x <= "1000000" ;when "0001" => x <= "1111001" ;when "0010" => x <= "0100100" ;when "0011" => x <= "0110000" ;when "0100" => x <= "0011001" ;when "0101" => x <= "0010010" ;when "0110" => x <= "0000010" ;when "0111" => x <= "1111000" ;when others => null;end case;end process;end behave;3、引脚锁定图3 引脚锁定三、实验结果仿真图如下:图4时序仿真图由以上可知,实验结果符合要求,则设计成功。
51单片机数码管显示实验实验内容:1)编写程序让8只数码管初始显示0,每隔大约1s加1显示(可以用延时函数实现),到数码管显示9后,再从0开始显示,如此循环反复。
2)C语言程序#include<reg52.h>#define uint unsigned intvoid display();void num();int i;unsigned char code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8, 0x80,0x90,0x88,0x83, 0xc6,0xa1,0x86,0x8e}; //共阳极数码管0-F编码表void delayms(uint);void main(){while(1){num();display();}}void display(){P2=0xff;//消隐P0连接段选,P1节位选P1=0x00;//8个数码管同时显示P2=table[i];//数码管显示数码0 delayms(1000);//延时5ms}void num(){if(i<9)i++;elsei=0;}void delayms(uint x){uint i,j;for(i=0;i<x;i++)for(j=0;j<110;j++);}3)汇编语言:ORG 0000HLJMP MAINORG 0100H;P2连接段选,P1节位选MAIN: MOV P1,#00H ;所有的数码管都显示MOV R2,#00H ;从0开始显示LOOP: MOV A,R2 ;为下面的基址加变址寄存器寻址方式做准备MOV DPTR,#TAB1 ;把数组的首地址赋给DPTRMOVC A,@A+DPTR ;取数组中的数字MOV P2,A ;把取得的值送给P0口显示ACALL DELAY ;延时一会INC R2 ;为取下一个数加一CJNE R2,#10,LOOP ;只要数小于10就继续循环显示MOV R2,#00H ;如果加到10后重新从0开始LJMP LOOP ;进入循环函数;****************************************** TAB1: DB 0C0H,0F9H,0A4H,0B0H,99H; 数组DB 92H,82H,0F8H,80H,90HRET;****************************************** DELAY: MOV R3,#3 ;延时函数DE1: MOV R4,#0FFHDE2: MOV R5,#0FFHDJNZ R5,$DJNZ R4,DE2DJNZ R3,DE1RET;*************************************************END(3)编写程序学习数码管的动态显示,让8只数码管从从左往右显示1、2、3……8。
实验四数码管静态显示一、实验目的1.熟练掌握单片机定时器的原理和应用方法。
2.了解数码管的原理,掌握数码管的真值表的计算方法。
二、实验内容通过对单片机编程来实现数码管静态显示。
三、实验知识点3.1定时器的初步认识时钟周期:时钟周期T是时序中最小的时间单位具体计算的方法就是1/时钟源,我们KST-51单片机开发板上用的晶振是11.0592M,那么对于我们这个单片机系统来说,时钟周期=1/11059200秒。
机器周期:我们的单片机完成一个操作的最短时间。
机器周期主要针对汇编语言而言,在汇编语言下程序的每一条语句执行所使用的时间都是机器周期的整数倍,而且语句占用的时间是可以计算出来的,而C语言一条语句的时间是不可计算的。
51单片机系列,在其标准架构下一个机器周期是12个时钟周期,也就是12/11059200秒。
定时器和计数器。
定时器和计数器是单片机内部的同一个模块,通过配置SFR(特殊功能寄存器)可以实现两种不同的功能。
顾名思义,定时器就是用来进行定时的。
定时器内部有一个寄存器,我们让它开始计数后,这个寄存器的值每经过一个机器周期就会加1一次,因此,我们可以把机器周期理解为定时器的计数周期。
我们的秒表,每经过一秒,数字加1,而这个定时器就是每过一个机器周期的时间,也就是12/11059200秒,数字加1。
3.2 定时器的寄存器描述标准的51里边只有定时器0和定时器1这两个定时器,现在很多单片机也有多个定时器的,在这里我们先讲定时器0和1。
那么我前边提到过,对于单片机的每一个功能模块,都是由他的SFR,也就是特殊功能寄存器来控制。
而和定时器有关的特殊功能寄存器,有TCON和TMOD,定时值存储寄存器。
a)定时值存储寄存器表4-1中的寄存器,是存储计数器的计数值的,TH0/TL0用于T0, TH1/TL1用于T1。
表4-1 定时值存储寄存器表4-2 TCON--定时器/计数器控制寄存器的位分配(地址:88H)表4-3 TCON--定时器/计数器控制寄存器的位描述表4-2中有TF1、TR1、TF0、TR0这4位需要我们理解清楚。
0123动态显示:#inclu de<re g52.h>#de fineuchar unsi gnedchar#defi ne ui nt un signe d intuint num,numdu,numw e;uc har c ode t abled u[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};ucha r cod e tab lewe[]={0xfe,0xfd,0xfb,0xf7};sbit dula=P2^6;sbi t wel a=P2^7;vo id di splay();v oid m ain(){E A=1;ET1=1;T MOD=0x10;TH1=(65536-500)/256;TH0=(65536-500)%256;TR1=1;nu m=0;whil e(1){if(nu m==20){n um=0;i f(num du==4)numdu=0;if(numwe==4)nu mwe=0;displ ay();n umdu++;numw e++;}}}v oid t ime1() int errup t 3{TH1=(65536-500)/256;T H0=(65536-500)%256;num++;}voiddispl ay(){P0=0xff;we la=1;wel a=0;P0=t abled u[num du];dula=1;dula=0;P0=tab lewe[numwe];w ela=1;we la=0;}0123静态显示:#inclu de<re g52.h>#de fineuchar unsi gnedchar#defi ne ui nt un signe d intuint num,numdu,numw e;uc har c ode t abled u[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};ucha r cod e tab lewe[]={0xfe,0xfd,0xfb,0xf7};sbit dula=P2^6;sbi t wel a=P2^7;vo id de lay(u char);voi d mai n(){EA=1;E T1=1;TMO D=0x10;T H1=(65536-50000)/256;TH0=(65536-50000)%256;TR1=1;while(1){P0=0xf f;wela=1;wela=0;P0=t abled u[0];du la=1;du la=0;P0=tabl ewe[0];wela=1;wela=0;P0=0x ff;wela=1; wel a=0;P0=table du[1];d ula=1;d ula=0;P0=tab lewe[1];wela=1;wela=0;P0=0xff;wel a=1;we la=0;P0=tabl edu[2];dula=1;dula=0;P0=ta blewe[2];wel a=1;wel a=0;P0=0xff;we la=1;w ela=0;P0=tab ledu[3];dula=1;dula=0;P0=t ablew e[3];we la=1;we la=0;} }0-999循环跳变#in clude<reg52.h>#defi ne uc har u nsign ed ch ar#d efine uint unsi gnedintu int a,b,co unt,n um,nu mdu,n umwe; ucha r cod e tab ledu[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};u charcodetable we[]={0xf e,0xf d,0xf b,0xf7};s bit d ula=P2^6;sbitwela=P2^7;void dela y(uch ar);voiddispl ay(uc har,u char,uchar); vo id ma in(){EA=1;ET1=1;TM OD=0x10;TH1=(65536-50000)/256;T H0=(65536-50000)%256;TR1=1;coun t=0;whil e(1){if(nu m==20){nu m=0;if(count==1000)count=0;c ount++;}d ispla y(cou nt/100,cou nt%100/10,count%10);}}void time1() i nterr upt 3{T H1=(65536-50000)/256;TH0=(65536-50000)%256;num++;}void disp lay(u charbai,u charshi,u charge){P0=0xff;wel a=1;wela=0;P0=ta bledu[bai];du la=1;dul a=0;P0=t ablew e[1];wel a=1;wela=0;delay(1);P0=0xff;wela=1;wela=0;P0=tab ledu[shi];dul a=1;dula=0;P0=ta blewe[2];wela=1;wela=0;d elay(1); P0=0xff;wela=1;wela=0;P0=tab ledu[ge];dula=1;dula=0;P0=tab lewe[3];wela=1;w ela=0;de lay(1);}voiddelay(ucha r x){uc har a,b;for(a=x;a>0;a--)f or(b=200;b>0;b--); }。