8051/2 单片机基础 LED闪烁,蜂鸣器,数码管驱动,独立按键,中断,定时中断,串口通信

发布者:糖三角最新更新时间:2022-05-20 来源: eefocus关键字:单片机基础  LED  定时中断  串口通信 手机看文章 扫描二维码
随时随地手机看文章

从软件转硬件路总是很艰难,各种电路知识,3个多月了,现在总算是入门了。


AT 8051/2

1.驱动LED闪烁

2.驱动蜂鸣器进行响动

3.驱动共阳级,单数码管,0—9 变化(MPX1-CA) - 使用8排阻 + NPN三极管 

4.驱动共阴级,但数码管,0-9 变化(MPX1-CC) - 使用芯片74HC245  + PNP三极管

5.独立按键,控制单片机,并点亮/熄灭LED

6.中断,控制点亮/熄灭LED - INT0 , INT1

7.定时中断,控制点亮/熄灭LED - T0 , T1

8.串口通信


电路图


C代码:


/**

* 8051 DEMO 1

* 1.驱动LED闪烁

* 2.驱动蜂鸣器进行响动

* 3.驱动共阳级,单数码管,0—9 变化(MPX1-CA) - 使用8排阻 + NPN三极管 

* 4.驱动共阴级,但数码管,0-9 变化(MPX1-CC) - 使用芯片74HC245  + PNP三极管

* 5.独立按键,控制单片机,并点亮/熄灭LED

*

* 8051 规定中断号如下

* INT0  中断号  0

* INT1  中断号  2

* T0    中断号  1

* T1    中断号  3

* 串口  中断号   4

*

* 6.中断,控制点亮/熄灭LED - INT0 , INT1

* 7.定时中断,控制点亮/熄灭LED - T0 , T1

* 8.串口通信

*/

 

#include "REG52.H"

#include "intrins.h"

 

//数据类型定义

typedef unsigned char U8;

 

//段选,显示0~9的值,共阳极

U8 code yang[10] = {0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};

//段选,显示0~9的值,共阴极

U8 code yin[10] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};

 

//使用P2^0 进行LED闪烁

sbit led = P2^0;

//使用P2^1 进行蜂鸣器报警

sbit buz = P2^1;

//使用P2^2 控制,P0共阳极数码管进行片选

sbit ls1 = P2^2;

//使用P2^3 控制,P1 共阴级数码管进行片选

sbit ls2 = P2^3;

//使用P2^4 捕获按键状态,控制 P2^5 的LED

sbit btn = P2^4;

sbit btn_led = P2^5;

//使用P2^6 捕获按键状态,进行中断控制 P2^5 的LED

sbit btn2 = P2^6;

//使用P2^7 接入LED实现,定时器1秒控制LED闪烁

sbit timer_led = P2^7;

 

//延迟1秒

void delay1s()   //误差 -0.000000000227us

{

    U8 a,b,c;

    for(c=13;c>0;c--)

        for(b=247;b>0;b--)

            for(a=142;a>0;a--);

    _nop_();  //if Keil,require use intrins.h

}

//延迟 10ms

void delay10ms()   //误差 -0.000000000002us

{

    U8 a,b;

    for(b=249;b>0;b--)

        for(a=17;a>0;a--);

}

 

//按键按下,点亮或者熄灭LED

void btn_click()

{

    if(btn==0){ //检查按键是否按下

        delay10ms();

        if(btn==0){ //再次检查是否按下

            btn_led = !btn_led;

        }

        while (!btn);

    }

}

 

/**

* INT0,INT1

* 中断方式,按键按下,点亮或者熄灭LED 

*/

 

//初始化按钮2的中断,使用P3^2 INT0 中断实现

void btn2_init()

{

    IT0 = 1; //下降沿 触发

    EX0 = 1; //打开INT0的中断允许

    EA = 1; //打开总中断

}

 

void btn2_start() interrupt 0

{

    delay10ms();

    if(btn2==0){

        btn_led = !btn_led;

    }

}

 

/**

* T0,T1

* 定时器中断,实现定时点亮或者熄灭LED

* 这里使用T0

*/

void timer_init()

{

    TMOD = 0X01;

    TH0 = (65536 - 10*1000) / 256;//(65536-X)为定时器初值,如定时10ms

    TL0 = (65536 - 10*1000) % 256;

    ET0 = 1; //打开定时器0 的中断

    EA = 1; //打开总中断

    TR0 = 1; //打开定时器0

}

 

void timer_start() interrupt 1

{

    TH0 = (65536 - 100*1000) / 256;//(65536-X)为定时器初值,如定时100ms

    TL0 = (65536 - 100*1000) % 256;

    timer_led = !timer_led;

}

/**

* 串口通信 

* RXD 和 TXD  

* 接线方法为,RXD - TXD , TXD - RXD

* IO口:P3^0 和 P3^1

*/

void uart_init()

   SCON = 0x50;

   TMOD = 0x20;

   //装在波特率 高8位和低8位,9600

   TH1 = 0xFD;

   TL1 = 0xFD;

   ES = 1; //打开接收中断

   TR1 = 1; //打开总中断

   EA = 1; //打开总中断

}

 

//收串口数据

U8 uart_get()

{

   U8 rx_data = 0;

   while(0==RI); //0 串口没有数据

   //如果是1

   rx_data = SBUF;

   RI=0;

   return rx_data;

}

 

//发送一个字符

void uart_char(char data1)

{

   SBUF = data1; //将待发送的字符串放入缓冲器

   while(TI==0); //等待完发送

   TI=0;       // 发送中断标志 清0

}

 

//发送字符串

void uart_string(U8 *buffer)

{

   U8 *plter = buffer;

   while((*plter)!=0x00){

      uart_char(*plter);

      plter++;

   }

}

 

void uart_start() interrupt 4

{

      U8 rx_data = 0;

      rx_data = uart_get();

      uart_string("recv data : ");

      uart_char(rx_data);

      uart_string("rn");

}

 

//主函数执行

void main()

{

    U8 i;

 

    i = 0;

    led = 0;

    buz = 0;

    ls1 = 1; //选用NPN型3级管,单片机给高电平导通

    ls2 = 0; //选用PNP型3级管,单片机给低电平导通

 

    btn_led = 1;//默认是关的

    timer_led  = 1; //默认不点亮

   

    //开启中断监听

    btn2_init();

    //开启定时器监听

    timer_init();

 

    //初始化串口

    uart_init();

    

    while (1)

    {

        buz=!buz;

        led=!led;

        

        //独立按键检查

        btn_click();

 

        //> 9 重置为0

        if(i>9){

           i=0; 

        }

        //进行片选

        P0 = yang[i];

        P1 = yin[i];

 

        //延迟1秒

        delay1s();

        i = i+1;

 

        //消隐 共阳数码管

        P0 = 0xFF;

        //消隐 共阴数码管

        P1 = 0x00;

    }

 

}

关键字:单片机基础  LED  定时中断  串口通信 引用地址:8051/2 单片机基础 LED闪烁,蜂鸣器,数码管驱动,独立按键,中断,定时中断,串口通信

上一篇:8051/2单片机基础 实现开关,驱动2位的共阳极数码管显示小数,驱动喇叭播放音乐
下一篇:8051单片机串口波特率计算方式

推荐阅读最新更新时间:2024-11-11 10:22

传苹果WWDC将6月4日开:iPhone SE 2亮相
据MacRumors报道,苹果WWDC2018大会依然选择在加州San Jose的McEnery演艺中心举行。援引自消息人士说法,此次大会上除了会发布iOS12,还将会发售iPhone SE2手机。 报道称,当查询了McEnery中心的场馆预定情况后得知,该场馆在今年6月的后三周已经被其它活动预订,所以只留下首周这一个窗口给苹果。即6月4日到8日将是WWDC18的跨度时间。届时预计会有5000名开发者和1000名工程师出席,门票价格1599美元,而且是靠运气才能获得资格。 媒体援引消息人士说法。苹果在WWDC2018上将首次公开iOS 12、macOS 10.14以及tvOS、watchOS的新版。同时结合目前的消息,iP
[手机便携]
【JZ2440笔记】串口通信
一、前言 串口通信是嵌入式开发中非常常见的调试工具接口,我们大都通过串口的打印输出来确定程序的运行状况,无论是在单片机还是在各种ARM处理器上,基本上都会有串口这个外设,以下是S3C2440的串口调试过程。 二、实验目标 通过JZ2440上的串口0实验与PC机的串口通信,波特率为115200、无奇偶校验位,8个数据位,1个停止位,并且开发板将串口助手发送的数据原样返回给串口助手。 三、串口资源介绍 1、开发板连线 S3C2440有三个串口模块,分别为UART0、UART1和UART2,JZ2440开发板将这三个串口全部引出到排针,其中UART0还通过PL2303芯片转出了一个micro USB接口,原理图如下: 2
[单片机]
【JZ2440笔记】<font color='red'>串口通信</font>
基于pic单片机的模拟I2C通信
;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ; File Name: i2c_low.asm ; Author: Alan G. Smith ; Purpose: This code is borrowed from M IC ro Chip with all of the fancy ; stuff taken out. ;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ InitI2CBusMaster
[单片机]
51单片机入门——UART串口通信
前言 通信,按照传统的理解就是信息的传输与交换。对于单片机来说通信则与传感器、存储芯片、外围控制芯片等技术紧密结合,成为整个单片机系统的“神经中枢”。没有通信,单片机所实现的功能仅仅局限于单片机本身,就无法通过其它设备获得有用信息,也无法将自己产生的信息告诉其它设备。如果单片机通信没处理好的话,它和外围器件的合作程度就受到限制,最终整个系统也无法完成强大的功能,由此可见单片机通信技术的重要性。UART(Universal Asynchronous Receiver/Transmitter,即通用异步收发器)串行通信是单片机最常用的一种通信技术,通常用于单片机和电脑之间以及单片机和单片机之间的通信。 1.什么是串行通信 通信按照
[单片机]
51<font color='red'>单片机</font>入门——UART<font color='red'>串口通信</font>
LED的焊接与清洗
   1. LED 焊接条件   图 两种LED焊接时温度一时间关系图   (a)直插式LED;(b)贴片式LED   (1)烙铁焊接。烙铁(最高30W)尖端温度不超过300℃;焊接时间不超过3S;焊接位置至少离胶体2mm。   (2)波峰焊。浸焊最高温度260℃;浸焊时间不超过5s;浸焊位置至少离胶体2mm。    2.引脚成形方法   (1)必需离胶体2mm才能折弯支架。   (2)支架成形必须用夹具或由专业人员来完成。   (3)支架成形必须在焊接前完成。   (4)支架成形需保证引脚和间距与线路板上一致。    3.LED的清洗   当用化学品清洗胶体时必须特别小心,因为有些化学品对胶体表面有损伤并引起褪色如三氯乙
[电源管理]
<font color='red'>LED</font>的焊接与清洗
苹果新款Mac加入T2芯片 第三方不能维修
        一直以来,苹果公司都不希望用户自行拆解和维修它的产品,随着T2芯片的引入,苹果将彻底阻止除授权服务提供商以外的任何人去维修产品。   T2是一款64位的ARMv8芯片,运行名为BridgeOS的操作系统。苹果最初于2017年12月在iMac Pro中加入了这种芯片,用于多种安全目的,包括保护启动进程,保护加密密钥,以及处理系统级功能,例如对摄像头的访问等。T2芯片近期也被加入至7月份推出的2018款MacBook Pro中。   如果要对安装了T2芯片的iMac Pro和MacBook Pro的某些维修,需要使用专有的诊断软件。如果不使用该软件,那么系统将无法运行。对于MacBook Pro,这项要
[手机便携]
对I2C总线协议的一些理解
1、无论读与写,都是在时钟线为低时把数据送到数据总线上,在高时采样数据,把数据锁存到内部,所以读之前先把时钟线拉低,做好准备(数据线为高表示释放数据线),为接下来读数据做好准备。也就是时钟信号为低时,数据线上的高低电平才允许变化,时钟信号为高时,数据总线上的数据必须保持稳定。 2、起始信号产生后,总线为被占用状态(SDA拉低);终止信号产生后,总线为空闲状态(SCL被释放了)。 3、接收器件收到一个完整的数据字节后有可能需要完成一些其它工作,如处理中断,可能无法立刻接收下一字节,这时从机将SCL拉成低电平,从而使主机处于等待状态。直到从机准备好接收下一字节,再释放SCL线使之为高,从而数据传送可继续进行。数据线上的数据是在
[单片机]
搭载LIS2DW12TR实现无线耳机中的关于加速度功能的方案应用
LIS2DW12是ST第二代MEMS家族中一款超低功耗 3D accelerate传感器,常用于小型化穿戴类产品,如戒指、耳机等,其中耳塞中植入3D sensor是近些年来蓝牙耳机的功能趋势。 3D sensor在耳机主要作用是: 1. 使用者姿态检测(在睡眠耳机中还辅助检测使用者的翻身情况,评估睡眠状况,配合杜比环绕) 2. 耳机单双击功能(切歌、播放/暂停) 3. 进入/退出低功耗模式(检测耳机是否静止) ST有一套完善的DEMO板和UNICO工具来辅助开发者完成对3D sensor的开发: STEVAL-MKI109V3——ST MEMS适配器主板,采用 STM32F401VE MCU,内置完整的软件程序,对MEMS配置
[嵌入式]
搭载LIS<font color='red'>2</font>DW12TR实现无线耳机中的关于加速度功能的方案应用
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved