51单片机数码管显示
一、数码管静态显示
1.原理:数码管无非就是八块发光二极管集成在
了一起,如右图所示,数码管有共阴极
和共阳极数码管之分。
共阴极数码管:将八只发光二极管的负极通过一
根总线连接在了一起 , 然后每只二极管
的正极被引了出来,通过二极管的单向导
通性可知,当对应数码管的二极管段接入
高电平时,二极管点亮。
共阳极数码管:八只发光二极管的正极通过一根总线连接在了一起 , 然后每只二极管的负极被引了出来,通过二极管的单向导通性可知,当对应数码管的二极管段接入低电平时,二极管点亮。
(以共阴极数码管为例)显示数字 “1 ” ,那也就是让 b 和 c 亮,编程的话,即是0x06,这样一来给了 b和 c 段高电平,实现了点亮数字 “1”;则对应表格
2.锁存器74HC573:11引脚(LE)控制着开、关状态,D0-D7为输入,Q0-Q7为输出,在LE = 1,即输入高电平时,输入端=输出端,输入是什么,输出也就原封不动的输出;在LE = 0 ,即输入高电平时,大门关闭,实现锁存,不再输出。
在实现数码管的静态显示中,我们用到了两个锁存器,两个I/O口,P2.6和P2.7,分别是位选和段选。位选,也就是位置的选择,选择控制的数码管;段选,就是我们常说的控制一个数码管中的a,b,c…g 段,使其显示数字。
3.编程
二、80C51的中断系统
1、80C51的中断系统有5个中断源(8052有6个),2个中断优先级,可实现二级中断嵌套。
⑴ (P3.2)可由IT0(TCON.0)选择其为低电平有效还是下降沿有效。当CPU检测到P3.2引脚上有有效的中断信号时,中断标志IE0(TCON.1)置1,向CPU申请中断。
⑵ (P3.3)可由IT1(TCON.2)选择其为低电平有效还是下降沿有效。当CPU检测到P3.3引脚上有有效的中断信号时,中断标志IE1(TCON.3)置1,向CPU申请中断。
⑶ TF0(TCON.5),片内定时/计数器T0溢出中断请求标志。当定时/计数器T0发生溢出时,置位TF0,并向CPU申请中断。
⑷ TF1(TCON.7),片内定时/计数器T1溢出中断请求标志。当定时/计数器T1发生溢出时,置位TF1,并向CPU申请中断。
⑸ RI(SCON.0)或TI(SCON.1)串行口中断请求标志。当串行口接受完一帧串行数据时置位RI,或者当串行口发送完一帧串行数据时置位TI,向CPU申请中断。
2、中断请求标志
⑴TCON的中断标志
IT0(TCON.0),外部中断0触发方式控制位。
当IT0=0时,为电平触发方式。
当IT0=1时,为边沿触发方式。(下降沿有效)
IE0(TCON.1),外部中断0中断请求标志位。
IT1(TCON.2),外部中断1触发方式控制位。
IE1(TCON.3),外部中断1中断请求标志位。
TF0(TCON.5),定时/计数器T0溢出中断请求标志位。
TF1(TCON.7),定时/计数器T1溢出中断请求标志位。
⑵SCON的中断标志
RI (SCON.0),串行口接收中断标志位。当串行口接收数据时,每接收完一帧串行数据,由硬件置位RI,向CPU申请中断,CPU响应中断时,不能自动清除RI,RI必须由软件清除。
TI (SCON.1),串行口发送中断标志位。当串行口发送数据时,每发送完一帧串行数据,由硬件置位TI,向CPU申请中断,CPU响应中断时,不能自动清除TI,TI必须由软件清除。
3、80C51中断的控制
⑴中断允许控制
CPU对中断系统所有中断以及某个中断源的开放和屏蔽,是由中断允许寄存器IE控制的。
EX0(IE.0),外部中断0允许位。
ET0(IE.1),定时/计数器T0中断允许位。
EX1(IE.2),外部中断1允许位。
ET1(IE.3),定时/计数器T1中断允许位。
ES(IE.4),串行口中断允许位。
EA(IE.7),CPU中断允许(总允许)位。
⑵中断优先级控制
80C51单片机有两个中断优先级,可以实现二级中断服务嵌套。每个中断源的中断优先级,都是由中断优先级寄存器IP中的,相应位的状态来规定的。
三条原则:
CPU同时接收到几个中断时,首先响应优先级别最高的中断请求
正在进行的中断过程,不能被新的同级或低优先级的中断请求所中断
正在进行的低优先级中断服务,能被高优先级中断请求所中断
为了实现上述后两条原则中断,系统内部设有两个用户不能寻址的优先级状态触发器,其中一个置1,表示正在响应高优先级的中断,他将阻断后来所有有的中断请求,另一个置1,表示正在响应低优先级中断,他将阻断后来所有的低优先级中断请求。
PX0(IP.0),外部中断0优先级设定位。
PT0(IP.1),定时/计数器T0优先级设定位。
PX1(IP.2),外部中断1优先级设定位。
PT1(IP.3),定时/计数器T1优先级设定位。
PS(IP.4),串行口优先级设定位。
PT2(IP.5),定时/计数器T2优先级设定位。
三、数码管动态显示
动态数码管就是让人感觉多个数码管一起亮
动态数码管显示和静态基本类似
就是多个数码管切换的过程,利用人的视觉效果差,来感觉数码管是一起亮的
#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit we = P2^7;
sbit du = P2^6;
void delay(uint x)
{ uchar y;for(x;x>0;x--)for(y=110;y>0;y--);
}uchar code table[]=
{0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};void main()
{ while(1){//第一位数码管显示1P0 = 0xfe;//1111 1110 第一位数码管显示,注意数码管的排序,P0.0对应连接的是左边第一位数码管we = 1;//打开位选we = 0; //关闭位选P0 = table[1];du = 1; //打开段选du = 0; //关闭段选delay(2);//延时//第二位数码管显示2P0 = 0xfd;//1111 1101 只选通第二位数码管we = 1; //打开位选we = 0; //关闭位选P0 =table[2]; //显示2du = 1;//打开段选du = 0; //关闭段选delay(2);//延时 //第三位数码管显示3P0 = 0xfb;// 1111 1011只选通第三位数码管we = 1; //打开位选we = 0; //关闭位选 P0 =table[3]; //显示3du = 1;//打开段选du = 0; //关闭段选delay(2);//延时P0 = 0xf7;//1111 0111 只选通第四位数码管we = 1; //打开位选we = 0; //关闭位选P0 =table[4]; //显示4du = 1;//打开段选du = 0; //关闭段选delay(2);//延时P0 = 0xef;//1110 1111 只选通第五位数码管we = 1; //打开位选we = 0; //关闭位选P0 = table[5]; //显示5du = 1;//打开段选du = 0; //关闭段选delay(2);//延时P0 = 0xdf;//1101 1111 只选通第六位数码管we = 1; //打开位选we = 0; //关闭位选P0 =table[6]; //显示6du = 1;//打开段选du = 0; //关闭段选delay(2);//延时}
}
51单片机数码管显示相关推荐
- 基于51单片机数码管显示
基于51单片机数码管显示 ## 数码管显示原理 数码管(LED Segment Displays)由多个发光二极管封装在一起组成"8"字型的器件,引线已在内部连接完成,只需引出它们 ...
- 51单片机数码管显示60秒倒计时(C语言)
51单片机数码管显示60秒倒计时(C语言) 基于普中51单片机开发板,运用定时器/计数器0和1,实现60秒的倒计时和LED灯0.5s间隔闪烁 文章目录 51单片机数码管显示60秒倒计时(C语言) 前言 ...
- 单片机c语言数码管显示5,51单片机数码管显示实验报告(5页)-原创力文档
51单片机数码管显示实验 实验内容: 编写程序让8只数码管初始显示0,每隔大约1s加1显示(可以用延时函数实现),到数码管显示9后,再从0开始显示,如此循环反复. C语言程序 #include #de ...
- 基于51单片机1602温度显示时钟
基于51单片机LCD1602温度显示时钟 要在1602上显示时间和温度先要了解1602是如何显示的.详情可以参考我之前的文章基于51单片机1602显示 :时间显示可以用时钟芯片DS1302,但是此次我 ...
- 8脚51单片机DIY时间显示+闹钟技术分享(一)
@[8脚51单片机DIY时间显示+闹钟技术分享(一) 最近因为家里闹钟被小朋友摔坏了,所以想着买来买去还是没什么新意,不如自己做一个,这样不是更有意义吗? 那就开始吧,想着自己做就可以用最小资源来实现 ...
- 51单片机数码管交通灯倒计时c语言,51单片机数码管倒计时模拟交通灯汇编程序...
/********************************************************************** 51单片机数码管倒计时模拟交通灯汇编程序 LED数码管为 ...
- 51单片机 外部时钟_基于51单片机的LCD12864显示模拟时钟
今天要分享的仿真和程序是基于51单片机的LCD12864显示模拟时钟.公众号之前也分享过数字时钟,但是那些时钟都是采用数字显示的形式来显示时间,而今天分享一个采用LCD12864显示的模拟指针式时钟. ...
- 基于51单片机的LCD1602显示温湿度
51单片机基础难点知识理解后,直接通过下面3个小项目可以更好理解51单片机.中断 定时器 串口甚至是基础的IO输入输出都有结合,再加上一些外设模块的学习(如1602显示屏,L298N电机驱动等) 项目 ...
- 【嵌入式】51单片机+1602+dht11显示温湿度
51单片机+1602+dht11显示温湿度例程代码如下: /*****************************************************************联系:请勿 ...
最新文章
- 专注年轻人的AI学习平台
- anasys hpc集群_这可能是最简单的并行方案,如何基于 AWS ParallelCluster 运行 ANSYS Fluent...
- core和node开发小程序_成都小程序开发:微信小程序开发要多少钱?
- 将 app 打包成 deb 发布安装
- WCF 之 消息契约(MessageContract)
- mysql查询没有权限试图_MySQL迁移后提示查询view权限不足的处理
- mac下载百度网盘文件限速_百度网盘限速怎么办 (20200412 )
- 使用Python中的mock模块进行单元测试
- 如何使用CineMatch的伪色指南功能来帮助评估图像
- Pascal 转 C++ 教程1
- 发动机冒黑烟_汽车发动机冒黑烟的原因与处理方法
- 大数据的价值,主要体现在哪几方面?
- 子域名收集 -- 提莫(teemo)
- linux搭建摄像头,Linux环境下配置虚拟摄像头akvcam
- FL Studio21水果软件最新中文版安装教程
- mysql查询每行重复_MySQL查询返回重复的行
- 你不知道的margin:auto居中原理
- matlab生成空图像,figure,imshow之后图像为空白图像
- mysql 常用函数
- ios添加邮件收件服务器,全球邮企业邮箱在iPhone上使用的设置说明