51学习打三天--数码管显示的原理-加入中断系统程序--加入定时器!!!需要回头多看看。

这一节学的还是挺久的,180分的视频!其中的中断,定时需要好好理解,不是很明白。

 

三、数码管显示的原理、数码管的静态显示.... 

1. 引脚第二功能.... 

2.  数码管显示知识.... 

            3.  中断系统   

            4.  定时器.... 

 

 

三、数码管显示的原理、数码管的静态显示

1. 引脚第二功能

1.1TXD 和RXD

TXD 发送数据 Transmit(tx) Data 简写形式 

RXD 接受数据 Receive(rx) Data 简写形式 

TXD 网络定义: Transmit Data: used on RS232 and UART links.   

RXD 网络定义: Receive Data: used on RS232 and UART links.

1.2  中断源

MCS-51系列单片机的中断系统 MCS-51系列单片机中不同型号芯片的中断源数量是不同的,最基本的8051单片机有5个中断源,分别是INTO、INT1、TO、Tl T2。

1.3  WR和RD

WR和RD作为P3的两位具有第二功能的I/O口只有在连接特定器件(例如扩展RAM或ROM等)时才能发挥第二作用(WR为写,RD为读),一般情况下可以直接当做是GPIO(通用I/O)来使用。

2.  数码管显示知识

2.1  单片机中常用的显示器

发光二极管LED(light  emitting  diode)显示器,液晶LCD(liquid  crystal display)显示器,CRT显示器等。

2.2  LED数码显示原理

  1. 为了显示数字或字符,必须对数字或字符编码。
  2. 七段数码管加上一个小数点,共8段。因此LED显示器提供的编码正好是一个字节。
  3. abcdefg。分别对应PO口的八只手指(管脚)!

2.3  位选和段选

  1. 段选用于控制数码管的笔画;就是数码管显示数字内容,有些字母也可以显示。P2.6
  2. 位选用于控制多个数码管中的一个或几个数码管是否显示数字或字符,

位选如果关闭就不会显示任何内容;P2.7

  1. 比如:

你要控制8个数码管,依次是1、2…… 8。你要选择控制哪个数码管(比如第1个),这就是位选,有选择位置的意思。

然后呢,你要让第1个数码管显示“1”。你就要控制第一个数码管的“a、b……g”也就是让b、c=0,a、d、e、f、g=1(或者b、c=1,a、d、e、f、g=0),这就是段选,即选择数码管的哪一笔段。

2.4  锁存器

  1. 锁存,顾名思义,存数据进来,锁住,输出端口保持锁住的值。只要锁存端口不使能,输入端口是什么数据都不影响输出。锁存端口使能后,赋新的值到输入端口,再关闭使能,又锁存了新的值。
  2. 所谓锁存器,就是输出端的状态不会随输入端的状态变化而变化,仅在有锁存信号时输入的状态被保存到输出,直到下一个锁存信号到来时才改变。

数据锁存表:

 

  1. 锁存器的电路连接及使用详解:(结合上面的锁存器引脚说明)0:

1:OE接地

2:D0-D7接我们的信号发射端 (一般为单片机用来传输数据的I/O口)3:Q0-Q7接我们要接受信息的终端(数码管,液晶,or anyother device)4:LE接一个I/O口(此I/O脚可视为锁存器 锁存功能 的开关,高电平为更新Q端信号(要更新的信号从D输入)低电平则不更新)

5.vcc  gnd 供电

    1.  数码管静态显示程序

2.5.1控制数码管第几个显示什么数字

#include<reg52.h>

sbit dula=P2^6;

sbit wela=P2^7;

void main()

{ //首先设置第几个数码管亮

wela=1;//打开位

P0=0XFC;//0011 1111     这个PO 表示数码管位置

wela=0;

//再设置这个数码管显示什么数字

dula=1;//打开段

P0=0X3F;//显示数字0    这个P0表示单个数码管数字

dula=0;

while(1);//表示一直亮

}

2.5.2控制数码管自动变化0~16:

#include<reg52.h>

#define uchar  unsigned char

#defne uint unsigned int

sbit dula=P2^6;

sbit wela=P2^7;

uchar core table []={

};

     uchar num;

void delay(uint z);

void main()

{

 wela=1;

P0=0Xea;

wela=0;

=0;

while(1)

{

for(num=0;num<16;num++)

{

dula=1;

P0=table[num];

dula=0;

delay(1000)

}

}

}

void delay(z)//这是一个延时函数控制x,y可以控制延时时间!带参数!

{

uint x,y;

for(x=z;x>0;x--)

           for(y=200;y>0;y--)

}

3.  中断系统

3.1中断响应的条件

  1. 中断源发出中断请求
  2. CPU开中断,即中断总允许EA=1
  3. 申请中断的中断源的中断允许位打开=1,即中断允许没有屏蔽!

 

 

3.2  中断系统结构图

  1. 5个中断源:2个优先级,可实现二级中断嵌套。
  2. 单片机中TCON和SCON以及IE、IP都是特殊功能寄存器,分别用来控制定时器、串口、中断开关、中断优先级。

3.3中断系统的寄存器构成

3.3.1  IE寄存器

  1. IE是中断允许寄存器:
  2. IE控制中断的,

IE的格式为第八为总中开关(EA) 第七 第六位空白,第五为为串行口中断允许位(ES),第四位为定时计数中断允许位1(ET1),第三位为外部中断1(EX1)第二位为外部中断0(ET0) 第一位为定时计数0(EX0),你用那个只要写那个中断为1就开启中断了。

sbit EA=IE^7

sbit ES=IE^4

sbit ET1=IE^3

sbit EX1=IE^2

sbit ET0=IE^1

sbit EX0=IE^0

先定义IE位控制位,在进行控制寄存器!

 

  1. IE0对应于外部中断0,既引脚INT0是否允许中断通过这个位来控制;

 IE1对应于外部中断1,既引脚INT1是否允许中断通过这个位来控制;

 IE0/IE1 = 0时禁止外部中断,IE0/IE1 = 1时使能外部中断。

3.3.2  中断请求标志

sbit IT0=TCON^0;

sbit IE0=TCON^1;

sbit IE1=TCON^2;

sbit IT1=TCON^3;

sbit IR0=TCON^4;

sbit IF0=TCON^5;

sbit IR1=TCON^6;

sbit TF1=TCON^7;

 

 

控制方式有两种:

1.一种直接控制寄存器(字节地址)如:TCON=0X01(0000 0001)控制八位!表示跳沿方式触发,对应P3.2口

2.一种是控制寄存器中的某一位(IT0=1;)(不过先定义变量,其实不用,因为系统已经默认定义过了)

(单片机默认IT0=0也即是:电平触发方式)

3.3.3  i p优先级控制

  1. IP是指interrupt priority,是中断优先级控制寄存器。

对于每一个中断请求源都可以编程为高优先级中断源或低优先级中断源,以便实现两级中断嵌套。中断优先级是由片内的中断优先级寄存器IP(特殊功能寄存器)控制的。IP寄存器字节地址位B8H,可以位寻址。

 

3.3.4  优先等级

中断服务程序入口:汇编语言用

C语言记住:01234

3.4  中断程序

加入中断,P3.2(对应外部中断0)口低电平时,才会进入中断程序

#include<reg52.h>

#define uchar  unsigned char

#defne uint unsigned int

sbit dula=P2^6;

sbit wela=P2^7;

sbit D1=P^0;//第一个发光二极管

uchar core table []={

};

     uchar num;

void delay(uint z);

 

 

void main()

{

EA=1;//开总中断

EX0=1;//开启外部中断0

//IT0=0;也即是:电平触发方式不过单片机默认是0

 wela=1;

P0=0Xea;

wela=0;

while(1)

{

for(num=0;num<16;num++)

{

dula=1;

P0=table[num];

dula=0;

delay(1000)

}

}

}

void delay(z)//这是一个延时函数控制x,y可以控制延时时间!带参数!

{

uint x,y;

for(x=z;x>0;x--)

           for(y=200;y>0;y--)

}

//中断服务程序函数,无返回值,不需要声明

void exter0()interrupt  0//0表示五个中断源01234是哪一个,不需要声明!

{

D1=0;//发光二极管亮

}  

  1. 触发中断1:找个铁丝(为什么?因为使用的IT0=O; 电平触发方式),接触P3.2口,使其接入低电平!

效果;数码管动态变化,接入P3.2接入低电平,数码管停止,发光管亮,P3.2变成高电平时,数码管变化,发光二极管亮着,因为在回到主函数中没有控制D1灭。

while(1)

{

for(num=0;num<16;num++)

{

D1=1;//发光二极管灭

dula=1;

P0=table[num];

dula=0;

delay(1000)

}

}

  1. 触发中断2:跳边沿触发

4.  定时器

4.1  定时器

主要在这篇文章https://blog.csdn.net/howardhaowang/article/details/105255262

4.1.1  定时分类

  1. 软件定时:

软件定时不占用硬件资源,但是占用了CPU时间,降低了CPU 的利用率。(如:delay()函数计时)

  1. 单片机定时:

不占用CPU

4.1.2  定时结构

定时/计数的实质时加1计数器(16位),由高8位和低8位两个寄存器组成(也就是P3.2P3.3两个口)

4.1.2.1 TMOD工作方式寄存器

 

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值