四位数码管编程实例

合集下载

4位数码管循环

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设计与应用》数码管显示实验

《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位拨动开关控制数码管显⽰系统设计务书设计题⽬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数码管编程

四位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 数码管控制实验-动态显示

单片机实验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位数码管倒计时程序逻辑

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键控制四个数码管显示的程序或思路

一个单片机4键控制四个数码管显示的程序或思路
Tags:,单片机,控制,数码
例如你刚上电单片机复位你的单片机先是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口输出高电平到反相器,然后再输出低电平到数码管的位选。这样数码管就亮着啦。(我举例的数码管是共阴极的)

四位共阳数码管的使用

四位共阳数码管的使用
P1M0=0X00;
P1M1=0XFF;//设置P1,P3接口的工作方式为推挽输出。
P3M0=0X00;
P3M1=0XFF;
/*****************************************************************/
a=0;b=0;c=0;d=0;
while(1)
#include<stc12c2052.h>
#define weixuan P1
sbit a= P3^5;
sbit b =P3^4;
sbit c =P3^3;
sbit d= P3^2;
void yanshi(unsigned int a )
{
unsigned int i;
while(--a)
{
for(i=0;i<600;i++) ;
P1.4
P1.3
P1.2
P1.1
P1.0
十六
引脚
1
2
4
5
7
10
11
Dp
0
0
0
0
1
0
0
0
1
11
1
1
1
0
1
0
1
1
1
D7
2
0
0
1
0
0
1
0
1
25
3
1
0
0
0
0
1
0
1
85
4
1
1
0
0
0
0
1
1
C3
5
1
0
0
0

fpga简易四位密码锁的代码

fpga简易四位密码锁的代码

FPGA简易四位密码锁的代码一、概述在现代社会中,密码锁被广泛应用于各种场合,如家庭、商业和工业等。

密码锁的使用方便、安全性高,受到了人们的青睐。

FPGA (Field Programmable Gate Array)作为一种灵活可编程的硬件设备,可以用来实现各种数字逻辑电路,包括密码锁。

本文将介绍如何使用FPGA实现一个简易的四位密码锁,并提供相应的代码。

二、硬件设计1. 需要的硬件- FPGA开发板- 数字键盘- LED数码管2. 硬件连接- 将数字键盘通过连接线连接到FPGA开发板上的GPIO端口,用于输入密码;- 将LED数码管通过连接线连接到FPGA开发板上的GPIO端口,用于显示密码输入状态。

三、软件设计1. Verilog代码设计```verilog// 模块声明module password_lock (input wire clk, // 时钟信号input wire rst, // 复位信号input wire [3:0] key_in, // 数字键盘输入output reg [3:0] led_out // LED数码管输出);// 代码实现reg [3:0] password = 4'b1101; // 设定密码为1101always (posedge clk or posedge rst) beginif (rst) beginled_out <= 4'b1111; // 置LED数码管输出为1111end else beginif (key_in == password) beginled_out <= 4'b0000; // 如果输入密码正确,则LED数码管输出为0000end else beginled_out <= 4'b1111; // 如果输入密码错误,则LED数码管输出为1111endendendendmodule```2. 实现原理说明- 模块声明中指定了模块的输入和输出端口;- 代码实现中首先设定了一个四位的密码,然后在时钟信号的作用下判断输入的密码是否与设定的密码相匹配,如果匹配则将LED数码管输出为0000,表示密码正确;否则输出为1111,表示密码错误。

51单片机4位数码管秒表代码

51单片机4位数码管秒表代码

主题:51单片机4位数码管秒表代码内容:1. 介绍51单片机51单片机是一种通用的单片机系列,广泛应用于各种电子设备中。

它具有稳定性好、成本低、易于编程等优点,因此备受电子爱好者和专业工程师的青睐。

2. 4位数码管秒表4位数码管秒表是一种常见的电子计时器,通过LED数码管显示出当前的时间,可以用于各种计时应用,比如比赛计时、实验计时等。

3. 代码编写以下是一段简单的51单片机4位数码管秒表代码:```c#include <reg52.h>#include <intrins.h>// 数码管位选端口sbit wei1 = P2^2;sbit wei2 = P2^3;sbit wei3 = P2^4;sbit wei4 = P2^5;// 数码管显示段选端口sbit se2 = P0^2;sbit se1 = P0^3;sbit se4 = P0^4;sbit se3 = P0^5;unsigned char code smgduan[17] = {0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x77,0x7C,0x39,0x5E,0x79,0x71,0x00}; // 显示0~9,A,b,C,d,E,F,无的值void delay(unsigned int i) { // 延时while(i--);}void display(unsigned char *tab) { // 数码管显示 unsigned char i;for(i=0; i<7; i++) {P0=0; // 清除段选,以选中所显示的数码管 switch(i) { //确定位选case(0):wei1=0;wei2=wei3=wei4=1;break;case(1):wei2=0;wei1=wei3=wei4=1;break;case(2):wei3=0;wei1=wei2=wei4=1;break;case(3):wei4=0;wei1=wei2=wei3=1;break;default:break;}P0=tab[i]; //段码输出delay(5); // 数码管微秒级延迟}}void m本人n() {unsigned char a=0,b=0,c=0,d=0; //时钟的4位数据 unsigned int i=0;wei1=wei2=wei3=wei4=1; //段选、位选初始化while(1) {a++; // 微秒级的计数if(a==100) { //达到100a=0; b++; //b加1if(b==60) { //当b=60时b=0; c++; //c加1if(c==60) { //当c=60时c=0; d++; //d加1if(d==24) { //当d=24时d=0; //归零}}}}display(smgduan+d10); //显示个秒wei1=1;wei2=wei3=wei4=0; //位选delay(500); //延时display(smgduan+c/10+10); //显示十秒wei2=1;wei1=wei3=wei4=0; //位选delay(500); //延时display(smgduan+b10); //显示个分wei3=1;wei1=wei2=wei4=0; //位选delay(500); //延时display(smgduan+b/10+10); //显示十分wei4=1;wei1=wei2=wei3=0; //位选delay(500); //延时if(i++==200) { //当i=200时i=0;}}}```4. 代码分析该代码通过对51单片机的引脚进行控制,实现了4位数码管秒表的计时功能。

4位共阴数码管显示代码

4位共阴数码管显示代码

4位共阴数码管显示代码共阴数码管是一种常见的数码显示器件,它由4位7段数码管组成,每个数码管由7个LED组成,可以显示0-9的数字以及一些字母。

在控制4位共阴数码管显示数字的代码中,通常会使用单片机或者其他微控制器来实现。

下面是一个简单的示例代码,使用Arduino来控制4位共阴数码管显示数字:c.int digitPins[] = {2, 3, 4, 5}; // 数码管的位选引脚。

int segmentPins[] = {6, 7, 8, 9, 10, 11, 12}; // 数码管的段选引脚。

// 数码管显示的数字0-9的编码。

int numbers[10][7] = {。

{1, 1, 1, 1, 1, 1, 0}, // 0。

{0, 1, 1, 0, 0, 0, 0}, // 1。

{1, 1, 0, 1, 1, 0, 1}, // 2。

{1, 1, 1, 1, 0, 0, 1}, // 3。

{0, 1, 1, 0, 0, 1, 1}, // 4。

{1, 0, 1, 1, 0, 1, 1}, // 5。

{1, 0, 1, 1, 1, 1, 1}, // 6。

{1, 1, 1, 0, 0, 0, 0}, // 7。

{1, 1, 1, 1, 1, 1, 1}, // 8。

{1, 1, 1, 1, 0, 1, 1} // 9。

};void setup() {。

for (int i = 0; i < 4; i++) {。

pinMode(digitPins[i], OUTPUT); }。

for (int i = 0; i < 7; i++) {。

pinMode(segmentPins[i], OUTPUT); }。

}。

void loop() {。

for (int i = 0; i < 10; i++) {。

displayNumber(i);delay(1000);}。

microbit 四位数码管1637 代码

microbit 四位数码管1637 代码

一、简介micro:bit是一款基于ARM Cortex-M0微控制器的微型计算机,可以用来进行编程和创作。

它具有丰富的硬件接口和丰富的软件支持,可以用来进行各种各样的创意项目。

其中,micro:bit的四位数码管模块采用了1637芯片,可以通过编程进行控制,实现数字显示功能。

二、1637芯片介绍1637芯片是一款四位共阳数码管驱动芯片,具有简单的接口和丰富的功能。

它可以同时驱动四个共阳数码管,支持多种显示模式和亮度控制。

在micro:bit中,通过设置相关的寄存器和发送特定的数据,就可以控制1637芯片来实现数字的显示。

三、micro:bit编程环境1. micro:bit提供了多种编程环境,包括MakeCode和MicroPython 等。

用户可以根据自己的喜好和项目需求选择合适的编程环境进行开发。

2. 在MakeCode环境中,使用JavaScript块编程可以轻松地配置并控制micro:bit的四位数码管1637模块。

用户可以通过拖拽模块和设置参数来实现数字的显示和控制。

四、使用1637芯片控制四位数码管1. 用户需要将micro:bit与四位数码管1637模块进行连接。

可以通过插针或者面包板等方式进行连接,确保连接的稳固和可靠。

2. 在MakeCode环境中,用户可以使用“1637数码管”模块来控制四位数码管的显示。

可以设置显示的位置、显示的数字、显示的亮度等参数。

3. 通过设置适当的代码,用户可以实现各种数字的显示效果,如数字的滚动、闪烁、循环显示等。

还可以结合按钮和传感器等其他硬件模块,实现更丰富的交互和展示效果。

五、实例演示下面通过一个简单的实例来演示如何使用1637芯片控制四位数码管。

1. 控制四位数码管显示数字“1234”:```basic.forever(() => {pins.digitalWritePin(DigitalPin.P0, 0)pins.i2cWriteNumber(72, 1234, NumberFormat.Int16BE) })```2. 控制四位数码管显示滚动数字:```basic.forever(() => {for (let i = 0; i < 10; i++) {pins.digitalWritePin(DigitalPin.P0, 0)pins.i2cWriteNumber(72, i, NumberFormat.UInt8LE, false) basic.pause(500)}})```六、总结通过上述介绍,我们了解了micro:bit的四位数码管1637代码的基本原理和实际操作方法。

51单片机(四位数码管的显示)程序[1]

51单片机(四位数码管的显示)程序[1]

51单片机(四位数码管的显示)程序基于单片机V1或V2实验系统,编写一个程序,实现以下功能:1)首先在数码管 上显示P ”个字符;2)等待按键,如按了任何一个键,则将这 4个字符清除, 改为显示0000”个字符(为数字的0)。

E3最佳答案下面这个程序是4x4距阵键盘丄ED 数码管显示,一共可以到0-F 显示,你可以稍微 改一下就可以实现你的功能了,如还有问题请发信息,希望能帮上你!#i nclude<at89x52.h> un sig ned char codeDig[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1 ,0x86,0x8e}; //gongyang 数码管 0-F 代码void key_delay(void) {int t;for(t=0;t<500;t++);}un sig nedchar k;//设置全局变量k 为键盘的键值键盘延时函数键盘扫描函数 ***************************** *///延时函数voidkeyscan(void)//键盘初始化 //有键按下? //延时 //确认真的有键按下? //使行线 P2.4 为低电平,其余行为高电平 //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)//键盘扫描函数 {unsigned char a;P2 = 0xf0;if(P2!=0xf0){key_delay();if(P2!=0xf0){P2 = 0xfe;key_delay();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;case10:P0=Dig[10];break;case11:P0=Dig[11];break;case12:P0=Dig[12];break;case13:P0=Dig[13];break;case14:P0=Dig[14];break;case15:P0=Dig[15];break;default:break; // 退出}}}endWelcome ToDownload !! !欢迎您的下载,资料仅供参考!。

四位秒表程序

四位秒表程序

重赏之下心有勇夫^_^;汇编时钟程序。

4位共阳管。

P0口段码,P2.0~P2.3位码。

显示毫秒和秒。

三个按键一个控制时钟开始走,一个控制暂停和继续。

一个按键清0;12M晶振 2011 04 20 调试完成STRT EQU P3.2STP EQU P3.3CLRR EQU P3.5ORG 00HSJMP MAINORG 0BHAJMP T0INTORG 30HMAIN: MOV SP,#60HMOV R3,#10MOV R4,#20MOV TMOD,#01H ;定时器T0工作方式1MOV TH0,#0D8H ;10MS定时初值MOV TL0,#0F0HSETB ET0SETB EAk1: LCALL DISPJB STRT,K2LCALL DISPJNB STRT,$-3AJMP STARTk2: LCALL DISPJB STP,K3LCALL DISPJNB STP,$-3AJMP SSK3: LCALL DISPJB CLRR,K1LCALL DISPJNB CLRR,$-3AJMP CLEARSTART: SETB TR0CLR F0 ;如无此条,暂停后,不是按继续键,而是按开始键继续走时,下次按暂停键时,不能暂停AJMP K1SS: CPL F0JNB F0,STARTSTOP: CLR TR0AJMP K2CLEAR: CLR TR0MOV A,#0MOV 20H,AMOV 21H,AMOV 22H,AMOV 23H,AMOV 24H,AMOV 25H,AAJMP K3DISP: MOV A,24HMOV B,#10DIV ABMOV 20H,B ;余数(MS个位数)MOV 21H,A ;商(MS十位数)MOV A,25HMOV B,#10DIV ABMOV 22H,B ;余数(S个位数)MOV 23H,A ;商(S十位数)MOV A,20H ;MS个位ACALL SEG7MOV P0,ASETB P2.4ACALL DLYCLR P2.4MOV A,21H ;MS十位ACALL SEG7MOV P0,ASETB P2.5ACALL DLYCLR P2.5MOV A,22H ;S个位ACALL SEG7MOV P0,ACLR P0.7SETB P2.6ACALL DLYCLR P2.6MOV A,23H ;S十位ACALL SEG7MOV P0,ASETB P2.7ACALL DLYCLR P2.7RETT0INT: MOV TH0,#0D8H MOV TL0,#0F0HINC 24HMOV A,24HCJNE A,#99,T0INTRMOV 24H,#0INC 25HMOV A,25HCJNE A,#60,T0INTRMOV 25H,#0T0INTR: RETIDLY: MOV R7,#10D1: MOV R6,#50DJNZ R6,$DJNZ R7,D1RETSEG7: INC AMOVC A,@A+PCRETDB 0C0H;0DB 0F9H;1DB 0A4H;2 DB 0B0H;3 DB 099H;4 DB 092H;5 DB 082H;6 DB 0F8H;7 DB 080H;8 DB 090H;9 END2STRT EQU P1.0CLRR EQU P1.1ORG 00HAJMP MAINORG 0BHAJMP T0INT0ORG 30HMAIN:MOV SP,#60HMOV R4,#20MOV TMOD,#01HMOV TH0,#3CH;12M晶振时定时初值取#3CB0H,还可细调如TL=#0B7H,可以更准MOV TL0,#0B0HSETB ET0SETB EAk1:ACALL DISP ;开始/暂停键JB STRT,K2ACALL DISPJNB STRT,$-2AJMP K1K2:JB CLRR,K1ACALL DISPJNB CLRR,$-2MOV A,#0CLR TR0MOV 26H,AMOV 27H,AMOV 28H,AAJMP K2DISP:MOV A,26HMOV B,#10DIV ABMOV 20H,B ;余数(百分秒位数)MOV 21H,A ;商(十分秒位数)MOV A,27HMOV B,#10DIV ABMOV 22H,B ;余数(秒个位数)MOV 23H,A ;商(秒十位数)MOV A,28HMOV B,#10DIV ABMOV 24H,B ;余数(分个位数)MOV 25H,A ;商(分十位数)MOV A,20H ;百分秒?ACALL SEG7MOV P0,ACLR P2.3ACALL DLYSETB P2.3MOV A,21H ;十分秒ACALL SEG7MOV P0,AACALL DLYSETB P2.2DISP1:MOV A,22H ;秒个位ACALL SEG7MOV P0,ASETB P0.7CLR P2.1ACALL DLYSETB P2.1MOV A,23H ;秒十位ACALL SEG7MOV P0,ACLR P2.0ACALL DLYSETB P2.0RETT0INT0:MOV TH0,#3CH; ;定时中断子程序。

中国电子学会机器人水平五级考试编程操作题目汇总

中国电子学会机器人水平五级考试编程操作题目汇总

主题1:串口交互四位数码管显示装置器件:四位数码管、74HC595串口寄存器。

要求:1、使用74HC595串口寄存器芯片控制四位数码管显示数字,显示的数字在0~9999之间依次循环。

2、相邻数字显示的时间间隔由串口输入数值控制,在串口监视器输入框中输入10~2000间的数值,点击【发送】,输入的数值同步在串口监视器显示,同时四位数码管按照输入的数值以毫秒为单位间隔显示。

3、再次发送不同的数值,数码管显示的时间间隔按照新输入数值随之改变,新输入的数值也同步显示到串口监视器。

4、程序编写时,要求使用数组存储0~9数字信息。

主题2:LED灯交互四位数码管显示装置器件:LED灯、电位器、四位数码管、74HC595串口寄存器。

要求:1、程序控制LED实现呼吸灯效果,即LED灯的亮度在最亮和熄灭之间渐变;2、将LED呼吸灯当前亮度对应的PWM值实时显示四位数码管;3、通过电位器控制LED呼吸灯亮度变化的频率。

旋转电位器,LED呼吸灯的呼吸频率发生变化,四位数码管上的数值的更新速度也随之变化;4、LED呼吸灯达到最亮状态时,对应的PWM值为1023,熄灭时对应的PWM值为0;5、程序编写时,要求使用数组存储0~9数字信息。

主题3:跳动的心器件:8x8LED点阵、74HC595串口寄存器、电位器、LED灯。

要求:使用74HC595串口寄存器芯片控制8x8LED点阵显示大小心形图案,通过电位器调整大小心形图案的切换频率;通过LED亮度的指示当前的切换频率,详细要求如下:1、在8x8LED点阵上分别连续显示大小两个心形图案。

2、通过旋转电位器切换大小心形图案的切换时间在100ms-500ms之间变化。

3、通过LED灯的亮度来指示当前心形图案的切换频率,当切换时间为100ms时,LED灯最亮;当切换时间为500ms时,LED灯熄灭;当切换时间为100ms-500ms之间时,LED灯亮度随之而变化。

202103按键控制数字“3”单步显示通过两个按键控制一位数码管从a至h各段位依次亮灭。

四位数码管编程

四位数码管编程

4位数码管实验产品介绍:四位数码管是由四个共阴数码管组合而成,四位一体数码管,其内部段已连接好,引脚如图所示(正面朝自己,小数点在下方)。

a、b、c、d、e、f、g、dP为段引脚,1、2、3、4分别表示四个数码管的位。

实验器件:■ 4位数码管:1 个■多彩面包板实验跳绳:若干实验连线将代码上传到开发板。

程序代码(直接打开对应例程即可)//静态程序(静态显示1234)实验结论:上电后四位数码管静态显示1234.4位数码管实验产品介绍:四位数码管是由四个共阴数码管组合而成,四位一体数码管,其内部段已连接好,引脚如图所示(正面朝自己,小数点在下方)。

a、b、c、d、e、f、g、dP为段引脚,1、2、3、4分别表示四个数码管的位。

实验器件:■ 4位数码管:1 个■多彩面包板实验跳绳:若干实验连线将代码上传到开发板。

程序代码(直接打开对应例程即可)//静态程序(静态显示1234)int ledCount=8;int segCount=4;long previousMillis = 0;const unsigned chardofly_DuanMa[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};int ledPins[] = {12,8,5, 3, 2, 11, 6, 4, };int segPins[]={13,10,9,7};unsigned char displayTemp[4];//显示缓冲区void setup() {// 循环设置,把对应的端口都设置成输出for (int thisLed = 0; thisLed < ledCount; thisLed++) {pinMode(ledPins[thisLed], OUTPUT); }for (int thisSeg = 0; thisSeg < segCount; thisSeg++) {pinMode(segPins[thisSeg], OUTPUT);}}void deal(unsigned char value){for(int i=0;i<8;i++)digitalWrite(ledPins[i],bitRead(value,i));//使用了bitWrite 函数,非常简单// !bitRead(value,i)}void loop() {static unsigned int num;//定义一个数据static unsigned long lastTime=0;if (millis() - lastTime >= 1000) {lastTime = millis();//serialOutput();num++;}displayTemp[0]=dofly_DuanMa[1]; //静态显示displayTemp[1]=dofly_DuanMa[2];displayTemp[2]=dofly_DuanMa[3];displayTemp[3]=dofly_DuanMa[4];static int i;unsigned long currentMillis = millis();if(currentMillis - previousMillis > 0) {previousMillis = currentMillis;deal(0);// 清除“鬼影”for(int a=0;a<4;a++)digitalWrite(segPins[a],1);//digitalWrite(segPins[i],0);//deal(displayTemp[i]);//读取对应的段码值i++;if(i==4) //4 位结束后重新循环i=0;}}实验结论:上电后四位数码管静态显示1234.//动态程序int ledCount=8;int segCount=4;long previousMillis = 0;const unsigned chardofly_DuanMa[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};\ int ledPins[] = {12,8,5, 3, 2, 11, 6, 4, };int segPins[] = {13,10,9,7};unsigned char displayTemp[4];void setup() {// 循环设置,把对应的端口都设置成输出for (int thisLed = 0; thisLed < ledCount; thisLed++) {pinMode(ledPins[thisLed], OUTPUT); }for (int thisSeg = 0; thisSeg < segCount; thisSeg++) {pinMode(segPins[thisSeg], OUTPUT);}}void deal(unsigned char value){for(int i=0;i<8;i++)digitalWrite(ledPins[i],bitRead(value,i));}void loop() {static unsigned int num;//定义一个数据static unsigned long lastTime=0;if (millis() - lastTime >= 1000) {lastTime = millis();//serialOutput();num++;}displayTemp[0]=dofly_DuanMa[num/1000]; //动态显示displayTemp[1]=dofly_DuanMa[(num%1000)/100];displayTemp[2]=dofly_DuanMa[((num%1000)%100)/10];displayTemp[3]=dofly_DuanMa[((num%1000)%100)%10];static int i;unsigned long currentMillis = millis();if(currentMillis - previousMillis > 0) {previousMillis = currentMillis;deal(0);for(int a=0;a<4;a++)digitalWrite(segPins[a],1);digitalWrite(segPins[i],0);//deal(displayTemp[i]);//读取对应的段码值i++;if(i==4) //4 位结束后重新循环i=0;}}实验结论:上电显示0000,然后每次加1,最后加到9999后回到0000。

课题四 数码管显示

课题四  数码管显示

图4-1 数码管显示实物图
任务一
LED数码管的静态显示
本任务就是将单片机与数码管接成图 4-2所示静态显示方式,编程实现数码管 每隔0.5s的0-9数字显示。
图4-2
数码管显示电路图
一、任务分析
所谓静态显示,就是当单片机某一端口输出 一组显示数据之后,该端口一直保持该数据输出, 维持数码管的显示数字,直到端口数据改变,又 保持显示下一数据的显示方式。 在具体电路连接上,将单片机一个端口的八 个端子接在一只数码管的八个引脚上(h端为小数 点),控制数码管的七段LED的亮或熄,显示器 出数字,这种显示控制方式就是静态显示。静态 显示电路连接特点是单片机端口的每一位与数码 管的一个端相连接,相当于单片机的一个引脚外 接一只发光二极管。
unsigned char dispcount; void delay02s(void) { unsigned char i,j,k; for(i=10;i>0;i--) for(j=200;j>0;j--) for(k=248;k>0;k--);} void main(void) { while(1) {for(dispcount=0;dispcount<8;dispcount++) { P0=tablewe[dispcount]; P1=tabledu[dispcount]; delay02s(); } } }
数码管段码表
表4-1 共阴数码管显示数字的段码表
段名称 dp g f e d c b a 对应段码
对应引脚
数字0 数字1 数字2 数字3 数字4 数字5 数字6 数字7 数字8
P1.7
0 0 0 0 0 0 0 0 0
P1.6
0 0 1 1 1 1 1 0 1
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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位,等多位数码管
按发光二极管单元连接方式可分为共阳极数码管和共阴极 数码管。
相关文档
最新文档