《蓝桥杯CT107D单片机竞赛板》:数码管模块

原理图分享一(单片机_CT107D训练平台使用说明与电路原理图) 这是一个51的原理图,以前上大学的时候参加蓝桥杯使用的一个板子。 阅读详情
AI摘要

本文介绍了一种基于单片机的数码管显示实验,包括静态显示和动态显示两种方式。通过控制段选和位选实现不同内容的显示,如数字、字符等,并提供了详细的程序代码示例。

实验简介

软件控制,实现数码的静态和动态显示效果

实验原理图

在这里插入图片描述

实验原理

  • 数码管介绍:LED数码管为单片机中的显示器之一,有共阳和共阴数码管,CT107D单片机中所用的为共阳数码管, 即7段数码管(a,b,c,d,e,f,g)和一个小数点(dp)的共8个管脚有一端共同接到VCC上。CT107D单片机上有两个多位数码管(4位一体),两个4位一体的多位数码管内部的公共端(com)是独立的,公共端又叫做“位选线”,而负责显示什么数字的段线(a,b,c,d,e,f,g)和小数点(dp)全部是连在一起的,独立的公共端控制哪一位数码管亮(选择哪一位亮的过程我们称之为“位选”),而显示亮什么内容(亮什么内容这个过程我们称之为“段选”)

  • 基本原理:数码管显示有两种显示方式,静态显示方式和动态显示方式。静态显示的主要特征为:每个数码管的段选必须接一个8位数据线来保持显示的字形码。送入一次字形码后,显示字形可一直保持,直到送入新字形码为止。因此我们也就知道了静态显示的显示弊端所在,要么只显示一位数码管,否则多位数码管同时显示时,必须显示相同内容。而动态显示,则是一定程度上弥补了静态显示的显示弊端。

  • 实现须知:动态显示,利用减少段选线,分开位选线,利用位选线不同时选择通断,改变段选数据来实现的。利用人眼的视觉暂留现象,即光对视网膜所产生的视觉在光停止作用后,仍保留一段时间的现象,正常情况人眼只能分辨变化超过 24ms 间隔的运动。根据锁存器的芯片手册,锁存端LE得为高电平,即得控制Y7C,Y6C为高电平,下图知Y7C,受Y7控制,Y6C,受Y6控制,WR输入固定为低电平(0),了解数字电路中或非门知识,我们得使得Y6,Y7输出低电平,才能使的Y6C,Y7C输出高电平,而Y6,Y7为74HC138芯片(38译码器)的两个个管脚,查阅对应芯片手册可知,其真值表满足C = 1,B = 1,A = 0(Y6),C = 1,B = 1,A = 1(Y7)(对应管脚P27,P26,P25),使得Y6,Y7输出低电平,同时我们得保证管脚P2的其他的管脚(0~4)保持原来的状态。

    在这里插入图片描述
    在这里插入图片描述

实验程序

静态显示

奇数位数码管静态显示’1’

	//config.h--用于声明头文件,声明函数,声明一些经常使用的变量或难书写的语句
	#ifndef _CONFIG_H
	#define _CONFIG_H
	#include <STC15F2K60S2.H>//对应芯片函数头文件,定义了一些特殊功能寄存器
	
	//typedef unsigned char uchar;
	#define uchar unsigned char
	
	#endif
//main.c文件
#include "config.h"

//共阳数码管0~9的段选码
uchar smgduan[] = {
   
   0xc0, 0xf9, 0xa4, 0xb0, 0x99, 0x92, 0x82, 0xf8, 0x80, 0x90};

void led_init()//LED初始化为全部不亮
{
   
   
	P2 = (P2 & 0x1f) | 0x80;//初始化锁存器的Y4C
	P0 = 0xff;
}

void closeBeep()
{
   
   
	P2 = (P2 & 0x1f) | 0xa0;  //开启译码器的Y6端口,同时不改变其他管脚状态
	P0 &= 0xaf;//1010 1111//关闭蜂鸣器和继电器,P06和P04端口分贝输入,输出低电平
	P2 &= 0x1f;//关闭译码器	
}

void digDisplay()
{
   
   
	//Y6C输入高电平,选中位选,使得1,3,5,7个数码管亮,给对应管脚高电平即可
	P2 = (P2 & 0x1f) | 0xc0;
	P0 = 0x55; //0101 0101

	//Y7C输入高电平,选中段选,使得1,3,5,7数码管输出4 个 1,1的共阳数码管码值为0xf9
    P2 = (P2 & 0x1f) | 0xe0;
	P0 = 0xf9;//1111 1001
}


void main()
{
   
   
	closeBeep();
	led_init();		
	digDisplay();	

	while(1); 
}

奇数位数码管静态显示’-.’

在这里插入图片描述

  • 上图示,标记出来对于一个数码管中的8个LED灯的排列顺序,为了显示’-.‘,对于CT107D上的共阳极数码管我们需要将段选线g 和 小数点位dp置为低电平(0),对应的十六进制与二进制表示为0x3f = (0011 1111)

主要代码改动部分为下(仅在main.c中改变即可)

//共阳数码管0~9的段选码 + 加上显示 “-.’’ 和 P
uchar smgduan[] = {
   
   0xc0, 0xf9, 0xa4, 0xb0
单片机_CT107D训练平台电路原理图\蓝桥杯训练板\显示模块\限流电阻的作用\锁存器的作用\LCD1602显示电路 对于我用的这款led最大值20mA,5mA-20mA都能发光,就是电流越大亮度越高,20mA时候已经是最大值,而且用这个值会降低led的使用寿命,所以低一点就好了,我给他弄10mA试试。这里的限流其实还起到分压的作用,比如我们单片机出来的电压是3.3V、选择推挽输出大概是25mA+的电流。而led的压降是2V,正常发光电流是20mA。1.3v/10mA=130Ω(这里只是举个例子,一般都是用650Ω:3.3-2=1.3V,1.3V/2mA=650Ω)那么我配出的电阻值为:3.3v-2v=1.3v。 阅读详情

相关推荐

《蓝桥杯CT107D单片机竞赛板》:矩阵键盘模块

矩阵键盘模块实验简介实验原理图实验原理实验程序 实验简介 这里是引用 实验原理图 实验原理 器件介绍:见独立按键模块,一个独立按键需要一个I/O口,如我们实现多按键控制功能的项目,如果仅使用独立按键,单片机的I/O口一定是不够的,为了减少I/O引脚使用数量,就在单片机上引入了矩阵按键。根据上面的原理图,4 * 4的矩阵按键,每一行有4个独立按键的一端连接,每一列有对应的独立按键的另外一端连接,共使用了8个I/O口(如果使用独立按键则需要16个I/O口,的确大大减少了I/O口使用数量!),采用矩阵按键

MerryMaking7946的博客 2791

蓝桥杯单片机备忘录:CT107D高频模块速查与考场避坑指南

单片机开发中,硬件平台适配与实时调试能力决定工程落地成败。51单片机作为嵌入式入门核心,其定时器配置、I²C时序控制、数码管动态扫描等基础模块,在竞赛与实训场景中常因软硬耦合细节失效。尤其在蓝桥杯指定平台CT107D上,P1口开漏特性、DAC7578写入时序、矩阵键盘消抖逻辑等非通用约束,极易引发‘功能正确但现象异常’的调试困境。掌握最小可行代码块设计方法与真题驱动的故障树索引思维,可显著提升考场响应效率与功能一次成功率。本文聚焦蓝桥杯单片机赛道实战痛点,提供基于STC15F2K60S2与CT107D开发板

weixin_34174105的博客 396

蓝桥杯CT107竞赛板核心模块驱动解析:从译码器到I2C总线

本文详细解析了蓝桥杯CT107竞赛板的核心模块驱动原理,包括74HC138译码器的选通逻辑、74HC573锁存器的工作机制以及I2C总线的驱动设计。通过实战案例和调试技巧,帮助开发者掌握单片机资源受限环境下的外设控制方法,提升嵌入式开发能力。

weixin_30329623的博客 343

基于 CT107D 单片机实验

2.酷炫复杂的开机方式:数码管上居中显示“PoT.”,并保持 1.5 秒。LED 灯 1 2 7 8 按顺序间隔 1s 闪烁,4s 后 3 4 5 6 灯以 1s 间隔闪烁,2 秒后全亮。这是一个比较具体的任务需求,需要对单片机进行编程实现。该代码仅供参考,具体实现还需要根据实际硬件连接情况进行调整。1.开发板上电后,关闭蜂鸣器,继电器等无关外设;

走向CTO的路上... 834

基于51单片机C语言——学习矩阵键盘和数码管 以及 实现矩阵键盘键值实现8位数码管显示键值和LED灯闪烁

运用了矩阵键盘赋予相对应的16进制数1.矩阵键盘S16用来转换模式模式一:在8位数码管上显示按下的键值模式二:按下对应的键位,则LED闪烁对应的次数

Wang2869902214的博客 9767

CT107D单片机竞赛板V20原理图.pdf

蓝桥杯单片机官方开发板原理图

CT107D_SCH(原理图).pdf

CT107D_SCH(原理图),分享给大家,感谢下载,感谢感谢感谢感谢感谢感谢感谢感谢感谢感谢感谢感谢感谢感谢感谢感谢感谢感谢感谢感谢感谢感

SAP 财务快速记账之—G/L Item Fast Entry

SAP FICO 运维解决方案

lijinbao171022的博客 1647

从零搭建ECG心电图仪:模拟前端电路设计与噪声对抗实战

在电子工程和生物医学信号处理领域,微弱信号的采集与放大是核心挑战。其基本原理在于利用高精度模拟电路,从强大的环境噪声中提取出有用的差分信号。这项技术的核心价值在于将理论上的传感器信号转化为稳定、可靠的可用数据,是连接物理世界与数字系统的关键桥梁。在医疗监护、工业传感和科学测量等场景中,高性能的模拟前端设计直接决定了整个系统的精度与可靠性。本文聚焦于生物电信号采集这一具体应用,深入探讨如何运用差分放大器、低通滤波器和陷波滤波器等经典模块,构建一个能够有效对抗工频干扰和接触噪声的实用电路,最终实现从人体体表清晰

weixin_30616969的博客 459

史上最小白之RNN详解

1.前言 网上目前已经有诸多优秀的RNN相关博客,但是我写博客的出发点主要是为了加深和巩固自己的理解,所以还是决定自己再进行一下总结和描述,如有不正确的地方欢迎指正~ 2.区分RNN 循环神经网络(Recurrent Neural Network),递归神经网络(Recursive Neural Network),你有没有发现他们的缩写都是RNN,那他们两个是同一回事儿吗?网上有一些博客把这两就当...

Tink1995的博客 4万+

Mac上Office合法安装与激活全指南:2021/2024/M365区别解析

Office是微软办公套件的核心产品,其在macOS平台的部署逻辑与Windows截然不同——不依赖传统密钥激活,而是基于Microsoft账户与设备标识的云端绑定机制。理解这一原理,是解决‘无法验证开发者’‘打不开’‘功能受限’等常见问题的前提。Office 2021代表永久许可模型,Office 2024 LTSC面向企业离线场景,Microsoft 365则是持续订阅服务,三者在授权验证方式、更新策略与系统兼容性上存在本质差异。实际应用中,需结合macOS版本、芯片架构(Intel/Apple Sil

weixin_33491377的博客 1255

用Multisim仿真石英晶体振荡电路:从等效模型到频响曲线实战

本文通过Multisim软件,从构建石英晶体等效电路模型入手,详细演示了如何仿真分析其电抗频率特性曲线,并实战搭建与调试皮尔斯振荡电路。文章深入探讨了振荡必须工作在串联与并联谐振点之间感性区的原因,为电子设计者提供了从理论到仿真的完整可视化学习路径。

ik67890123的博客 501

光学测量仿真软件:Zygo_(12).Zygo软件的用户界面与操作指南

Zygo软件支持用户自定义工具和插件,以扩展软件的功能和适应特定的仿真需求。编写脚本使用Python或其他支持的脚本语言编写自定义工具的脚本。例如,编写一个脚本来计算光束的衍射效率。# 示例脚本:计算光束的衍射效率 import zygo # 导入Zygo软件的API def calculate_diffraction_efficiency(wavelength , grating_period , angle) : """计算光束的衍射效率:param wavelength: 光源波长(单位:米)

kkchenjj的博客 1669

23种设计模式-代理(Proxy)设计模式

软考中级-软件设计师 代理设计模式

片言可决讼,半纸能缚龙 1784

航天设备研制中的形态分类:电性件、正样件及其他关键形态详解

航天设备的研制是一个高度复杂且严谨的工程过程,涉及多个阶段的不同产品形态。这些形态各具特点,在研制流程中承担着不同的验证任务和工程目标。本文将系统介绍航天设备研制中的主要形态,包括**电性件(EM)**、**正样件(FM)**以及**结构热控件(STM)**、**鉴定件(QM)**和**初样件(PFM)**等,详细解析它们的定义、用途和工程意义,帮助读者全面理解航天产品从设计到飞行的全生命周期管理。

ScilogyHunter的博客 1659

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

上一篇: 《LeetCode之每日一题》:271.存在重复的元素
下一篇: 《LeetCode之每日一题》:272.最大子数组和
Mascottttttt
博客等级 码龄6年 628粉丝 367原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值