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口输入的值)并赋 ...
随机推荐
- (转)GitHub Desktop 拉取 GitHub上 Tag 版本代码
转自:GitHub Desktop 拉取 GitHub上 Tag 版本代码 一直在使用 GitHub Desktop 图形化 git 管理工具,统一项目框架版本时需要切换到ThinkPHP Tag 分 ...
- PhantomJS抓取中文文档乱码
使用PhantomJs抓取百度标题乱码 var url="http://www.baidu.com" var page=require('webpage').create() pa ...
- Change Field Layout and Visibility in a List View 在列表视图中更改字段布局和可见性
This lesson will guide you through the steps needed to select columns displayed in the List View. Fo ...
- ABAP 字符串换行符处理
今天发现BW系统从K3系统数据库抽取会计科目的描述时,转换出错. 从监控器上看是值2KO 845 412D#有问题,但不知道有什么问题,检查后感觉是符号#的问题. 在转换中添加代码,替换#,发现没有起 ...
- 三大免费开源的php语言cms系统 用好它们让你一天建好一个网站
php语言只所以在web开发领域占据半壁江山,是因为它有太多的生态,成熟的框架体系,广泛的开源cms系统.建设网站的时候,都想提升开发效率,效率就是成本,如果你用原生php语言开发一个项目,既要设计数 ...
- echarts玩转图表之矩形树图
前言 这是第一次用makedown编辑器写文章,感觉像一件利器,排版美观而且效率飙升.进入正题 Echart官网文档地址 针对于矩形树图api配置项链接 1. 完全从数据定义图形 $.get( &qu ...
- Python日期计算
Python源代码如下: # -*- coding: UTF-8 -*- """ 简述:要求输入某年某月某日 提问:求判断输入日期是当年中的第几天? Python解题思路 ...
- KumuluzEE - Java EE的微服务框架
KumuluzEE - Java EE的微服务架构 https://www.jdon.com/soa/kumuluzEE.html
- MySQL 57安装部署(Zip版)(Windows版)
1. 在<MYSQL>的根目录下新建一个my.ini写入以下内容 [mysqld] port = 3306 basedir=D:\mysql\mysql-5.7.22-winx64 # M ...
- linux 的swap、swappiness及kswapd原理【转】
本文讨论的 swap基于Linux4.4内核代码 .Linux内存管理是一套非常复杂的系统,而swap只是其中一个很小的处理逻辑. 希望本文能让读者了解Linux对swap的使用大概是什么样子.阅读完 ...