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口输入的值)并赋 ...
随机推荐
- Actor模型(分布式编程)
Actor的目的是为了解决分布式编程中的一系列问题.所有消息都是异步交付的,因此将消息发送方与接收方分开,正是由于这种分离,导致actor系统具有内在的并发性:可以不受限制地并行执行任何拥有输入消息的 ...
- PHP制作的掷色子点数抽奖游戏实例
PHP制作的掷色子点数抽奖游戏实例,通过掷色子点数来达到抽奖的效果,为抽奖活动增添一些趣味性. 我们将在html页面中写下如下的html结构代码,.wrap用来放置色子和提示信息,#prize则是用来 ...
- 【重学Git】高级命令篇
1.分离HEAD.HEAD 总是指向当前分支上最近一次提交记录. 所谓分离HEAD,就是让HEAD直接指向某一条具体的提交记录,而不是默认的通过分支名指向当前分支的最近一条提交记录. 2.相对引用^. ...
- axios请求无法携带cookie
背景 最近在用vue重构公司公司AngularJS 1.X项目,老项目身份认证采用的cookie,前端ajax库采用是angularJS的$http/$resource服务,新版采用的是axios,但 ...
- Django后台应用管理名称修改
目标修改位置: 相应需要修改代码位置 然后在APP目录下的这里添加此行 再重启Django 即可得到
- 初识Kotlin之函数
本章通过介绍Kotlin的基本函数,默认参数函数,参数不定长函数,尾递归函数,高阶函数,Lamdba表达式.来对Kotlin函数做进一步了解.将上一篇的Kotlin变量的知识得以运用.Kotlin变量 ...
- JUC-0-JUC简介
Java JUC 简介 在 Java 5.0 提供了 java.util.concurrent (简称 JUC )包,在此包中增加了在并发编程中很常用 的实用工具类,用于定义类似于线程的自定义子 ...
- 【使用篇二】SpringBoot使用JdbcTemplate操作数据库(12)
Spring对数据库的操作在jdbc上面做了深层次的封装,提供了JdbcTemplate模板. 在SpringBoot使用JdbcTemplate很简单: 引入数据库驱动包(mysql或oracle) ...
- 利用Python几行代码批量生成验证码
几行代码批量生成authCode 整体步骤: 1.创建图片 2.创建画笔 3.在图片上生成点 4.在图片上画线 5.在图片在画圆 6.在图片在写文本 7.在图片在生成指定字体的文本 代码奉上 #!/u ...
- [译]发布ABP v0.19包含Angular UI选项
发布ABP v0.19包含Angular UI选项 ABP v0.19已发布,包含解决的~90个问题和600+次提交. 新功能 Angular UI 终于,ABP有了一个SPA UI选项,使用最新的A ...