C语言数码管是共阴共阳程序,C语言实现共阴极数码管操作

共阴极或者共阳极数码管,因为其需要电流大,而一般51输出电流低,需要锁存器。买的开发板使用的共阴极数码管。

至于其构造,找个相关方面的书看看,这里主要是对做好的电路板进行编程。

刚开始的时候,感觉在数码管上显示数字很厉害。但是等到自己写这篇日志的时候,才发现了了。。

在对数码管编程前,需要对锁存器有所了解。买的开发板上用的是74HC573贴片式的。

74HC573真值表

输入 输出

!OE LE D | Q

L H H | H

L H L | L

L L X | Q0

H X X | X

使用的时候74HC573的 !OE 引脚需要接低电平,否则D跟Q都成任意电平了,不听自己使唤了。失去锁存器的作用,因此必须让!OE为低电平。

通过74HC573在LE端为高电平时,把单片机的IO电平信号锁存。然后把LE变为低电平,这样不论单片机的IO电平如何变化,74HC573的输出口电平都保存LE变为低电平之前的数值,从而实现锁存。

由于多位数码管的段都是接在相同的IO口上,因此在买的这块开发板上分别用两个573对多位数码管的段、位进行锁存。

一、静态数码管显示的实现

这个实现比较简单,通过位锁存器数据判断那个数码管点亮,那个不点亮。然后通过段锁存器显示被选中的数码管上的数字或字母。

位:

由于是共阴极数码管,当该位置0时,该位数码管被选中,即通电后点亮。

段:

这个就是显示被选中的数码管显示什么内容了。网上有数码管小助手。或者自己一个个的计算得到。

显示多位数码管中某一个数码管的代码:

显示字母“L”

#include

#include "hj_init.h"

sbit WE = P2^1;

sbit DU = P2^0;

void main()

{

WE = 1;

P0 = 0xfe;

WE = 0;

DU = 1;

P0 = 0x38;

DU = 0;

while(1);

}

效果图:

d24fc7db369853a8c60848c011651043.png

显示多位数码管中两个数码管代码:

这个主要就是更改位的数值。想让那个亮,就置0。因为是共阴极数码管:P

除了这个静态的占IO的缺点外,还有就是不论你选中几个数码管,显示的数字都是一样的,不好玩。至于显示不同的内容,就要靠动态数码管了。

二、动态数码管显示的实现

说是动态,其实还是静态一位一位的显示。但是因为速度快,而人眼有视觉暂留作用,感觉上是动态显示而已。如果想看清到底是如何显示的,可以把延时的时间变长,这样能更好的看清是如何显示的。

动态里面还有个关键的地方就是消影。P0 = 0xff 。

先把段选数据送到锁存器中。再送位选数据。中间如果不加上消影,在显示位选数据前,P0仍保持上次的段选数据,会造成干扰。因此需要添加消影。但后来发现如果先送位选的数据,在打开位对应的锁存器,可以省去P0 = 0xff 这句专用的消影语句。但先送位选数据,再打开相应锁存器,应该也算消影的方式吧。

实现8位共阴数码管动态显示的代码如下:

#include

#include "delay.h"

#define uchar unsigned char

#define uint unsigned int

#define N 1 //方便调整延时时间

sbit DUAN = P2^0; //声明段锁存器的LE(锁存允许端,或锁存控制端)引脚

sbit WE = P2^1; //声明位锁存器的LE(锁存允许端,或锁存控制端)引脚

//数码管码表

uchar code table[]={

0x3f,0x06,0x5b,0x4f, //数字0~3

0x66,0x6d,0x7d,0x07, //数字4~7

0x7f,0x6f,0x77,0x7c, //数字8、9、A、b

0x39,0x5e,0x79,0x71 //C、d、E、F

};

void main()

{

hj_init();

while(1)

{

/*数字0x06 = 1*/

//送入段选数据

DUAN = 1 ;

P0 = table[3];

DUAN = 0 ;

P0 = 0xff; //消影

//送入位选数据

WE = 1;

P0 = 0xfe;

WE = 0;

delayms(N); //延时

/***********************************************************/

/*数字0x5b = 2*/

//送入段选数据

DUAN = 1 ;

P0 = table[3];

DUAN = 0 ;

P0 = 0xff; //消影

//送入位选数据

WE = 1;

P0 = 0xfd;

WE = 0;

delayms(N); //延时

/***********************************************************/

/*数字0x4f = 3*/

//送入段选数据

DUAN = 1 ;

P0 = table[9];

DUAN = 0 ;

P0 = 0xff; //消影

//送入位选数据

WE = 1;

P0 = 0xfb;

WE = 0;

delayms(N); //延时

/***********************************************************/

/*数字0x66 = 4*/

//送入段选数据

DUAN = 1 ;

P0 = table[8];

DUAN = 0 ;

P0 = 0xff; //消影

//送入位选数据

WE = 1;

P0 = 0xf7;

WE = 0;

delayms(N); //延时

/***********************************************************/

/*数字0x6d = 5*/

//送入段选数据

DUAN = 1 ;

P0 = table[4];

DUAN = 0 ;

P0 = 0xff; //消影

//送入位选数据

WE = 1;

P0 = 0xef;

WE = 0;

delayms(N); //延时

/***********************************************************/

/*数字0x7d = 6*/

//送入段选数据

DUAN = 1 ;

P0 = table[8];

DUAN = 0 ;

P0 = 0xff; //消影

//送入位选数据

WE = 1;

P0 = 0xdf;

WE = 0;

delayms(N); //延时

/***********************************************************/

//送入段选数据

DUAN = 1 ;

P0 = table[7];

DUAN = 0 ;

P0 = 0xff; //消影

//送入位选数据

WE = 1;

P0 = 0xbf;

WE = 0;

delayms(N); //延时

/***********************************************************/

//送入段选数据

DUAN = 1 ;

P0 = table[6];

DUAN = 0 ;

P0 = 0xff; //消影

//送入位选数据

WE = 1;

P0 = 0x7f;

WE

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/453298.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

百度与华为全面战略合作 人工智能手机真的要来了

视频加载中...12月21日百度和华为在北京宣布达成全面战略合作。这次合作内容主要包括三点,首先是在语音、语义、视觉和VR上的自然交互,这是百度为华为手机AI赋能的基础层。第二是基于华为HiAI平台和百度PaddlePaddle深度学习框架,共建人工智能…

Android 秒级编译FreeLine

项目地址:FreeLine FreeLine官网: FreeLine 1. 安装FreeLine插件 File->Settings->Plugins, 搜索输入FreeLine Plugin, 查找到后进行安装并重启Android Studio。 图1.png安装好之后,在工具栏就会出一个图标 图2.png2. 配置gradle 根目录build.gr…

C语言中的二级指针(双指针)

二级指针又叫双指针。C语言中不存在引用,所以当你试图改变一个指针的值的时候必须使用二级指针。C中可以使用引用类型来实现。 下面讲解C中的二级指针的使用方法。 例如我们使用指针来交换两个整型变量的值。 错误代码如下: 一级指针 [cpp] view pla…

alpine_glibc 构建sun jdk 8的docker镜像

2019独角兽企业重金招聘Python工程师标准>>> 构建系统基础镜像 alpine glibc 的Dockerfile内容如下&#xff1a; alpine:3.6 MAINTAINER tongqiang<tongqiangyingmail.com># Here we install GNU libc (aka glibc) and set C.UTF-8 locale as default.ENV ALP…

c语言两个循环的ys,c语言编程:从键盘输入两个数,求它们的最小公倍数

满意答案flywisdom2019.06.20采纳率&#xff1a;44% 等级&#xff1a;9已帮助&#xff1a;1064人main(){int p,r,n,m,temp;printf("Please enter 2 numbers n,m:");scanf("%d,%d",&n,&m);//输入两个正整数.if(n{tempn;nm;mtemp;}pn*m;//P是原来…

每日微软面试题

每日微软面试题——day 1 <以下微软面试题全来自网络> <以下答案与分析纯属个人观点&#xff0c;不足之处&#xff0c;还望不吝指出^_^> 题&#xff1a;.编写反转字符串的程序&#xff0c;要求优化速度、优化空间。 分析&#xff1a;构建两个迭代器p 和 q &…

第八章 多态

第八章 多态1. 重写一个类通过继承来产生一个新类&#xff0c;继承了父类的所有变量和方法&#xff0c;在继承这些变量和方法的时候&#xff0c;子类也可以具有自己独特的特征和行为。Public class fruit{Public void print(){System.out.println(“这是超类的方法”);}}Clas…

计划任务 at,cron

示例&#xff1a;每3小时echo和wall命令 转载于:https://www.cnblogs.com/momenglin/p/8551618.html

2017.12.26

转载于:https://www.cnblogs.com/dyh-air/p/8118961.html

MessageBox 弹框

模拟系统的消息提示框而实现的一套模态对话框组件&#xff0c;用于消息提示、确认消息和提交内容。 从场景上说&#xff0c;MessageBox 的作用是美化系统自带的 alert、confirm 和 prompt&#xff0c;因此适合展示较为简单的内容。如果需要弹出较为复杂的内容&#xff0c;请使用…

什么是同轴电缆

同轴电缆从用途上分可分为基带同轴电缆和宽带同轴电缆&#xff08;即网络同轴电缆和视频同轴电缆&#xff09;。同轴电缆分50Ω 基带电缆和75Ω宽带电缆两类。基带电缆又分细同轴电缆和粗同轴电缆。基带电缆仅仅用于数字传输&#xff0c;数据率可达10Mbps。同轴电缆(Coaxial Ca…

android textview表情,Android开发(16)-TextView显示表情图像和文字

从这个案例中我们可以学到当我们美化图片美化界面的时候可以在某一区域输入图片和文字混搭信息,第三张图片按比例缩小&#xff0c;第四张图像有超链接布局文件MainActivity.javapackage com.example.textview3;import java.lang.reflect.Field;import android.os.Bundle;import…

linux的apache2.4限定某个目录禁止解析PHP及user_agent与PHP相关配置

限定某个目录禁止解析PHP 对于使用PHP语言编写的网站&#xff0c;有一些目录是有需求上传文件的&#xff0c;比如服务器可以上传图片&#xff0c;并且没有做防盗链&#xff0c;所以就会被人家当成了一个图片存储服务器&#xff0c;并且盗用带宽流量。如果网站代码有漏洞&#x…

什么是光缆

光缆(optical fiber cable)是为了满足光学、机械或环境的性能规范而制造的&#xff0c;它是利用置于包复护套中的一根或多根光纤作为传输媒质并可以单独或成组使用的通信线缆组件。光缆主要是由光导纤维&#xff08;细如头发的玻璃丝&#xff09;和塑料保护套管及塑料外皮构成&…

js调用android播放器,js调用android本地方法

8种机械键盘轴体对比本人程序员&#xff0c;要买一个写代码的键盘&#xff0c;请问红轴和茶轴怎么选&#xff1f;昨天自己录了一个android本地调用h5中js方法&#xff0c;可能是因为视频比较耗费流量&#xff0c;结果看的人不是很多&#xff0c;所以决定还是先写文章&#xff0…

doxygen相关问题

doxygen相关问题 我主要的设置有 现在 wizard对话框中大体设置下,然后 export设置: project->DOXYFILE_ENCODINGGBK project->OUTPUT_LANGUAGEchinese input->INPUT_ENCODINGGBK Dot->HAVE_DOT Dot-> UML_LOOK Dot->CALL_GRAPH Dot->CALLER_GRAPH http…

前端之JavaScript 02

一、函数 // 最基础的函数定义 function f1() {console.log(hello world!); } f1(); // hello world!// 带参数的函数 function f2(name,age) {console.log("姓名 : " name " 年龄&#xff1a;" age); } f2("jassin",18); // 姓名 : jassi…

什么是双绞线

双绞线&#xff08;twisted pair&#xff0c;TP&#xff09;是一种综合布线工程中最常用的传输介质&#xff0c;是由两根具有绝缘保护层的铜导线组成的。把两根绝缘的铜导线按一定密度互相绞在一起&#xff0c;每一根导线在传输中辐射出来的电波会被另一根线上发出的电波抵消&a…

Android蒙版倒计时,【倒计时海报设计】- 虎课网

我们在大街上经常会看到各种宣传海报&#xff0c;有时商家为了达到促销的目的会在醒目的地方张贴一张倒计时海报&#xff0c;为的就是吸引群众的眼睛&#xff0c;大家了解PS倒计时海报设计的制作过程吗&#xff1f;如果对这方面操作不太了解的话&#xff0c;大家可以关注一下下…

linkit-smart-7688-feed 安装笔录

转载于:https://www.cnblogs.com/orangezs/p/8571791.html