此片文章用于记录蓝桥杯单片机的学习。

LED 蜂鸣器 继电器 数码管 这些都是比赛时常用的外设,如下原理图:

 LED部分:

 蜂鸣器和继电器部分(图中还有步进电机部分):

 数码管部分:

可见,上述外设都是通过P0口控制74HC573锁存器控制,而锁存器信号Y4C,Y5C,Y6C,Y7C,来源与74LS138译码器和或非门控制,如下所示:

则针对以上外设的使用,只需先控制P25,P26,P27三个口输出地址信号来选中外设:

(在实际选外设地址过程中,由于只改变P2口的高三位,即P25,P26,P27,不改变低五位,采取先与在或的写法控制改变P2口的高三位)

LED 蜂鸣器和继电器 四位数码管的位选 四位数码管的段选
相关地址 0x80 0xa0 0xc0 0xe0

现在我们把这些整个外设封装成一个.C和.H文件:

(我使用的是STC15的头文件,也可使用52的头文件,略微改动即可)

74LS138.h:

#ifndef _74LS138_H_
#define _74LS138_H_#define  NONE_ADDRESS      0x00      //不选中任何地址   000 00000
#define  LED_ADDRESS       0x80      //选中LED的地址    100 00000
#define  BUZZER_ADDRESS    0xa0      //选择蜂鸣器 继电器 电机的地址   101 00000
#define  TUBE1_ADDRESS     0xc0      //选中数码管位选地址  110 00000
#define  TUBE2_ADDRESS     0xe0      //选中数码管段选地址  111 00000         void Select_ls138(unsigned char address);       //选相关外设地址
void Control_buzzer(unsigned char signal);      //控制蜂鸣器开关
void Control_relay(unsigned char signal);       //控制继电器开关
void init_ls138();                              //关闭所有外设
void Show_tube(unsigned char site,unsigned char number);  //控制数码管显示数字
#endif

74LS138.C:

#include <STC15F2K60S2.H>
#include "74LS138.h"
code unsigned char tab[] = { 0xc0, 0xf9, 0xa4, 0xb0, 0x99, 0x92, 0x82, 0xf8, 0x80, 0x90 };
//数码管显示0-9
void Select_ls138(unsigned char address) {P2 &= 0x1f;P2 |= address;
}
void Control_buzzer(unsigned char signal)  // 1打开 0关闭
{P2 &= 0x1f;P2 |= BUZZER_ADDRESS;if (signal == 1) {P06 = 1;} else {P06 = 0;}P2 &= 0x1f;
}
void Control_relay(unsigned char signal)  // 1打开 0关闭
{P2 &= 0x1f;P2 |= BUZZER_ADDRESS;if (signal == 1) {P05 = 1;} else {P05 = 0;}P2 &= 0x1f;
}
void init_ls138()  // 关闭所有外设 上电先运行一次
{Select_ls138(LED_ADDRESS);P0 = 0xff;//关闭LED外设Select_ls138(BUZZER_ADDRESS);P0 = 0x00;//关闭蜂鸣器 继电器 电机等外设Select_ls138(TUBE1_ADDRESS);P0 = 0xff;Select_ls138(TUBE2_ADDRESS);P0 = 0xff;//关闭数码管外设Select_ls138(NONE_ADDRESS);
}
void Show_tube(unsigned char site, unsigned char number)  //控制数码管显示 site:控制第几个数码管亮(0-7) number:控制显示几(0-9)
{Select_ls138(TUBE1_ADDRESS);P0 = 0x01 << site;Select_ls138(TUBE2_ADDRESS);P0 = tab[number];Select_ls138(NONE_ADDRESS);
}

在以后的外设调用中,直接使用封装好函数的即可。

简单的试一下:

#include <STC15F2K60S2.H>
#include "intrins.h"
#include "74LS138.h"
void Delay500ms()  //@11.0592MHz
{unsigned char i, j, k;_nop_();_nop_();i = 22;j = 3;k = 227;do {do {while (--k);} while (--j);} while (--i);
}
void main() {init_ls138();// 上电关闭所有外设Select_ls138(LED_ADDRESS);//选中LED的地址P0 = 0x00;//全亮Delay500ms();Select_ls138(LED_ADDRESS);P0 = 0xff;// 全灭Delay500ms();Control_buzzer(1);//蜂鸣器响Delay500ms();Delay500ms();Control_buzzer(0);//蜂鸣器灭Show_tube(0, 6);// 第一个数码管显示6while (1) {}
}

现象就是灯先全亮然后灭,然后蜂鸣器先响和不响,最后数码管第一个显示6。

蓝桥杯单片机学习日记1-LED 蜂鸣器 继电器 数码管的简单驱动相关推荐

  1. 蓝桥杯单片机学习日记3-矩阵键盘的使用,线反转法,三步消抖,按键长按与短按

    此片文章用于记录蓝桥杯单片机的学习 篮球杯单片机上的矩阵按键原理图如下: 使用矩阵键盘时,要将跳线帽J5跳至KBD模式. 值得注意的是,若开发板上的单片机使用的为STC15,那么以上原理图适用.如果单 ...

  2. 【蓝桥杯—单片机学习笔记(四)】共阳数码管的动态显示

    一.要求 在CT107D单片机训练综合平台上,实现数码管的动态显示,在8位数码管中,前面4位显示年份"2022",接着是2个分隔符"--",最后两位是月份,从1 ...

  3. 蓝桥杯单片机学习13——NE555方波发生器频率测量

    NE555 简介 引脚图 原理图 真值表 工作原理 频率测量原理 定时器测量频率方法 代码实现 总结(一堆废话) 简介 NE555是一种高度稳定的控制器,内部用三个阻值为5KΩ的电阻分压,因此叫做55 ...

  4. 蓝桥杯单片机学习11——PCF8591A/DD/A转换芯片

    上期我们学习了DS1302实时时钟的基本使用,现在我们来学习PCF8591A/D&D/A转换芯片的相关内容 蓝桥杯单片机学习11--PCF8591A/D&D/A转换芯片 PCF8591 ...

  5. 蓝桥杯单片机学习12——AT24C02EEPROM存储芯片

    上期我们学习了PCF8591A/D&D/A转换芯片的相关内容,这么我们来介绍以下AT24C02 AT24C02 简介 命名格式 引脚描述 原理图 IIC通信原理 读写地址 存储地址 基本控制方 ...

  6. 【蓝桥杯-单片机学习笔记(六)】矩阵键盘控制数码管显示0~F

    一.要求 在CT107D单片机训练平台上,首先将J5处的跳线帽接到1~2引脚,使按键S4~S19组成4*4的矩阵键盘.在扫描按键的过程中,发现有按键触发信号后,待按键松开后,数码管显示相应的数字.按键 ...

  7. 蓝桥杯单片机学习必备资源

    目录 一.你不知道蓝桥杯单片机底层驱动改了?? 二.小蜜蜂教程--自撸代码 三.个人心得 1.NE555 2.DS1302 3.DS18B20 4.AT24C02 5.PCF8951 6.串口指令读取 ...

  8. 【蓝桥杯】单片机学习(6)——蜂鸣器+继电器

    蜂鸣器+继电器 1.蜂鸣器简介 2.蜂鸣器工作过程(CT107D开发板). 3.以普中科技开发板为例 1.蜂鸣器简介 蜂鸣器按照驱动方式可分为有源蜂鸣器和无源蜂鸣器.有源蜂鸣器内部带有振荡器,只要给B ...

  9. 【蓝桥杯-单片机学习笔记(十五)】NE555频率测量

    一.要求 在CT107D平台上测量NE555产生方波的频率值并显示在数码管上.频率数据显示用5位数码管,单位是Hz,数码管最左边显示"F".改变滑动变阻器Rb3可以改变频率大小. ...

最新文章

  1. [转]使用批处理设置、启动和停止服务
  2. 【java基础】map的基本使用与字符串中每个字符出现的次数统计
  3. php后台无法登入,PHP magento后台无法登录问题解决方法
  4. 7款高颜值HTML5播放器:让你的音乐有声有色
  5. java匿名对象赋初值_不想进BAT的Java程序员不是好程序员,BAT后端Java岗面试真题分享
  6. spring boot+logbak项目打成jar包使用java -jar命令启动后日志出现中文乱码
  7. OpenGL 分层渲染Layered Rendering的实例
  8. [.NET Core].NET Core R2安装及示例教程
  9. 【渝粤题库】广东开放大学 婚姻家庭法 形成性考核
  10. [AX]AX2012 SSRS报表使用Report Data Method
  11. 网页看视频计算机休眠,晚上挂着下电影怎么让电脑不休眠 Win7关闭休眠图文教程...
  12. 多线程,异步委托,同步委托几种方式的区别
  13. LOCK - 明确地锁定一个表
  14. 在Android Studio中使用Method trace,查看某进程的所有线程trace的方法
  15. Caffe安装 (OPENCV4 Cuda10.2 Xavier)
  16. NOIp2014 提高组 Day1 T1 生活大爆炸版石头剪刀布
  17. 基于android的校园新闻app,移动端校园新闻APP的设计探析
  18. 软考常用计算公式及理解
  19. 用python :输入 20 个整数,统计其中正数、负数和零的个数
  20. 换了5G手机不会用5G网络?赶快来补课!

热门文章

  1. Windows下的subversion(SVN)下载安装及配置 -详细步骤
  2. excel转换txt文本(matlab版本)
  3. 修改 TeamViewer ID 的方法:
  4. 黑客专业术语——入门详细介绍
  5. android 补丁包增量更新
  6. Normal.dotm正由另一程序占用或者用户占用 解决方法
  7. 【转】电容的作用?电容器的作用?
  8. linux运维练习实例,马哥linux运维实战练习案例(一)
  9. Umami自建网站统计工具-免费开源的网站访问流量统计分析平台
  10. WordPress站点健康状态-session_start()函数调用生成会话REST API