蓝桥杯单片机学习日记1-LED 蜂鸣器 继电器 数码管的简单驱动
此片文章用于记录蓝桥杯单片机的学习。
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 蜂鸣器 继电器 数码管的简单驱动相关推荐
- 蓝桥杯单片机学习日记3-矩阵键盘的使用,线反转法,三步消抖,按键长按与短按
此片文章用于记录蓝桥杯单片机的学习 篮球杯单片机上的矩阵按键原理图如下: 使用矩阵键盘时,要将跳线帽J5跳至KBD模式. 值得注意的是,若开发板上的单片机使用的为STC15,那么以上原理图适用.如果单 ...
- 【蓝桥杯—单片机学习笔记(四)】共阳数码管的动态显示
一.要求 在CT107D单片机训练综合平台上,实现数码管的动态显示,在8位数码管中,前面4位显示年份"2022",接着是2个分隔符"--",最后两位是月份,从1 ...
- 蓝桥杯单片机学习13——NE555方波发生器频率测量
NE555 简介 引脚图 原理图 真值表 工作原理 频率测量原理 定时器测量频率方法 代码实现 总结(一堆废话) 简介 NE555是一种高度稳定的控制器,内部用三个阻值为5KΩ的电阻分压,因此叫做55 ...
- 蓝桥杯单片机学习11——PCF8591A/DD/A转换芯片
上期我们学习了DS1302实时时钟的基本使用,现在我们来学习PCF8591A/D&D/A转换芯片的相关内容 蓝桥杯单片机学习11--PCF8591A/D&D/A转换芯片 PCF8591 ...
- 蓝桥杯单片机学习12——AT24C02EEPROM存储芯片
上期我们学习了PCF8591A/D&D/A转换芯片的相关内容,这么我们来介绍以下AT24C02 AT24C02 简介 命名格式 引脚描述 原理图 IIC通信原理 读写地址 存储地址 基本控制方 ...
- 【蓝桥杯-单片机学习笔记(六)】矩阵键盘控制数码管显示0~F
一.要求 在CT107D单片机训练平台上,首先将J5处的跳线帽接到1~2引脚,使按键S4~S19组成4*4的矩阵键盘.在扫描按键的过程中,发现有按键触发信号后,待按键松开后,数码管显示相应的数字.按键 ...
- 蓝桥杯单片机学习必备资源
目录 一.你不知道蓝桥杯单片机底层驱动改了?? 二.小蜜蜂教程--自撸代码 三.个人心得 1.NE555 2.DS1302 3.DS18B20 4.AT24C02 5.PCF8951 6.串口指令读取 ...
- 【蓝桥杯】单片机学习(6)——蜂鸣器+继电器
蜂鸣器+继电器 1.蜂鸣器简介 2.蜂鸣器工作过程(CT107D开发板). 3.以普中科技开发板为例 1.蜂鸣器简介 蜂鸣器按照驱动方式可分为有源蜂鸣器和无源蜂鸣器.有源蜂鸣器内部带有振荡器,只要给B ...
- 【蓝桥杯-单片机学习笔记(十五)】NE555频率测量
一.要求 在CT107D平台上测量NE555产生方波的频率值并显示在数码管上.频率数据显示用5位数码管,单位是Hz,数码管最左边显示"F".改变滑动变阻器Rb3可以改变频率大小. ...
最新文章
- [转]使用批处理设置、启动和停止服务
- 【java基础】map的基本使用与字符串中每个字符出现的次数统计
- php后台无法登入,PHP magento后台无法登录问题解决方法
- 7款高颜值HTML5播放器:让你的音乐有声有色
- java匿名对象赋初值_不想进BAT的Java程序员不是好程序员,BAT后端Java岗面试真题分享
- spring boot+logbak项目打成jar包使用java -jar命令启动后日志出现中文乱码
- OpenGL 分层渲染Layered Rendering的实例
- [.NET Core].NET Core R2安装及示例教程
- 【渝粤题库】广东开放大学 婚姻家庭法 形成性考核
- [AX]AX2012 SSRS报表使用Report Data Method
- 网页看视频计算机休眠,晚上挂着下电影怎么让电脑不休眠 Win7关闭休眠图文教程...
- 多线程,异步委托,同步委托几种方式的区别
- LOCK - 明确地锁定一个表
- 在Android Studio中使用Method trace,查看某进程的所有线程trace的方法
- Caffe安装 (OPENCV4 Cuda10.2 Xavier)
- NOIp2014 提高组 Day1 T1 生活大爆炸版石头剪刀布
- 基于android的校园新闻app,移动端校园新闻APP的设计探析
- 软考常用计算公式及理解
- 用python :输入 20 个整数,统计其中正数、负数和零的个数
- 换了5G手机不会用5G网络?赶快来补课!
热门文章
- Windows下的subversion(SVN)下载安装及配置 -详细步骤
- excel转换txt文本(matlab版本)
- 修改 TeamViewer ID 的方法:
- 黑客专业术语——入门详细介绍
- android 补丁包增量更新
- Normal.dotm正由另一程序占用或者用户占用 解决方法
- 【转】电容的作用?电容器的作用?
- linux运维练习实例,马哥linux运维实战练习案例(一)
- Umami自建网站统计工具-免费开源的网站访问流量统计分析平台
- WordPress站点健康状态-session_start()函数调用生成会话REST API