STC15控制数码管 38译码器
共阳极数码管举例
#define MAIN_Fosc 27000000L //定义主时钟
#include "STC15Fxxxx.H"
#define uchar unsigned char
void enable_38(void);
void LED_OUT(uchar X);
void Led_test(char pos);
//数码管显示0-9值,全暗状态是0xFF
unsigned char code LED_0F[] =
{
//0 1 2 3 4 5 6 7 8 9
0x11, 0xD7, 0x32, 0x92, 0xD4, 0x98, 0x18, 0xD3, 0x10, 0x90,
};
//595控制数码管
sbit DIO = P2 ^ 7; //串行数据输入
sbit RCK = P2 ^ 6; //锁存
sbit SCK = P2 ^ 5; //移位
//38译码器3个输入和1个使能
sbit _74HC238_A0 = P2 ^ 4;
sbit _74HC238_A1 = P2 ^ 3;
sbit _74HC238_A2 = P2 ^ 2;
sbit _74HC238_E1 = P2 ^ 1; //拉低有效
//用于控制38译码器输出不同值,来源于真值表
uchar _38[] = {0x0, 0x10, 0x8, 0x18}; //位选每个数码管
// 主程序
void main(void)
{
P0M1 = 0;
P0M0 = 0; //设置为准双向口
P1M1 = 0;
P1M0 = 0;
P2M1 = 0;
P2M0 = 0;
P3M1 = 0;
P3M0 = 0;
P4M1 = 0;
P4M0 = 0;
P5M1 = 0;
P5M0 = 0;
P6M1 = 0;
P6M0 = 0;
P7M1 = 0;
P7M0 = 0;
while(1)
{
enable_38();
}
}
//========================================================================
// 函数: void delay_ms(u8 ms)
// 描述: 延时函数。
// 参数: ms,要延时的ms数, 这里只支持1~255ms. 自动适应主时钟.
// 返回: none.
// 版本: VER1.0
// 日期: 2013-4-1
// 备注:
//========================================================================
void delay_ms(u8 ms)
{
u16 i;
do
{
i = MAIN_Fosc / 13000;
while(--i);
}
while(--ms);
}
//使能38译码器输出不同值,此函数很重要
//因为是共阳极数码管,所以必须先段选(先给电平)再位选(使能),不然有微弱重影
void enable_38(void)
{
static char index = 0; //代表位选第n列
Led_test(index); //显示第n列
//位选
P2 &= 0xE3;
P2 |= _38[index];
//38译码器使能
_74HC238_E1 = 0;
delay_ms(1);
//38译码器去使能,必须要去使能以后再使能下一个数码管,不然有严重重影
_74HC238_E1 = 1;
index++; //循环点亮
index %= 4; //一共4列
}
//点亮一个数码管
void LED_display(uchar X)
{
LED_OUT(X); //段选
RCK = 0; //锁存
RCK = 1;
}
/*
38译码器每次位选一列数码管,一列有四个数码管,分别用595控制
pos: 第n列数码管
*/
void Led_test(char pos)
{
switch(pos)
{
case 0:
//位选一次,分别点亮4个数码管
LED_display(LED_0F[0]);
LED_display(LED_0F[1]);
LED_display(LED_0F[2]);
LED_display(LED_0F[3]);
break;
case 1:
LED_display(LED_0F[3]);
LED_display(LED_0F[2]);
LED_display(LED_0F[1]);
LED_display(LED_0F[0]);
break;
case 2:
LED_display(LED_0F[5]);
LED_display(LED_0F[6]);
LED_display(LED_0F[7]);
LED_display(LED_0F[8]);
break;
case 3:
LED_display(LED_0F[8]);
LED_display(LED_0F[7]);
LED_display(LED_0F[6]);
LED_display(LED_0F[5]);
break;
default:
break;
}
}
//单个数码管显示
void LED_OUT(uchar X)
{
uchar i;
for(i = 8; i >= 1; i--)
{
if(X & 0x80)
{
DIO = 1;
}
else
{
DIO = 0;
}
X <<= 1;
SCK = 0; //移位
SCK = 1;
}
}
38译码器:https://blog.csdn.net/zhangxuechao_/article/details/91566673
STC15控制数码管 38译码器的更多相关文章
- 8-3编码器,3-8译码器的verilog实现
在数字系统中,由于采用二进制运算处理数据,因此通常将信息变成若干位二进制代码.在逻辑电路中,信号都是以高,低电平的形式输出.编码器:实现编码的数字电路,把输入的每个高低电平信号编成一组对应的二进制代码 ...
- STC-51开发板-单片机控制数码管&按键&点阵综合操作
操作: 实现按下一个按键,对应的数码管和点阵显示相应的数字 代码: /* *******************数码管按键综合项目********************* */ #include ...
- 用Verilog语言设计一个3-8译码器
case语句 if_case语句 源码下载 Github >>
- [51单片机] 以从0开始做4位8段共阴数码管3461AS驱动谈细节决定高质量DIY
目录 1)问题产生 2)失败尝试 3)最终方案 4)使用方法 5)知识共享 1)问题产生 在上一篇“以PWM控制直流电机为例建一个简单的51工程框架”中已向大家介绍了一个封装好的8位8段数码管的驱动( ...
- C51 动态数码管 个人笔记
8段led管构成一个数字. 开发板上共有8个数字. 每个数字有一个使能端(段选引脚) 每个数字的位选端(选择8段led管哪些亮,即构成什么图案)并联在一起 轮流点亮不同数字,速度很快,视觉暂留,从而形 ...
- 数码管动态显示Verilog实现(参考小梅哥教程)(视觉暂留)
一个数码管有九个引脚,控制八段二极管的亮灭,用以显示需要的数字. 当有N个数码管时,一个一个控制的话需要N x 9 个引脚,消耗资源较多. 因此可以利用动态显示的方案通过人眼的视觉暂留特性达到静态显示 ...
- 03-组合逻辑电路设计之译码器——小梅哥FPGA设计思想与验证方法视频教程配套文档
芯航线——普利斯队长精心奉献 课程目标: 1. 再次熟悉Quartus II工程的建立以及完整的FPGA开发流程 2. 以译码器为例学会简单组合逻辑电路设计 实验平台:无 实验原理: 组合逻辑, ...
- 《FPGA全程进阶---实战演练》第十章 数码管实验
1基础理论部分 led数码管是由多个发光二极管封装在一起组合的“8”字型的器件,引线内部已经完成,如下图10.1所示,图10.2为实物图. 图10.1 数码管内部结构 那么我们想要控制数码管的亮灭,其 ...
- Verilog学习笔记简单功能实现(四)...............译码器和编码器
这里以简单的3-8译码器和8-3编码器为例: module decoder3_8(a,out); :]a; :]out; 'b1<<a;/*把最低位的1左移in位(根据in口输入的值)并赋 ...
随机推荐
- Java注解简单学习
注解(也被称作元数据)为我们在代码中添加信息提供了一种形式化的方法,使我们在稍后某个时刻可以很方便的使用这些数据,其在一定程度上将元数据与源代码文件结合在一起,而不是保存在外部文档中. 注解使我们可以 ...
- Flask 教程 第五章:用户登录
本文翻译自The Flask Mega-Tutorial Part V: User Logins 这是Flask Mega-Tutorial系列的第五部分,我将告诉你如何创建一个用户登录子系统. 你在 ...
- Java - 包装类 常量池
概述: 在Java中存在一些基本数据类型,这些基本数据类型变量,不能像其他对象一样调用方法,属性.... 一些情况下带来一些问题,包装类就是为了解决这个问题而出现 包装类可以使得这些基础数据类型,拥有 ...
- Python Web(四)
Infi-chu: http://www.cnblogs.com/Infi-chu/ 一.Django-forms作用 前端和后端都要校验 前端校验的目的:减少后端的压力 用forms可以同时完成前端 ...
- Vue.js+vue-element搭建属于自己的后台管理模板:创建一个项目(四)
Vue.js+vue-element搭建属于自己的后台管理模板:创建一个项目(四) 前言 本章主要讲解通过Vue CLI 脚手架构建工具创建一个项目,在学习Vue CLI之前我们需要先了解下webpa ...
- 利用Azure虚拟机安装Dynamics 365 Customer Engagement之十一:SQL Server配置Always On后D365的配置更改
我是微软Dynamics 365 & Power Platform方面的工程师罗勇,也是2015年7月到2018年6月连续三年Dynamics CRM/Business Solutions方面 ...
- 记录:c#实现微信,支付宝扫码支付(一)
因为公司系统业务需要,这几天了解了一下微信和支付宝扫码支付的接口,并用c#实现了微信和支付宝扫码支付的功能. 微信支付分为6种支付模式:1.付款码支付,2.native支付,3.jsapi支付,4.a ...
- iOS多线程定时器
在使用定时器时,我们经常使用NSTimer,但是由于NSTimer会受RunLoop影响,当RunLoop处理的任务很多时,就会导致NSTimer的精度降低,所以在一些对定时器精度要求很高的情况下,应 ...
- vue项目搭建及创建、目录结构、项目启动、全局配置
Vue项目环境搭建 """ node ~~ python:node是用c++编写用来运行js代码的 npm(cnpm) ~~ pip:npm是一个终端应用商城,可以换国内 ...
- SP1716 GSS3 - Can you answer these queries III 线段树
问题描述 [LG-SP1716](https://www.luogu.org/problem/SP1716] 题解 GSS 系列的第三题,在第一题的基础上带单点修改. 第一题题解传送门 在第一题的基础 ...