四位数码管编程实例
4位数码管循环

4位数码管循环4位数码管可以显示0-9的数字,因此可以通过循环实现数字的循环显示。
一种简单的方式是使用四个数码管分别显示个位、十位、百位和千位的数字。
通过循环不断更新这四个数码管的显示内容,就可以实现数字的循环显示。
以下是一个示例代码:```c#include <avr/io.h>#include <avr/delay.h>void displayDigit(uint8_t digit){// 根据数字设置对应的数码管段亮起switch (digit) {case 0:PORTA = 0b00111111;break;case 1:PORTA = 0b00000110;break;case 2:PORTA = 0b01011011;break;case 3:PORTA = 0b01001111;break;case 4:PORTA = 0b01100110;break;case 5:PORTA = 0b01101101;break;case 6:PORTA = 0b01111101;break;case 7:PORTA = 0b00000111;break;case 8:PORTA = 0b01111111;break;case 9:PORTA = 0b01101111;break;default:// 如果传入的数字不在0-9之间,将所有数码管熄灭 PORTA = 0b00000000;break;}}int main(void){// 设置端口A为输出端口DDRA = 0xFF;while (1) {for (int i = 0; i < 10000; i++) {int thousands = i / 1000;int hundreds = (i % 1000) / 100;int tens = (i % 100) / 10;int ones = i % 10;// 分别显示千位、百位、十位和个位的数字displayDigit(thousands);_delay_ms(10);displayDigit(hundreds);_delay_ms(10);displayDigit(tens);_delay_ms(10);displayDigit(ones);_delay_ms(10);}}return 0;}```此代码使用的是ATmega系列的单片机,使用了端口A的8个引脚来控制四个数码管的段的亮灭。
《FPGA设计与应用》数码管显示实验

《FPGA设计与应用》数码管显示实验一、实验目的1.学习动态数码管的工作原理;2.实现对EGO1开发板四位动态数码管的控制;二、实验内容实现对EGO1开发板四位动态数码管的控制,使其能够正常工作;三、实验要求在EGO1开发板上显示想要的数字。
四、实验背景知识1.LED数码管基础知识在数码管上显示数字就是将相应的段位点亮组成要显示的数字,共阴数码管的码值表如下所示,‘1’代表相应的管脚输出高电平,点亮相应段位,‘0’代表相应的管脚输出低电平,不点亮相应段位。
2.动态数码管原理EGO1 开发板上使用的是共阴极动态数码管,这种数码管有四个共阴极分别选通对应的每位数码管,四位数码管的八个段码脚连接在一起。
动态数码管显示的原理是:每次选通其中一位,送出这位要显示的内容,然后一段时间后选通下一位送出对应数据,4 个数码管这样依次选通并送出相应的数据,结束后再重复进行。
这样只要选通时间选取的合适,由于人眼的视觉暂留,数码管看起来就是连续显示的。
五、实验方案及实现1、数码管显示的设计共分3个模块:(1)数码管封装模块(2)数码管设计模块(3)顶层模块数码管封装模块代码:module smg_ip_model(clk,data,sm_wei,sm_duan);input clk;input [15:0] data;output [3:0] sm_wei;output [7:0] sm_duan;integer clk_cnt;reg clk_400Hz;always @(posedge clk)if(clk_cnt==32'd100000)begin clk_cnt <= 1'b0; clk_400Hz <= ~clk_400Hz;endelseclk_cnt <= clk_cnt + 1'b1;reg [3:0]wei_ctrl=4'b1110;always @(posedge clk_400Hz)wei_ctrl <= {wei_ctrl[2:0],wei_ctrl[3]}; reg [3:0]duan_ctrl;always @(wei_ctrl)case(wei_ctrl)4'b1110:duan_ctrl=data[3:0];4'b1101:duan_ctrl=data[7:4];4'b1011:duan_ctrl=data[11:8];4'b0111:duan_ctrl=data[15:12];default:duan_ctrl=4'hf;endcasereg [7:0]duan;always @(duan_ctrl)case(duan_ctrl)4'h0:duan=8'b0011_1111;4'h1:duan=8'b0000_0110;4'h2:duan=8'b0101_1011;4'h3:duan=8'b0100_1111;4'h4:duan=8'b0110_0110;4'h5:duan=8'b0110_1101;4'h6:duan=8'b0111_1101;4'h7:duan=8'b0000_0111;4'h8:duan=8'b0111_1111;4'h9:duan=8'b0110_1111;4'ha:duan=8'b0111_0111;4'hb:duan=8'b0111_1100;4'hc:duan=8'b0011_1001;4'hd:duan=8'b0101_1110;4'he:duan=8'b0111_1000;4'hf:duan=8'b0111_0001;数码管设计模块module test(clk,data);input clk;output [15:0]data;reg clk_1Hz;integer clk_1Hz_cnt;always @(posedge clk)if(clk_1Hz_cnt==32'd2*******-1)begin clk_1Hz_cnt <= 1'b0; clk_1Hz <= ~clk_1Hz;end elseclk_1Hz_cnt <= clk_1Hz_cnt + 1'b1;reg [39:0]disp=40'h1234567890;reg [15:0]data;always @(posedge clk_1Hz)begindisp <= {disp[35:0],disp[39:36]};data <= disp[39:24];endEndmodule顶层模块module smg_ip(clk,sm_wei,sm_duan);input clk;output [3:0]sm_wei;output [7:0]sm_duan;wire [15:0]data;wire [3:0]sm_wei;wire [7:0]sm_duan;test U0 (.clk(clk),.data(data));smg_ip_model U1(.clk(clk),.data(data),.sm_wei(sm_wei),.sm_duan(sm_duan)); endmodule六、实验结果Vivado仿真:上实验板实操:七、实验心得次实验主要学习了利用vivado软件实现数码管的显示,利用编程来实现,并且还对动态数码管的原理进行了一定的学习,包括上次实验学习到的模块化设计,方便程序的调试,程序运行过程中并不顺利,一直没有创建出pin文件夹,最后还是在老师的帮助下完成了pin文件夹的创建,导入到板子后完成了本次实验的设计。
4位拨动开关控制数码管显示系统设计

4位拨动开关控制数码管显⽰系统设计务书设计题⽬4位拨动开关控制数码管显⽰系统设计学⽣姓名设计要求:1.电源电路具有电源开关及指⽰灯,有复位按键;2.⾼4位开关屏蔽;3.⽤4位拨码开关为输⼊,控制数码管显⽰器的输出;4.实现功能:通电复位后数码管全显即显“8”,数码管对应4位DIP开关的⼆进制输⼊显⽰⼗六进制全部字符即从“0”到“F”。
学⽣应完成的⼯作:1.了解单⽚机系统的设计⽅法,设计步骤;2.查找并收集相关资料书籍;3.完成硬件原理图设计;4.完成软件和流程图的设计;5.对系统进⾏仿真;6.焊接电路板,调试系统;7.认真撰写课程设计报告。
8.孙晓界同学主要负责软件设计参考⽂献阅读:[1] 张毅刚,彭喜元,彭宇. 单⽚机原理及应⽤[M]. 北京:⾼等教育出版社,2009.[2] 杜树春. 单⽚机C语⾔和汇编语⾔混合编程实例详解[M]. 北京:北京航空航天⼤学出版社,2006.[3] 童诗⽩,华成英. 模拟电⼦技术基础(第四版)[M]. 北京:⾼等教育出版社,2006.[4] 林志琦. 基于Proteus的单⽚机可视化软硬件仿真[M]. 北京:北京航空航天⼤学出版社,2006. ⼯作计划:5⽉6⽇:查阅相关资料,拟定⽅案;5⽉7⽇:进⾏⽅案论证,完善设计⽅案;5⽉8⽇:完成硬件设计;5⽉9⽇:设计程序流程图;5⽉10⽇:完成软件设计,并进⾏仿真和调试;5⽉13⽇:进⾏焊接;5⽉14⽇:烧写程序;5⽉15⽇:调试电路;5⽉16⽇:与辅导⽼师交流,写课程设计报告;5⽉17⽇:上交课程设计报告及实物。
任务下达⽇期:2013 年5⽉ 6 ⽇任务完成⽇期:2013 年5⽉17 ⽇指导教师(签名):学⽣(签名):4位拨动开关控制数码管显⽰系统设计摘要:⽤AT89S52单⽚机作为核⼼,利⽤晶振,共阳极数码管,7805,桥堆2w10等器件进⾏设计,由电源电路、复位电路、时钟电路、输⼊输出电路等设计⼀个控制电路。
利⽤汇编编写控制程序,程序使⽤查表法进⾏编写。
四位LED数码管编程

设计要求:一个基于单片机89S51的可编程定时器的程序,定时器由4个8段数码管显示,可以设置分和秒定时。
可以同时对四路控制对象进行定时控制,外部控件可以用于选择控制对象,设置定时,对定时进行暂停,重置等控制。
#include <AT89X52.H>//宏定义#define uchar unsigned char#define uint unsigned int#define ulong unsigned long int/****************************************************************************** TH0和TL0是计数器0的高8位和低8位计数器,计算办法:TL0=(65536-C)%256; ** TH0=(65536-C)/256,其中C为所要计数的次数即多长时间产生一次中断;TMOD是计数器** 工作模式选择,0X01表示选用模式1,它有16位计数器,最大计数脉冲为65536,最长时** 间为1ms*65536=65.536ms*******************************************************************************/#define V_TMOD 0x01 //工作方式1#define V_TH0 0x3C //50ms延时常数C=50000//0XDC#define V_TL0 0xB0 //50ms延时常数C=50000 /0X58 //#define V_TH1 0xFF //5ms延时常数C=5000 //0XDC//#define V_TL1 0xFB //5ms延时常数C=5000 /0X58#define V_TH1 0xDC //1ms延时常数C=1000 //0XDC#define V_TL1 0x58 //1ms延时常数C=1000 /0X58#define MAXFUN 6 //功能切换,表示最多的功能状态,sbit k10=P1^0;//sbit BEEP = P3^7; //蜂鸣器驱动线----------------请修改为sbit BEEP =P0^4;uchar bee; //蜂鸣器01开关uchar key; //键顺序吗uchar fun=10; //功能状态, <= MAXFUNuchar it0=0,it1; //Timer0中断计数uchar text=0; //数字//uchar text_ctrl[4]={0xFE,0xFD,0xFB,0xF7}; //位选通值uchar text_ctrl[4]={0xE,0xD,0xB,0x7};//位选通值, 00001110, 00001101, 00001011, 00000111//uchar text_code[11]={ 0x28, 0x7E, 0xA2, 0x62, 0x74, 0x61, 0x21, 0x7A, 0x20,0x60,0xff};//0,1,2,3,4,5,6,7,8,9,关显示,数码管码表,高电平有效//uchar text_code[17]={0x28,0x7e,0xa2,0x62,0x74,0x61,0x21,0x7a,0x20,0x60,0x30,0x25,0xa9,0x26,0xa1,0xb1};//数码管代码uchar text_code[11]={ 0xFC, 0x60, 0xDA, 0xF2, 0x66, 0xB6, 0xBE, 0xE0,0xFE, 0xF6,0xff};//0,1,2,3,4,5,6,7,8,9,关显示,数码管码表,高电平有效uchar text_index=0; //当前显示第几个uchar dis_buf[4]; //显示缓存uchar refresh=0; //刷新否T1蜂鸣uchar min=0; //minutesuchar sec=0; //sccondsuchar hour=0; //sccondsuchar onsetup=0;uchar keydown0=0,keydown1=0;uchar data PWM=0xFf ;//PWM值增加,则占空比减小,LED 灯渐暗。
四位数码管单独显示

四位数码管单独显示1. 引言数码管是一种常见的数字显示设备,常用于电子时钟、电子测量仪器等场合。
四位数码管单独显示是指将四个数码管分别控制,使其能够独立显示不同的数字。
本文将介绍如何使用Arduino控制四位数码管实现单独显示的功能。
2. 器件准备在开始之前,我们需要准备以下器件: - Arduino主控板 - 四位共阳数码管 - 适配器电源 - 杜邦线若干3. 电路连接将四位数码管接线连接到Arduino主控板上,具体的接线方式如下: - 将数码管的A、B、C、D、E、F、G引脚分别连接到Arduino的引脚2、3、4、5、6、7、8; - 将数码管的COM1、COM2、COM3、COM4引脚分别连接到Arduino的引脚9、10、11、12。
4. 程序编写以下是使用Arduino语言编写的程序,实现四位数码管单独显示的功能:// 四位数码管单独显示// 数码管引脚定义int segPins[] = {2, 3, 4, 5, 6, 7, 8};int comPins[] = {9, 10, 11, 12};void setup() {// 设置数码管引脚为输出模式for (int i = 0; i < 7; i++) {pinMode(segPins[i], OUTPUT);}for (int i = 0; i < 4; i++) {pinMode(comPins[i], OUTPUT);}}void loop() {// 数字0-9的编码,对应数码管的a-g引脚状态int numCode[] = {B1111110, B0110000, B1101101, B1111001, B0110011, B1 011011, B1011111, B1110000, B1111111, B1110011};for (int i = 0; i < 4; i++) {// 在COM1-COM4引脚依次输出低电平,其他引脚输出高电平for (int j = 0; j < 4; j++) {if (j == i) {digitalWrite(comPins[j], LOW);} else {digitalWrite(comPins[j], HIGH);}}// 控制数码管显示对应数字for (int j = 0; j < 7; j++) {digitalWrite(segPins[j], (numCode[i] >> j) & 1);}// 设置显示间隔delay(10);}}5. 程序说明上述程序中,我们首先定义了数码管的引脚,然后在setup()函数中,设置数码管引脚为输出模式。
单片机实验3 数码管控制实验-动态显示

;实验名称:数码管动态显示
;功能:4位数码管循环显示“0123”“4567”“89AB”“CDEF”,间隔0.5S。
;编写人:陈建泽
;编写时间:2010年11月2日
/**********************程序代码************************/
D1MS: MOV R2,#250 ;250*(1+1+2)=1000us=1ms
L1:NOP
NOP
DJNZ R2,L1
RET
/*****************中断服务子程序*****************/
T0_INT:MOV TH0,#(65536-50000)/256
MOV TL0,#(65536-50000)MOD 256
MOV A,R4
CJNE A,#16,L3
AJMP MAIN
L3:MOV R5,A
AJMP L1
DIS:MOV P2,R6;用A作为中间寄存器,因后面要循环显示
MOV A,R5
ACALL SQR ;查表
MOV P0,A
ACALL D1MS ;1ms
INC R5
MOV A,R6
RL A;指向下一位
MOV R6,A
RET;子程序返回
TAB: DB 0C0H,0F9H,0A4H,0B0H ;共阳极字型码表0、1、2、3
DB 99H, 92H, 82H, 0F8H;共阳极字型码表4、5、6、7
DB 80H, 90H, 88H, 83H;共阳极字型码表8、9、A、B
DB 0C6H,0A1H,86H, 8EH;共阳极字型码表C、D、E、F
arduino4位数码管倒计时程序逻辑

arduino4位数码管倒计时程序逻辑【Arduino 4位数码管倒计时程序逻辑】引言:Arduino是一款开源的电子开发平台,可以利用其强大的功能来实现各种实时控制的项目。
本文将介绍如何使用Arduino搭建一个4位数码管的倒计时程序,帮助读者更好地理解和掌握Arduino的编程逻辑。
一、准备工作:首先,我们需要准备以下材料:1. Arduino主控板2. 4位数码管(带有共阳极或共阴极)3. 4个220欧姆的电阻4. 面包板、杜邦线等连接材料二、电路连接:将Arduino主控板与4位数码管通过杜邦线连接起来,并根据数码管的类型选择合适的连接方式。
如果是共阳极数码管,将将数码管的数字空脚连接到Arduino的数字引脚上;如果是共阴极数码管,将数字引脚连接到Arduino的数字引脚上,而将汇流脚连接到Arduino的地(GND)引脚上。
连接完成后,通过电阻将Arduino的供电引脚和数码管的供电引脚连接起来,以确保电流稳定。
三、编程逻辑:接下来,我们将使用Arduino IDE来编写倒计时程序。
打开Arduino IDE,创建一个新的空白文件,并编写如下代码:引入数码管库#include <SevSeg.h>定义数码管引脚SevSeg sevseg;初始化倒计时时间unsigned long countdownTime = 5; 倒计时时间为5秒unsigned long targetTime;int seconds;void setup() {设置数码管引脚sevseg.Begin(COMMON_ANODE, 4, 2, 3, 5, 6, 7, 8); 数码管引脚分别连接到Arduino的数字引脚4、2、3、5、6、7、8设置数码管亮度sevseg.setBrightness(50); 设置亮度为50,可以根据需要进行调整初始化目标时间targetTime = millis() + countdownTime * 1000;}void loop() {获取剩余时间unsigned long remainingTime = targetTime - millis();判断倒计时是否结束if (remainingTime > 0) {计算剩余秒数seconds = remainingTime / 1000;显示剩余秒数sevseg.setNumber(seconds, 0); 显示数字sevseg.refreshDisplay(); 刷新显示} else {倒计时结束sevseg.setNumber(0, 0); 显示0sevseg.refreshDisplay(); 刷新显示}}四、程序解析:1. 首先,我们引入了SevSeg库来操作数码管。
一个单片机4键控制四个数码管显示的程序或思路

例如你刚上电单片机复位你的单片机先是p1口输出高电平到数码管的段选然后p2口ቤተ መጻሕፍቲ ባይዱ出高电平到反相器然后再输出低电平到数码管的位选
[单片机][控制][数码]求一个单片机4键控制四个数码管显示的程序或思路
应该是P2.0-P2.3控制四个位选码 P2.0-P2.78个段选码
使用两个74HC573 锁存器 并另外用两个端口入P1.0 P1.1分别控制段选使能和位选使能 1^0 1^1 写程序时,先开位选dula=1 再送数P2=0xxx 关段选dula=0 位选操作如上
/*********************************************************
164串行输出段码:
P4.4 U164CP
P4.5 U164D
138输出位选
P4.3选通138
P4.0对应138A
P4.1对应138A
P4.2对应138A
*********************************************************/
}
&= ~BIT3;
}
首先你要看你的数码管是哪类啊?是共阳极还是共阴极。如果你全部都是亮的话,而且是显示个8字的。那么你控制位选,可以改变数码管的显示个数。如果你想改变数码管显示的数字,就改变段选吧。其实你这个一接电源就亮着是有原因的,你接上电源时,单片机的输出端口P0,P1,P2,P3都是复位的。除了P0口外,其他都处于高电平输出。当然,你的板子上也是肯定有个反相器,使高电平变成低电平。例如你刚上电,单片机复位,你的单片机先是P1口输出高电平到数码管的段选,然后P2口输出高电平到反相器,然后再输出低电平到数码管的位选。这样数码管就亮着啦。(我举例的数码管是共阴极的)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
本节课所需教具
小数点朝下 从红色线开始第四个孔 插数字2 接着就是数字3 4 5 6 7
从红色线开始 第四个孔插数字8 注意小数点的位置
然后挨着插入数字9 10 11 12 13
程序理解 :数字代表我们所插引脚 高低代表所选择高电平 低电平
显示数字 2 3
ቤተ መጻሕፍቲ ባይዱ
显示数字4
重点
应用范围: 数码管是显示屏其中一类, 通过对其不同的管脚输入相 对的电流,会使其发亮,从而显示出数字能够显示 时间、 日期、温度等所有可用数字表示的参数。 由于它的价格便宜,使用简单,在电器特别是家电领域 应用极为广泛,空调、热水器、冰箱等等。绝大多数热 水器用的都是数码管,其他家电也用液晶屏与荧光屏。
其中引脚: A1--------13 A2--------10 A3--------9 A4-------7
模拟连线
定义函数编辑(注意:定义函数
的名称首位一定大写)
数字1程序编辑
数字2程序编辑
数字3程序编辑
数字4程序编辑
选择Loop模块 调用函数
(注意:调用函数一定加时间)
程序数字显示效果为 1 2 3 4
数码管
数码管也称LED数码管
LED灯数码管是由多个发光二极管封装在一起组成8”字型 的器件,引线已在内部连接完成,只需引出它们的各个 笔划,常用段数一般为7段有的另加一个小数点。
数码管按发光二极管封装在一起组成8”字型的器件,可分 为1位,2位,3位,4位,等多位数码管
按发光二极管单元连接方式可分为共阳极数码管和共阴极 数码管。