经典c7数码管显示程序设计
七段数码管显示程序
附录A 八位七段数码管显示程序library ieee;use led isport( clk : in std_logic; --Clock Signaldata_in : in std_logic_vector(7 downto 0); --data busledag : out std_logic_vector(6 downto 0); --定义七位输出信号sel : out std_logic_vector(2 downto 0) --ledag Select);end led;--------------------------------------------------------------------architecture behave of led issignal dcount : std_logic_vector(2 downto 0);signal adh,adl : std_logic_vector(6 downto 0);signal adcount : std_logic_vector(7 downto 0);signal din_h,din_l : std_logic_vector(3 downto 0);signal coclk : std_logic;beginprocess(clk) --out enable signalbeginif(clk'event and clk='1') thenif adcount="" thencoclk<='1';adcount<="00000000";elseadcount<=adcount+1;coclk<='0';end if;end if;end process;process(clk) --rd the adc databeginif(clk'event and clk='1') thendin_h<=data_in(7 downto 4);din_l<=data_in(3 downto 0);end if;end process;process(clk)begincase din_h iswhen "0000"=>adh<="0111111"; --display 0when "0001"=>adh<="0000110"; --display 1when "0010"=>adh<="1011011"; --display 2when "0011"=>adh<="1001111"; --display 3when "0100"=>adh<="1100110"; --display 4when "0101"=>adh<="1101101"; --display 5when "0110"=>adh<="1111101"; --display 6when "0111"=>adh<="0000111"; --display 7when "1001"=>adh<="1101111"; --display 9 when "1010"=>adh<="1110111"; --display a when "1011"=>adh<="1111100"; --display b when "1100"=>adh<="0111001"; --display c when "1101"=>adh<="1011110"; --display d when "1110"=>adh<="1111001"; --display e when "1111"=>adh<="1110001"; --display f when others=>adh<=adh; --no change end case;case din_l iswhen "0000"=>adl<="0111111"; --display 0 when "0001"=>adl<="0000110"; --display 1 when "0010"=>adl<="1011011"; --display 2 when "0011"=>adl<="1001111"; --display 3 when "0100"=>adl<="1100110"; --display 4 when "0101"=>adl<="1101101"; --display 5 when "0110"=>adl<="1111101"; --display 6 when "0111"=>adl<="0000111"; --display 7 when "1000"=>adl<="1111111"; --display 8 when "1001"=>adl<="1101111"; --display 9 when "1010"=>adl<="1110111"; --display a when "1011"=>adl<="1111100"; --display b when "1100"=>adl<="0111001"; --display c when "1101"=>adl<="1011110"; --display dwhen "1111"=>adl<="1110001"; --display fwhen others=>adl<=adl; --no changeend case;end process;process(coclk) --display processbeginif(coclk'event and coclk='1') thendcount<=dcount+1;sel<=dcount;case dcount iswhen "000"=>ledag<="1000000";when "001"=>ledag<="1000000";when "010"=>ledag<="1000000";when "011"=>ledag<=adh;when "100"=>ledag<=adl;when "101"=>ledag<="1000000";when "110"=>ledag<="1000000";when "111"=>ledag<="1000000";when others=>ledag<="0000000";end case;end if;end process;end behave;。
单 片 机 原 理 实 验 报 告-七段数码管的显示
单片机原理实验报告一、实验目的:1、通过此次实验学会使七段数码管产生不同码段的显示。
2、通过设计中断使和使用计数器使数码管自动计数。
二、实验仪器:计算机,keil uVision3,proteus 7三、简要原理:用数码管显示自动计数,用按键来使计数开始或暂停,即按一下按键,使数码管自动加1计数,再按一下按键,使计数暂停,再按一下又继续计数。
四、实现程序和设计电路图:ORG 0000H LJMP MAIN ORG 0003H LJMP LOOP3 ORG 000BH LJMP LOOP4 MAIN:MOV R0,#00HMOV A,#00HMOV DPTR ,#TABLE MOV TMOD,#01H MOV TH0,#3CH MOV TL0,#0AFH MOV P1,#0C0H MOV P2,#0C0H SETB PX0CLR PT0SETB EASETB EX0CLR ET0SETB IT0SETB TR0LOOP:CJNE R0,#20,LOOP MOV R0,#00HMOV B,#0AHINC ACJNE A,#3CH,LOOP1 MOV A,#00HLOOP1:MOV R1,A DIV ABMOVC A,@A+DPTRMOV P2,AMOV A,BMOVC A,@A+DPTRMOV P1, AMOV A,R1AJMP LOOPLOOP3:CPL ET0RETILOOP4:MOV TH0, #3CHMOV TL0,#0AFHINC R0RETITABLE:DB 3FH,06H,5BH,4FH,66HDB 6DH,7DH,07H,7FH,6FHEND五、实验心得:通过这次实验,我发现中断的作用非常之大,可以用它来实现各种各样的功能。
七段数码管显示电路设计
实验五七段数码管显示电路设计一、实验目的1、了解数码管的工作原理。
2、学习七段数码管显示译码器的设计。
3、学习Verilog的CASE语句及多层次设计方法。
二、实验原理七段数码管是电子开发过程中常用的输出显示设备。
在实验系统中使用的是两个四位一体、共阴极型七段数码管。
由于七段数码管公共端连接到GND(共阴极型),当数码管的中的那一个段被输入高电平,则相应的这一段被点亮。
反之则不亮。
共阳极性的数码管与之相么。
四位一体的七段数码管在单个静态数码管的基础上加入了用于选择哪一位数码管的位选信号端口。
八个数码管的a、b、c、d、e、f、g、h、dp都连在了一起,8个数码管分别由各自的位选信号来控制,被选通的数码管显示数据,其余关闭。
三、实验内容本实验要求完成的任务是在时钟信号的作用下,通过输入的键值在数码管上显示相应的键值。
在实验中时,数字时钟选择1KHZ作为扫描时钟,用四个开关做为输入,当四个开关置为一个二进制数时,在数码管上显示其十六进制的值。
实验箱中的拨动开关与FPGA的接口电路,以及开关FPGA的管脚连接在实验一中都做了详细说明,这里不在赘述。
四、实验步骤1、打开QUARTUSII软件,新建一个工程。
2、建完工程之后,再新建一个V erilog File,打开V erilog编辑器对话框。
3、按照实验原理和自己的想法,在VHDL编辑窗口编写V erilog程序,用户可参照光盘中提供的示例程序。
源程序:module scan_led(clk_1k,d,dig,seg); //模块名scan_ledinput clk_1k; //输入时钟input[31:0] d; //输入要显示的数据output[7:0] dig; //数码管选择输出引脚output[7:0] seg; //数码管段输出引脚reg[7:0] seg_r; //定义数码管输出寄存器reg[7:0] dig_r; //定义数码管选择输出寄存器reg[3:0] disp_dat; //定义显示数据寄存器reg[2:0]count; //定义计数寄存器assign dig = dig_r; //输出数码管选择assign seg = seg_r; //输出数码管译码结果always @(posedge clk_1k) //定义上升沿触发进程begincount <= count + 1'b1;endalways @(posedge clk_1k)begincase(count) //选择扫描显示数据3'd0:disp_dat = d[31:28]; //第一个数码管3'd1:disp_dat = d[27:24]; //第二个数码管3'd2:disp_dat = d[23:20]; //第三个数码管3'd3:disp_dat = d[19:16]; //第四个数码管3'd4:disp_dat = d[15:12]; //第五个数码管3'd5:disp_dat = d[11:8]; //第六个数码管3'd6:disp_dat = d[7:4]; //第七个数码管3'd7:disp_dat = d[3:0]; //第八个数码管endcasecase(count) //选择数码管显示位3'd0:dig_r = 8'b01111111; //选择第一个数码管显示3'd1:dig_r = 8'b10111111; //选择第二个数码管显示3'd2:dig_r = 8'b11011111; //选择第三个数码管显示3'd3:dig_r = 8'b11101111; //选择第四个数码管显示3'd4:dig_r = 8'b11110111; //选择第五个数码管显示3'd5:dig_r = 8'b11111011; //选择第六个数码管显示3'd6:dig_r = 8'b11111101; //选择第七个数码管显示3'd7:dig_r = 8'b11111110; //选择第八个数码管显示endcaseendalways @(disp_dat)begincase(disp_dat) //七段译码4'h0:seg_r = 8'hc0; //显示04'h1:seg_r = 8'hf9; //显示14'h2:seg_r = 8'ha4; //显示24'h3:seg_r = 8'hb0; //显示34'h4:seg_r = 8'h99; //显示44'h5:seg_r = 8'h92; //显示54'h6:seg_r = 8'h82; //显示64'h7:seg_r = 8'hf8; //显示74'h8:seg_r = 8'h80; //显示84'h9:seg_r = 8'h90; //显示94'ha:seg_r = 8'h88; //显示a4'hb:seg_r = 8'h83; //显示b4'hc:seg_r = 8'hc6; //显示c4'hd:seg_r = 8'ha1; //显示d4'he:seg_r = 8'h86; //显示e4'hf:seg_r = 8'h8e; //显示fendcaseendendmodule4、编写完V erilog程序后,保存起来。
单片机实验报告——矩阵键盘数码管显示
单片机实验报告信息处理实验实验二矩阵键盘专业:电气工程及其自动化指导老师:***组员:明洪开张鸿伟张谦赵智奇学号:152703117 \152703115\152703118\152703114室温:18 ℃日期:2017 年10 月25日矩阵键盘一、实验内容1、编写程序,做到在键盘上每按一个键(0-F)用数码管将该建对应的名字显示出来。
按其它键没有结果。
二、实验目的1、学习独立式按键的查询识别方法。
2、非编码矩阵键盘的行反转法识别方法。
3、掌握键盘接口的基本特点,了解独立键盘和矩阵键盘的应用方法。
4、掌握键盘接口的硬件设计方法,软件程序设计和贴士排错能力。
5、掌握利用Keil51软件对程序进行编译。
6、会根据实际功能,正确选择单片机功能接线,编制正确程序。
对实验结果能做出分析和解释,能写出符合规格的实验报告。
三、实验原理1、MCS51系列单片机的P0~P3口作为输入端口使用时必须先向端口写入“1”。
2、用查询方式检测按键时,要加入延时(通常采用软件延时10~20mS)以消除抖动。
3、识别键的闭合,通常采用行扫描法和行反转法。
行扫描法是使键盘上某一行线为低电平,而其余行接高电平,然后读取列值,如读列值中某位为低电平,表明有键按下,否则扫描下一行,直到扫完所有行。
行反转法识别闭合键时,要将行线接一并行口,先让它工作在输出方式,将列线也接到一个并行口,先让它工作于输入方式,程序使CPU通过输出端口在各行线上全部送低电平,然后读入列线值,如此时有某键被按下,则必定会使某一列线值为0。
然后,程序对两个并行端口进行方式设置,使行线工作于输入方式,列线工作于输出方式,并将刚才读得的列线值从列线所接的并行端口输出,再读取行线上输入值,那么,在闭合键所在行线上的值必定为0。
这样,当一个键被接下时,必定可以读得一对唯一的行线值和列线值。
由于51单片机的并口能够动态地改变输入输出方式,因此,矩阵键盘采用行反转法识别最为简便。
七段数码管显示控制程序设计
P、B、E、F、2、3、4、5、6、8、9
网络68为停止程序。
网络69为复位程序。将M.0至M7.7全部复位。
寄存器如表4所示:
表4 对应寄存器表
P
M2.3、M6.1
L
M2.5、M6.3
C
M2.7、M6.5
B
M3.1、M6.7
E
M3.3、M7.1
F
M3.5、M7.3
1
M0.1、M5.7
2
M0.3、M5.5
(2),具体所建数据如图4所示:
图4 数据字典
(3)通信关联
关联方式如图5所示:
图5 通信关联
4.联合调试
当PLC运行的时候,打开组态王监控界面。通过虚拟界面实现对PLC的控制,图5和图6、7分别表示当PLC 启动、停止和复位,PLC与虚拟界面状态显示图。
图5 启动画面
2.硬件电路的设计
2.1I/O地址分配
根据课设要求,由于只是利用PLC控制数码管显示,所以在输入模块设计中只需要设计三个输入量,及启动、停止、复位,分别用I0.0、I0.1、I0.2表示,具体的输入模块分配表1所示。
表1 输入模块分配表
输入点
作用
I0.0
启动
I0.1
停止
I0.2
复位
根据课设要求,是在数码管上显示“1、2、3、4、5、6、7、8、9、P、L、C、B、E、F、9、8、7、6、5、4、3、2、1、P、L、C、B、E、F”,由于数码管是由七段LED灯控制,所以输出模块采用七个输出控制,具体分配如表2所示。
根据本次实验要求,程序流程图如图2所示:
。
。
图2 程序流程图
3.2PLC程序设计
组合电路——7段数码管显示驱动电路设计报告
实验一、组合电路——7段数码管显示驱动电路设计一、实验目的了解EDA实验箱7位八段数码管显示模块的工作原理,设计标准扫描驱动电路模块,以备后面实验用。
二、硬件要求主芯片为Cyclone V E,型号为EP4CE22F17C8,7位八段数码管显示器,四位拨码开关。
三、实验内容用四位拨码开关产生8421BCD码,用CPLD分别产生7段数码管扫描驱动电路,然后进行仿真,观察波形,正确后编程下载实验测试。
四、实验原理1、72、动信号a,b,c,d,e,f,g。
通过调节四位拨码开关的状态,数码管应显示与之对应的字符。
五、实验连线输入:将芯片管角a0~a3分别接4个拨码开关;输出:将芯片管角led7s0~7分别接到数码管7段驱动信号a、b、c、d、e、f、g上。
六、实验源程序:decl7s.vhdlibrary ieee;use ieee.std_logic_1164.all;entity decl7s isport(a:in std_logic_vector(3 downto 0);led7s:out std_logic_vector(6 downto 0));end;architecture one of decl7s isbeginprocess(a)begincase a iswhen "0000" => led7s<="0111111"; when "0001" => led7s<="0000110"; when "0010" => led7s<="1011011"; when "0011" => led7s<="1001111"; when "0100" => led7s<="1100110"; when "0101" => led7s<="1101101"; when "0110" => led7s<="1111101"; when "0111" => led7s<="0000111"; when "1000" => led7s<="1111111"; when "1001" => led7s<="1101111"; when "1010" => led7s<="1110111"; when "1011" => led7s<="1111100"; when "1100" => led7s<="0111001"; when "1101" => led7s<="1011110"; when "1110" => led7s<="1111001"; when "1111" => led7s<="1110001"; when others => null;end case;end process;end;七、波形仿真结果。
实验报告2--7段数码管显示实验
SPI主机实验——7段数码显示一、实验目的1、通过本实验进一步掌握对ARM7.0软件和EasyJTAG仿真器的使用;2、进一步熟悉EasyARM2131开发板硬件结构,掌握各引脚功能和接线;3、掌握SPI主机实验,熟悉该实验程序,并能作出简单的修改并实现其功能;4、在SPI实验中,通过改变实验程序,实现7段数码管和流水灯同时运行的功能。
二、实验仪器装有ADS1.2及EasyJTAG仿真器的电脑一台;ARM7开发板一块。
三、实验原理图4.61 SPI接口控制74HC595图中已经将最高位输出(SQH)连线到LPC2131的SPI接口的MISO0,可用来读回74HC595移位输出的数据。
下图是8路LED控制电路:该实验演示在7段数码管上显示一些字符,字符的字模表存于一数组中,流程图如下图4.62所示。
图4.62 LED数码管显示实验流程图1、特性2、结构SPI总线配置及数据传输3、SPI外设描述4、基本操作5主机操作四、实验内容与结果1、实验程序如下#include "config.h"#define HC595_CS (1 << 29) // P0.29口为74HC595的片选const uint32 LEDS8 = (0xFF << 18); // P1[25:18]控制LED8~LED1,低电平点亮/************************************************************************ ******************************** 函数名称:DelayNS()** 函数功能:长软件延时** 入口参数:dly 延时参数,值越大,延时越久** 出口参数:无************************************************************************* *******************************/void DelayNS(uint32 dly){uint32 i;for(; dly>0; dly--)for(i=0; i<50000; i++);}const uint32 LED_TBL[] = {0x00, 0xFF, // 全部熄灭后,再全部点亮0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, // 依次逐个点亮0x01, 0x03, 0x07, 0x0F, 0x1F, 0x3F, 0x7F, 0xFF, // 依次逐个叠加0xFF, 0x7F, 0x3F, 0x1F, 0x0F, 0x07, 0x03, 0x01, // 依次逐个递减0x81, 0x42, 0x24, 0x18, 0x18, 0x24, 0x42, 0x81, // 两个靠拢后分开0x81, 0xC3, 0xE7, 0xFF, 0xFF, 0xE7, 0xC3, 0x81 // 从两边叠加后递减};/********************************************************************************************************** 函数名称:MSPI_Init()** 函数功能:初始化SPI接口,设置为主机。
7段数码管显示电路
7段数码管显示电路4.4显示模块4.4.1 7段数码管的结构与工作原理7段数码管一般由8个发光二极管组成,其中由7个细长的发光二极管组成数字显示,另外一个圆形的发光二极管显示小数点。
当发光二极管导通时,相应的一个点或一个笔画发光。
控制相应的二极管导通,就能显示出各种字符,尽管显示的字符形状有些失真,能显示的数符数量也有限,但其控制简单,使有也方便。
发光二极管的阳极连在一起的称为共阳极数码管,阴极连在一起的称为共阴极数码管,如图4.9所示。
共阴极4.4.2 7段数码 ___________________发光二极管(LED 图4.9 7段数码管结构图体材料制成的,能直接将电能转变成光能的发光显示器件。
就会发光。
------------------------------ 7段数码管每段的驱动电流和其他单个段LED 和引脚分布向电压随发光材料不 7段数码管的(1)静太显示所谓静态显示,就是当显示某一字符时,相应段的发光二极管恒定地寻能可截止。
这种显示方法为每一们都需要有一个8位输出口控制。
对于 51单片机,可以在并行口上扩展多片锁存74LS573作为静态显示器接口。
静态显示器的优点是显示稳定,在发光二极管导通电注一定的情况下显示器的亮度高,控制系统在运行过程中,仅仅在需要更新显示内容时,CPU 才执行一次显示更新子程序,这样大大节省了CPU 的时间,提高了CPU 的工作效率;缺点是位数较多时,所需 I/O口太多,硬件开销太大,因此常采用另外一种显示方式一一动态显示。
(2)动态显示所谓动态显示就是一位一位地轮流点亮各位显示器(扫描),对于显示器的每一位而言,每隔一段时间点亮一次。
虽然在同一时刻只有一位显示器在工作(点亮),但利用人眼的视觉暂留效应和发光二极管熄灭时的余辉效应,看到的却是多个字符“同时”显示。
显示器亮度既与点亮时的导通电流有关,也与点亮时间和间隔时间的比例有关。
调整电流和时间参烽,可实现亮度较高较稳定的显示。
数码管显示课程设计报告
目录一.实验前的准备 (2)二.实验目的 (2)三.实验设备 (2)四.实验内容 (3)五.实验原理 (3)六.管脚分配 (4)七.实验步骤 (4)八.实验原理图: (5)九.实验程序代码: (6)(1)CH452_I2C.h代码 (6)(2)Define.h代码 (8)(3)key.h代码 (9)(4)Key.c代码 (10)(5)Seven_seg.c代码 (12)十.结果分析: (15)十一.个人体会与总结: (16)一.实验前的准备打开实验箱开关,连接好JTAG下载线,将开发平台上的MODUL_SEL组合开关的1、2、7拨上,3、4、5、6、8拨下,使两个共阳极数码管显示为C2。
二.实验目的(1)熟悉并学习运用I2C总线的读写方式。
(2)运用CH452芯片的数码管显示功能,熟悉两线制访问CH452芯片的工作原理。
三.实验设备硬件:PC机GX-CIDE-SOC/SOPC综合创新开发实验平台GX-CIDE-SOC/SOPC综合创新开发实验平台核心板软件:Quartus II 8.0Nios II 8.0四.实验内容用七段数码管前三位显示000-999,计数周期为1s;按F1进行加1操作并用数码管显示。
按F2计数停止,并显示当前数。
按F3进行减1操作;当数从000-999时再加1变为000;当数从999-000时再减1变为999。
五.实验原理根据I2C总线时序要求,对CH452进行操作,送地址,送控制字,送数据。
数码管显示是以BCD译码方式显示。
六.管脚分配七.实验步骤(1)打开Quartus II 8.0,打开工程cide_c2,进行SOPC操作,裁剪所需要的内容,综合一下再分配管脚。
(2)启动Nios II IDE并新建一个空白C/C++工程,命名为smm,在SOPC Builder System中选择之前建立好的硬件系统cide_c2.ptf。
(3)转换工程路径,将提供的参考程序seven_seg.c,CH452_I2C.h,define.h加入到建立好的Nios II工程中,修改程序代码符合实验要求。
数码管显示课程设计
数码管显示课程设计一、课程目标知识目标:1. 理解数码管的基本结构、工作原理及显示方式;2. 学会使用编程语言控制数码管显示数字及简单字符;3. 掌握数码管的电路连接方法及其与微控制器的接口技术;4. 了解数码管在现实生活中的应用。
技能目标:1. 能够独立完成数码管的电路搭建及编程控制;2. 培养学生动手实践能力,提高解决实际问题的能力;3. 学会查阅相关资料,培养学生的自学能力和团队协作精神。
情感态度价值观目标:1. 培养学生对电子技术及编程的兴趣,激发学习热情;2. 增强学生对科技创新的认识,提高创新意识;3. 树立正确的价值观,认识到科技发展对社会进步的重要性;4. 培养学生严谨、细致的学习态度,养成良好的学习习惯。
课程性质:本课程属于电子技术与编程相结合的实践课程,注重理论知识与实践操作的结合。
学生特点:学生具备基本的电子技术知识,对编程有一定了解,具有较强的动手实践能力。
教学要求:教师应注重引导学生主动参与,激发学生的学习兴趣,注重培养学生的实际操作能力,提高学生的综合素养。
在教学过程中,将课程目标分解为具体的学习成果,以便进行有效的教学设计和评估。
二、教学内容1. 数码管基础知识:介绍数码管的结构、工作原理、种类及其显示方式,对应教材第3章第1节内容;- 结构与原理:数码管的内部构造、发光二极管的工作原理;- 显示方式:共阴极、共阳极数码管的显示原理及区别。
2. 数码管编程控制:学习使用编程语言(如Arduino)控制数码管显示数字和简单字符,对应教材第4章第2节内容;- 编程基础:了解编程环境,学会编写基本程序;- 数码管控制:掌握数码管的动态扫描显示方法,实现数字和简单字符的显示。
3. 数码管电路连接与接口技术:学习数码管与微控制器(如Arduino)的连接方法,对应教材第3章第2节内容;- 电路连接:掌握数码管与电源、微控制器之间的电路连接方法;- 接口技术:了解数码管的驱动电路设计,掌握I/O口的控制方法。
七段数码管静态显示程序
依次将要显示的数字的代码送端口,就可以将相应的段点亮,显示出数字的字形。
为了人的眼睛能看清楚显示的字形,每个显示是字形停留一段时间。
右图是循环显示0~3的程序流程图。
;------------------------------------; 数码循环显示; 设计:黄有全; P2口接七段数码管。
; 2010年10月9日;-------------------------------------#include <reg.h>void delay(){ //函数体起始括号int i,j; //函数内部变量定义,16位的整数。
for(i=0;i<1000;i++) //for语句,循环语句{ //复合语句起始括号for(j=0;j<121;j++) //for语句,循环语句{ //空语句}} //复合语句结束括号}main() //主函数,C语言必须有名称为main的主函数。
{while(1) //循环语句,当while后面括号中数不为0时,执行循环体。
{P2=0xc0; // P2口送16进制数c0,显示0delay(); //调用延时函数delay。
延时0.2秒。
P2=0xf9; // P2口送16进制数f9,显示1delay(); //调用延时函数delay。
P2=0xa4; //显示2delay(); //调用延时函数delay。
延时0.2秒。
P2=0xb0; //显示3delay(); //调用延时函数delay。
}}。
七段数码管显示
七段数码管显示设计报告目录一、设计任务二、题目分析与整体构思三、硬件电路设计四、程序设计五、心得体会一.设计任务数码的显示方式一般有三种:第一种是字型重叠式;第二种是分段式;第三种是点阵式。
目前以分段式应用最为普遍,主要器件是七段发光二极管(LED)显示器。
它可分为两种,一是共阳极显示器(发光二极管的阳极都接在一个公共点上),另一是共阴极显示器(发光二极管的阳极都接在一个公共点上,使用时公共点接地)。
数码管动态扫描显示,是将所用数码管的相同段(a~g 和p)并联在一起,通过选位通信号分时控制各个数码管的公共端,循环依次点亮各个数码管。
当切换速度足够快时,由于人眼的“视觉暂留”现象,视觉效果将是数码管同时显示。
根据七段数码管的显示原理,设计一个带复位的七段数码管循环扫描程序,本程序需要着重实现两部分:1. 显示数据的设置:程序设定4 位数码管从左至右分别显示1、2、3、4;2. 动态扫描:实现动态扫描时序。
利用EXCD-1 开发板实现七段数码管的显示设计,使用EXCD-1 开发板的数码管为四位共阴极数码管,每一位的共阴极7 段数码管由7 个发光LED 组成,7 个发光LED 的阴极连接在一起,阳极分别连接至FPGA相应引脚。
四位数码管与FPGA 之间通过8 位拨码开关(JP1)进行连接。
二.题目分析与整体构思使用EXCD-1 开发板的数码管为四位共阴极数码管,每一位的共阴极7 段数码管由7个发光LED 组成,呈“”字状,7 个发光LED 的阴极连接在一起,阳极分别连接至FPGA 相应引脚。
SEG_SEL1、SEG_SEL2、SEG_SEL3 和SEG_SEL4 为四位7 段数码管的位选择端。
当其值为“1”时,相应的7 段数码管被选通。
当输入到7 段数码管SEG_A~ SEG_G 和SEG_DP 管脚的数据为高电平时,该管脚对应的段变亮,当输入到7 段数码管SEG_A~SEG_G 和SEG_DP 管脚的数据为低电平时,该管脚对应的段变灭。
七段数码管python编程
七段数码管Python编程一、介绍七段数码管和Python编程1.1 什么是七段数码管?七段数码管是一种常用的数字显示器件,由七个发光二极管组成。
每个发光二极管可以显示数字0~9的某个段,通过控制这些发光二极管的亮灭状态,可以显示出许多不同的数字、字符或符号。
1.2 Python编程语言Python是一种高级、通用、解释型的编程语言,它具有简洁明确的语法和丰富的库支持。
Python可以用于开发各种应用程序,包括但不限于Web开发、数据分析、人工智能和物联网等领域。
二、七段数码管的控制原理2.1 七段数码管的引脚布局七段数码管的引脚布局与型号有关,一般包括8个引脚:a、b、c、d、e、f、g和DP。
其中a~g是用来控制每个段的亮灭状态,DP用于显示小数点。
2.2 七段数码管的段选控制原理七段数码管的段选控制原理是通过控制每个段的亮灭状态,来显示数字、字符或符号。
通过依次点亮不同的段,使其组合在一起可以表示出所需的符号。
三、使用Python控制七段数码管3.1 准备工作在使用Python控制七段数码管之前,我们需要准备一些硬件工具和软件环境。
3.1.1 硬件工具•Raspberry Pi或其他类似的单片机开发板•七段数码管•连接线3.1.2 软件环境•Python编程环境(如IDLE、PyCharm等)•GPIO库(可通过pip安装)3.2 控制七段数码管的代码下面是使用Python控制七段数码管的示例代码:import RPi.GPIO as GPIOimport time# 定义七段数码管的引脚pins = [11, 12, 13, 15, 16, 18, 22, 40]# 设置引脚模式为物理引脚编号方式GPIO.setmode(GPIO.BOARD)# 设置引脚为输出模式for pin in pins:GPIO.setup(pin, GPIO.OUT)# 定义要显示的数字digits = {'0': [1, 1, 1, 1, 1, 1, 0],'1': [0, 1, 1, 0, 0, 0, 0],'2': [1, 1, 0, 1, 1, 0, 1],'3': [1, 1, 1, 1, 0, 0, 1],'4': [0, 1, 1, 0, 0, 1, 1],'5': [1, 0, 1, 1, 0, 1, 1],'6': [1, 0, 1, 1, 1, 1, 1],'7': [1, 1, 1, 0, 0, 0, 0],'8': [1, 1, 1, 1, 1, 1, 1],'9': [1, 1, 1, 1, 0, 1, 1]}def display_digit(digit):for pin, state in zip(pins, digit):GPIO.output(pin, state)# 循环显示数字0~9while True:for digit in digits.values():display_digit(digit)time.sleep(1)# 清理引脚设置GPIO.cleanup()3.3 运行代码在你的Python环境中运行上述代码,你将看到七段数码管循环显示数字0~9的效果。
数码管显示程序设计及实践
第三节 数码管动态显示程序设计及实践
• #include < reg52.h >
//加载头文件
• unsigned char code SegCode[] = {0xf 9.0xa4.0xb0.0x99.0x92.0x82.0xf8.
• 0x80}.
• //段选数据共阳极1 ~8
图5. 6 四位共阳极数码管内部结构图
返回
图5. 7 数码管显示控制原理图
返回
图5. 8 数码管动态显示12
返回
}
•}
• /∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗/
上一页
返回
图5. 1 数码管右起第一位显示数字4
返回
图5.2 数码管结构图
返回
图5.3 共阴极数码管结构图
返回
图5.4 共阳极数码管结构图
返回
图5. 5 四位共阴极数码管内部结构图
返回
下一页 返回
第二节 数码管静态显示程序设计及实践
• 下面通过编写程序实现图5.1 的效果.
• 例题1: 实现在右起第一位数码管上显示数字4.
• 程序代码如下:
• #include < reg52.h > //加载头文件
• /∗∗∗∗∗∗∗∗∗∗∗∗∗主函数∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗/
• void main()
//加载头文件
• /∗∗∗∗∗∗∗∗∗∗∗∗∗∗1 ms 延时子函数∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗/
• void DelayMs(unsigned int n)
•{
•
七段数码管的动态扫描显示
七段数码管的动态扫描显示动态扫描显示与视觉暂留1.设计计数时钟设计一个分频器,对50MHz分频输出到计数器,让计数器以较慢的速度递增。
module int_div(clk,div_out);input clk;output reg div_out;reg [31:0] clk_div;parameter CLK_FREQ = 'D50_000_000; //系统时钟50MHzparameter DCLK_FREQ = 'D10; //输出频率10/2Hzalways@(posedge clk)beginif(clk_div < (CLK_FREQ/DCLK_FREQ))clk_div <= clk_div + 1;elsebeginclk_div <= 0;div_out <= ~div_out;endendendmodule2.调用宏功能模块设计计数器见讲义。
(自己设计BCD码计数器)3.数码管扫描显示程序设计(不含小数点)module segmain(clk,reset_n,datain,seg_data, seg_com);input clk;input reset_n;input [15:0] datain;output [7:0] seg_data;output [3:0] seg_com;reg [3:0] seg_com;reg [7:0] seg_data;reg [3:0] bcd_led;reg [26:0] count;always@(posedge clk)beginif (!reset_n) count <= 0;else count <= count + 1; endalways@(count[26:25] or datain) begincase(count[26:25])2'b00:beginbcd_led = datain[3:0];seg_com = 4'b1110;//end2'b01:beginbcd_led = datain[7:4];seg_com = 4'b1101;//end2'b10:beginbcd_led = datain[11:8];seg_com = 4'b1011;//end2'b11:beginbcd_led = datain[15:12];seg_com = 4'b0111;//endendcaseendalways@(seg_com or bcd_led)begincase(bcd_led)4'h0: s eg_data = 8'hc0;//04'h1: s eg_data = 8'hf9;//14'h2: s eg_data = 8'ha4;//24'h3: s eg_data = 8'hb0;//34'h4: s eg_data = 8'h99;//44'h5: s eg_data = 8'h92;//54'h6: s eg_data = 8'h82;//64'h7: s eg_data = 8'hf8;//74'h8: s eg_data = 8'h80;//84'h9: s eg_data = 8'h90;//94'ha: seg_data = 8'h88;//a4'hb: s eg_data = 8'h83;//b4'hc: seg_data = 8'hc6;//c4'hd: s eg_data = 8'ha1;//d4'he: seg_data = 8'h86;//e4'hf: seg_data = 8'h8e;//fdefault: seg_data = 8'h80;//0endcaseendendmodule4.设置芯片和管脚。
c7数码管显示程序设计最新
c7数码管显示程序设计最新实用的程序设计C7数码管显示程序设计实用的程序设计数码显示接口技术显示方式种类:LED显示( Light Emiting Decode 发光二极管) LCD显示(Liquid Crystal Display 液晶显示屏) CRT显示( Cathode Ray Tube,阴极射线管) VFD显示(真空荧光显示器) 实用的程序设计发光二极管的驱动+5V发光二极管正常发光时,电流约为5~10mA,压降1V左右。
500 P1.0限流电阻R=(5V-1V)/8mA=500 Ω引脚输出低电平时,发光二极管导通。
实用的程序设计数码管共阳极数码管的结构是:将8个发光二极管排列成一个“8.” 的形状,所有发光二极管阳极连接在一起做公共端com,阴极作为各个段的控制端a,b,c,d,e,f,g,dp。
coma f g bcom1abcdpedc dpa b c d e f g dp0 0 0 0 1 1 0 1共阴数码管实用的程序设计数码管的显示代码表;共阳极7段数码管驱动段码表;共阴极7段数码管驱动段码表C0H F9H A4H B0H 99H 92H 82H F8H 80H 90Hpgfedcba __-__B __-__B __-__B __-__B __-__B __-__B __-__B __-__B __-__B __-__B;0 ;1 ;2 ;3 ;4 ;5 ;6 ;7 ;8 ;9; 3FH 06H 5BH 4FH 66H 6DH 7DH 07H 7FH 6FHpgfedcba DB __-__B ;0 DB __-__B ;1 DB __-__B ;2 DB __-__B ;3 DB __-__B ;4 DB __-__B ;5 DB __-__B ;6 DB __-__B ;7 DB __-__B ;8 DB __-__B ;9 实用的程序设计LED显示驱动技术LED的驱动问题其实是一个非常重要的问题,如果驱动器驱动能力差,显示亮度就降低。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
c dp
com
共阴结构
dp g f e d c b a
共阳结构
5.2 数码显示预备知识
数码管段码的编码:
8段正好是一个字节,通常采用如下 编码方式。(这种编码需单片机数据总线 的D0..D7分别和数码管的a、b、c、…dp 对应相连。如图所示)
dp
g
最高 位
f
e
d
c
b
a
最低位
CPU和数码管的连接
b
a g d
a
b c
CR3
dp
CR4
CR3
CR2
CR1
CR4
CR3
CR2
CR1
P22 4 .7 K S Q3 9015
P21 4 .7 K S Q2 9015
CR2
CR1
非门驱动电路
P1 7 P1 6 P1 5 P1 4 P1 3 P1 2 P1 1
c a b c dp CR3 CR2 f e g d b c dp CR1 f e dp a f e g d CR4 b c dp f e g f a g d e d
二、静态显示技术 静态显示数码管相应笔段一直处于 点亮状态,因此功耗大,而且占用硬件资 源多,几乎只能用在显示位数极少的场合。 优点:LED亮度高,可用在室外显示场合。
静态显示电路
图10-6 四位静态显示电路
三、动态显示技术 动态显示是多只数码管共享段码线, 通过位选线逐位逐位进行扫描显示。其优 点是占用硬件资源少,功耗小。 必须注意:扫描周期必须控制在视觉 停顿时间内,一般在20ms以内,否则会出 现闪烁或跳动现象。
动态显示电路
图10-7 四位动态显示的电路
4
5
三极管放大驱动电路
P17
P16
P15
P14
P13
P12
P11
P10
P23 dp
a f e g d b c dp f e
CR4
P20 4 .7 K S Q4 9015 4 .7 K S Q1 9015
g
f
a g d
e
b c dp f e
d
a g d
c
b c dp f e
VCC a b a c f b d g e e c f d g dp dp
GND
LED
共阴数码管
共阳数码管
9
330*8
LED 1 2 3 4 5 6 7 8
5.2 数码显示接口技术
5.2 数码显示接口技术
程序清单:
ORG 0030H MOV SP,#60h MOV R0,#00h DISP0:MOV DPTR,#SEGTAB DISP1: MOV A,R0 DISP3:MOVC A,@A+DPTR MOV P2,A MOV R3,#100 DISP4:ACALL D10MS DJNZ R3,DISP4 INC R0 CJNE R0,#0ah,DISP1 AJMP DISP1
第6脚:E端为使能端,当E端由高电平跳变成低电平时,液晶模块执行命令。 第7~14脚:D0~D7为8位双向数据线。 第15~16脚:空脚
1602液晶模块内部的字符发生存储器(CGROM)已经存储了160 个不同的点阵字符图形,如表所示,这些字符有:阿拉伯数字、英 文字母的大小写、常用的符号、和日文假名等,每一个字符都有一 个固定的代码,比如大写的英文字母“A”的代码是01000001B (41H),显示时模块把地址41H中的点阵字符图形显示出来,我们 就能看到字母“A”
5.3 液晶显示技术
一、液晶显示器及其特点 液晶显示器以其微功耗、体积小、显示内容丰富、 超薄轻巧的诸多优点,没有电磁辐射、寿命长等优点, 在袖珍式仪表和低功耗应用系统中得到越来越广泛的 应用。
这里介绍的字符型液晶模块是一种用5x7点阵图形来显示字符 的液晶显示器,根据显示的容量可以分为1行16个字、2行16个字、 2行20个字等等,这里以常用的2行16个字的1602液晶模块来介绍
5.2 数码显示接口技术
INTT0:
SEG:
MOV MOV MOV MOV MOV MOVC MOV MOV MOV RL MOV INC RETI DB DB END
TL0,#18H ;重为定时器赋初值 TH0,#0FCH P1,#0FFH ;关所有显示 A,@R0 ;取显示数字 DPTR,#SEG A,@A+DPTR ;查字段码表的段选码 P2,A ;输出段选码 A,R2 P1,A ;输出位控制字 A ;为显示下一位做准备 R2,A R0 3FH,06H,5BH,4FH,66H 6DH,7DH,07H,7FH,6FH
5.2 数码显示接口技术
例子:显示1、2、3、4
首先 扫描
最后 扫描
5.2 数码显示接口技术
显示过程:定时器T0每1ms 产生一次中断,在中 断服务程序中更换一次显示位,4位一个扫描周期, 扫描时间为4 ms。 除了定时中断扫描显示外,也可以程序控制扫 描显示,但采用定时中断扫描显示的扫描周期固 定,特别是当单片机的工作任务重时,定时中断 扫描显示是一种很好的方式。
LED显示驱动技术
LED的驱动问题其实是一个非常重要的问题,如果驱 动器驱动能力差,显示亮度就降低。而且动态和静态显示方 式对驱动电路要求是不一样的。 如果是静态显示,不需要考虑LED驱动,一般情况下 只要将单片机I/O口与数码管的段代码连接,如图10-6所示 (请确认)电路即可。 但是动态显示就需要考虑LED驱动,因为动态显示是 由段和位选信号共同配合完成的,因此必须同时考虑段和位 的驱动能力,并且段的驱动能力决定位的驱动能力。常用的 驱动电路有两种,采用集成电路芯片如SN7407或采用简单的 三极管放大电路
;字段码首地址 ;从0开始显示 ;查字符段选码 ;从P2口输出显示 ;停留 1s
;又从0开始显示
5.2 数码显示接口技术
H ;10ms延时子程序 DLY: MOV R6,#0F8H DLY1: DJNZ R6,DLY1 DJNZ R7,DLY RET SEGTAB : ;;段码表 DB 3FH,06H,5BH,4FH,66H ;;0\1\2\3\4 DB 6DH,7DH,07H,7FH,6FH ;;5\6\7\8\9 DB 77H,7cH,39H,5eH, 79H ;;a\b\c\d\e DB 71h, 73h,3Eh,6Eh,0ffh,00h ;;f\p\u\y\ 8.\灭 可根 据需 END 要造 一些 特殊 的编 码
发光二极管的驱动
+5V
发光二极管正常发光时, 电流约为5~10mA,压 降1V左右。
500
P1.0
限流电阻 R=(5V-1V)/8mA=500 Ω
引脚输出低电平时,发光 二极管导通。
数码管
共阳极数码管的结构是:将8个发光二极管排 列成一个 “8.” 的形状,所有发光二极管阳极 连接在一起做公共端com,阴极作为各个段的 控制端a,b,c,d,e,f,g,dp。 com
P1 0
b a g d b c dp a
P2 3
P2 2
P2 1
P2 0
实验板数码管连接示意图
+5V
P2.7 P2.6 com1 P2.5 com2 P2.4 com3 P2.3 com4 P2.2 com5 com6
位驱动
段驱动
P0.0 P0.1 P0.2 P0.3 P0.4 P0.5 P0.6 P0.7 a b c d e f g dp
LCD1602指令表
1602液晶模块内部的控制器共有11条控制指 令,如表2所示
HD44780的主要命令格式
HD44780是这种点阵字符型液晶常用驱动芯片。它的读写操作、 屏幕和光标的操作都是通过指令编程来实现的。(说 明:1为高 电平、0为低电平) 指令1:清显示,指令码01H,光标复位到地址00H位置。 指令2:光标复位,光标返回到地址00H 。 指令3:光标和显示模式设置 I/D:光标移动方向,高电平右移, 低电 平左移 S:屏幕上所有文字是否左移或者右移。高电平表示有效, 低电 平则无效。 指令4:显示开关控制。 D:控制整体显示的开与关,高电平表 示开显示,低电平表示关显示 C:控制光标的开与关,高电平表示 有光标,低电平表示无光标 B:控制光标是否闪烁,高电平闪烁, 低电平不闪烁 指令5:光标或显示移位 S/C:高电平时移动显示的文字,低电 平时移动光标
P0.0 P0.1 P0.2 P0.3 P0.4 P0.5 P0.6 P0.7
a
b
c
d
e
f
g
dp
编程练习
要求:在第一位显示连续变 化的0-9,间隔时间自定。 参考课本P196页例1,在 keil中编程,生产HEX文件。 在proteus中观察运行结果。 (参考“ c6定时器应用程 序调试” 介绍的方法)
六位共阳极数码管模块 相同的段驱动端都并联在 一起。
在第一位上显示5
+5V
P2.7
0
P2.6 com1
1
P2.5 com2
1
P2.4 com3
1
P2.3 com4
1
P2.2 com5 com6
1
位驱动P2.7输出0 段驱动P0口输出“5”的段 码“10010010B” 0 1 0 0 1 0 0 1
VCC
U1 P1.0 P1.1 P1.2 P1.3 P1.4 P1.5 P1.6 P1.7 8051
9
a b c d e f g dp