【单片机原理及应用】实验: 8位数码显示器

news2024/11/14 3:55:29

目录

一、实验目的

二、实验内容

三、实验步骤

四、记录与处理

五、思考

六、成果文件提取链接


一、实验目的

 学习8位数码管串行扩展原理,掌握74HC595与动态显示编程方法。


二、实验内容

 

参照图表

    

(1)创建一个包含80C51固件,且采用Keil for 8051编译器的新项目。

(2)按照图3.54和表2.18完成实验的电路图绘制。

(3)编写C51源程序,要求实现如下功能:

  • 8个数码管的所有笔段整体全亮1秒(以便检查有无缺画);
  • 按照从左至右的顺序以0.5秒间隔逐位显示数字7,6,5,4,3,2,1,0;
  • 8个数码管整体显示自己学号前4位+后4位

(4)完成源程序编译和动态调试,实现实验7的控制功能要求。

(5)完成实验7报告的撰写。提交实验报告并包括如下内容:实验步骤,含电路原理图及其分析,74HC595原理阐述,C51源程序(含注释语句);记录与处理(仿真运行截图),实验小结。

(6)C51源程序源代码压缩后以附件形式提交。


三、实验步骤

 

    

  

(1)创建一个包含80C51固件,且采用Keil for 8051编译器的新项目。

(2)按照图示完成实验的电路图绘制。

(3)编写C51源程序,要求实现如下功能:

  • 8个数码管的所有笔段整体全亮1秒(以便检查有无缺画);
  • 按照从左至右的顺序以0.5秒间隔逐位显示数字7,6,5,4,3,2,1,0;
  • 8个数码管整体显示自己学号前4位+后4位。即2250+0184

根据实验要求我们可以编写出以下代码:

sbit SH_CP=P2^0;	// 模拟SH_CP信号输出端
sbit DS=P2^1; 		//模拟DS数据输入端
sbit ST_CP=P2^2; 	//模拟SH_CP信号输出端

void Delayms(unsigned int t){	//延时约1毫秒函数:
         unsigned int x,y;
         for(x=t;x>0;x--)
                for(y=120;y>0;y--);	
}

void DisplayChar(unsigned char segmd,unsigned char bitd ){ //数码管段码和数码管位码
        unsigned char i,j;
        unsigned int dat;
        dat=bitd;
        dat=dat<<8|segmd; 	
        for(i=0;i<16;i++){	
		SH_CP = 0;		
		DS=(dat & 0x8000)?1:0; 	
		SH_CP=1;   		
		for(j=0; j<2; j++);	
		dat<<=1;   		
        }
        ST_CP=0; 		
        ST_CP=1;  		

}

void main(void){
        unsigned char j;
        DisplayChar(0xff,0x00);	//数码管全亮
        Delayms(1000);			//延时2秒
	for(j=0;j<8;j++) {		
		DisplayChar(segmcode[7-j],bitcode[j]);
		Delayms(500);
	}  	
        while(1){
		unsigned char school_number[] = {2, 2, 5, 0, 0, 1, 8, 4}; // 存储学号数字  
		for(j=0; j<8; j++){  
		     DisplayChar(segmcode[school_number[j]], bitcode[j]); // 取出段码和位码由595输出  
												   // 这里不需要延时,因为我们要整体显示学号  
		}  
        }
}

(4)完成源程序编译和动态调试,实现实验7的控制功能要求。

  • 8个数码管的所有笔段整体全亮1秒(以便检查有无缺画);

  • 按照从左至右的顺序以0.5秒间隔逐位显示数字7,6,5,4,3,2,1,0;

  • 8个数码管整体显示自己学号前4位+后4位。即2250+0184


四、记录与处理

 

  • 8个数码管的所有笔段整体全亮1秒(以便检查有无缺画);

  • 按照从左至右的顺序以0.5秒间隔逐位显示数字7,6,5,4,3,2,1,0;

  • 8个数码管整体显示自己学号前4位+后4位。即2250+0184


五、思考

 

1.74HC595是一款高性能、低功耗的CMOS技术芯片,具有8位串行输入、8位并行输出的移位寄存器,以及一个8位的数据存储寄存器。以下是其原理的详细介绍:

串行输入:在SH_CP(移位寄存器时钟)的上升沿,串行数据从DS(串行数据输入端)输入到内部的8位移位寄存器,并在Q7'(级联输出端)输出。

并行输出控制:当OE(输出使能控制端)为低电平时,并行输出端的输出值等于存储寄存器中的值。这使得74HC595可以直接驱动数码管或其它显示设备。

锁存功能:ST_CP(输出存储器锁存时钟线)的上升沿将移位寄存器中的数据锁存到存储寄存器中,从而实现数据的稳定输出。这个特性使得74HC595非常适合动态显示控制。

复位与清除:/MR(主复位端)可以实现对移位寄存器的异步清零,这通常连接到VCC以防止意外的数据清除。

级联使用:通过将Q7'连接到下一个74HC595的DS端,可以实现多个芯片的级联,以控制更多的输出。这种配置可以扩展I/O端口,适用于需要大量输出的应用场合。

输出能力:74HC595具备较强的输出能力,可以驱动多种类型的负载,如LED数码管等。同时,其100MHz的移位频率使得数据传输更加高效。

74HC595通过其独特的串入并出结构,为微控制器系统提供了一个节省I/O端口、高效率和灵活控制的方案。它广泛应用于数码管驱动、LED点阵控制、继电器控制等多种场景,是实现多路输出控制的理想选择。

2.在本次实验中,我深入学习并实践了如何使用51单片机控制多个LED数码管的显示。通过编写程序,我掌握了对数码管动态显示的控制技巧,以及如何利用74HC595移位寄存器芯片来减少对单片机I/O端口的使用。

3.实验过程中,我首先实现了8个数码管的所有笔段整体全亮1秒的功能,这有助于检查数码管是否存在缺画问题。随后,按照从左至右的顺序逐位显示数字7至0,每个数字显示间隔为0.5秒。这个步骤让我理解了如何通过循环和延时函数来控制显示顺序和时间间隔。

4.最后,我尝试将我的学号“2250+0184”分两次显示在8个数码管上。这个环节考验了我对数码管编码和位控制的理解,同时也加深了我对数组、循环等编程基础概念的应用能力。

5.在实验中,我也遇到了一些问题,通过查阅资料和多次调试,我逐渐弄清楚了其工作机制,并成功修正了程序。此外对延时函数的准确性也进行了反复验证,确保每个显示状态能够准确停留预设的时间。


六、成果文件提取链接

链接:https://pan.baidu.com/s/1vih-osSS5LE-I0vk-Imugg?pwd=ugmx 
提取码:ugmx  

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2090433.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

如何选择适合企业的财税自动化解决方案

财税自动化解决方案是现代企业提升财务管理效率、降低运营成本的关键工具。然而&#xff0c;市场上的财税自动化产品琳琅满目&#xff0c;功能各异&#xff0c;企业在选择时常常感到困惑。本文金智维将从中小型的需求出发&#xff0c;帮助企业了解如何选择适合自身的财税自动化…

ASP.NET Core6.0-wwwroot文件夹无法访问解决方法

默认情况下&#xff0c;ASP.NET Core项目中的wwwroot文件夹被视为Web根文件夹。静态文件可以存储在Web根目录下的任何文件夹中&#xff0c;并可以使用该根目录的相对路径进行访问。在ASP.NET应用程序中&#xff0c;可以从应用程序的根文件夹或其下的任何其他文件夹提供静态文件…

数据分析学习之numpy

引言 好久没写帖子了&#xff0c;确实变懒了&#xff0c;在这一个月里学习了爬虫&#xff0c;还有seleium自动化技术初步以及数据分析中的numpy&#xff0c;下一步就要学习pandas,但是欠了太多帖子没写&#xff0c;所以现在来补一下&#xff0c;现在来的是numpy的学习&#xff…

Java面试宝典-java基础07

Java面试宝典-java基础07 61、什么是 java 序列化&#xff1f;什么情况下需要序列化&#xff1f;62、序列化使用场景有哪些&#xff1f;63、使用序列化和反序列化的注意事项64、为什么要使用克隆&#xff1f;如何实现对象克隆&#xff1f;深拷贝和浅拷贝区别是什么&#xff1f;…

计算机网络概述(分组延时、丢失和吞吐量)

目录 分组丢失和延时是怎样发生的&#xff1f; 四种分组延时 节点延时 排队延迟 分组丢失 吞吐量 吞吐量&#xff1a;互联网场景 分组丢失和延时是怎样发生的&#xff1f; 在路由器缓冲区的分组队列 分组到达链路的速率超过了链路输出的能力分组等待排队到队头、被传输…

Ethernet 测试系列(1)-- 物理层测试::IOP Test::Link-up time

车载以太网物理层IOP测试&#xff0c;即互操作性测试&#xff08;Interop- erability Tests&#xff09;&#xff0c;用于验证车载以太网PHY&#xff08;通常也称为收发器&#xff09;的可靠性和检查PHY能否在给定的有限时间内建立稳定的链路;还用于车载以太网PHY的诊断&#x…

ARCGIS 纸质小班XY坐标转电子要素面(2)

本章用于说明未知坐标系情况下如何正确将XY转要素面 背景说明 现有资料&#xff1a;清除大概位置&#xff0c;纸质小班图&#xff0c;图上有横纵坐标&#xff0c;并已知小班XY拐点坐标&#xff0c;但未知坐标系。需要上图 具体操作 大部分操作同这边文章ARCGIS 纸质小班XY…

Vue.js 模板语法详解:插值表达式与指令使用指南

Vue.js 模板语法详解&#xff1a;插值表达式与指令使用指南 引言 简要介绍主题&#xff1a; Vue.js 是一个现代化的 JavaScript 框架&#xff0c;用于构建用户界面。Vue 的模板语法提供了直观且功能强大的工具&#xff0c;用于将数据与 DOM 绑定。本文将深入探讨 Vue.js 的两个…

AI游戏革命!谷歌推出GameNGen,实时生成游戏画面,每秒20帧实时模拟

未来&#xff0c; AI会取代传统游戏引擎吗&#xff1f; 谷歌的研究人员发表论文称&#xff0c;他们创建了一个名为GameNGen的AI神经网络&#xff0c;直接用AI生成了整个《Doom》游戏&#xff01; 最令人惊讶的是&#xff0c;他们并没有使用传统的游戏引擎&#xff0c;而是在单…

基于单片机的浴室防雾镜系统设计

1系统方案设计 浴室防雾镜是一种特殊的镜子&#xff0c;在浴室中使用时不会起雾&#xff0c;通过对其需要展开分析&#xff0c;本设计基于51单片机设计的浴室防雾镜的系统架构如图2.1所示&#xff0c;采用了DS18B20温度传感器和人体红外感应红外传感器进行智能控制&#xff0c…

通过住宅代理捕获网站快照:技术解析与未来展望

引言 什么是网站快照&#xff1f;为什么需要网站快照&#xff1f; 网站快照的工作原理是什么&#xff1f; 如何捕获网站快照&#xff1f; 网站快照未来的发展趋势 总结 引言 在当今快速发展的数字时代&#xff0c;网站快照作为一种关键的网页记录技术&#xff0c;扮演着越…

Springboot3整合ELK实现日志可视化

一、环境准备 Elasticsearch、Logstash、Kibana,组合起来可以搭建线上日志系统 ELK中各个服务的作用 Elasticsearch:用于存储收集到的日志信息&#xff1b; Logstash:用于收集日志&#xff0c;SpringBoot应用整合了Logstash以后会把日志发送给Logstash,Logstash再把日志转发…

【Android】UI拓展之滑动菜单、悬浮按钮、CoordinatorLayout布局等

文章目录 一、滑动菜单1. 添加依赖2. 侧滑菜单内容2.1 headerLayout样式2.2 menu样式 3. 主界面添加4. 关联actionbar与滑动菜单 二、悬浮按钮FloatingActionButton 三、可交互提示Snackbar 四、能协调子视图的布局CoordinatorLayout 五、卡片式布局CardView 一、滑动菜单 Draw…

微信小程序服务器费用一年多少?微信小程序开发

在互联网时代&#xff0c;微信小程序已成为众多企业和个人拓展业务、提升服务品质的有力工具。然而对于许多准备涉足小程序领域的朋友来说【开发一个小程序大概需要多少钱】以及【微信小程序服务器费用一年需要多少】是首要关注的问题&#xff0c;今天飞飞将和你们分享小程序服…

【LoRa】SetLoRaSymbNumTimeout寄存器

目录 1 前言2 实验验证疑问2.1 SetRx的timeout模式和SetLoRaSymbNumTimeout2.1.1 实验12.1.2 实验22.1.3 结论 2.2 SetRx的single与continuous模式和SetLoRaSymbNumTimeout2.2.1 实验12.2.2 实验22.2.3 实验3 3 小结 1 前言 本章节介绍LoRa芯片的寄存器SetLoRaSymbNumTimeout&…

服务器部署前后端分离项目vue+springboot

步骤 1-安装java&#xff0c;mysql&#xff0c;nginx环境 服务器先安装宝塔 yum install -y wget && wget -O install.sh https://download.bt.cn/install/install_lts.sh && bash install.sh ed8484bec安装后输入bt 14查看内网链接打开宝塔页面 java&…

uniapp icons图标不显示的问题解决

如图所示 在uniapp开发中 突然发现icons组件不显示图标了 &#xff0c;而且没什么报错 这是为什么 其实这最大的原因就是你上面的代码在取值上没有做好null的判断 导致参数取值报错 因此影响了页面正常的渲染 导致下面的图标都不显示

vsCode多文件标签栏换行显示

1.文件——首选项——点‘设置’ 2.输入 wrap tabs 并勾选Workbench › Editor: Wrap Tabs

安装MySQL,navicat以及Django配置遇到的一些问题

MySQL安装问题 安装MySQL按照了此文章&#xff1a; MySQL数据库下载及安装教程&#xff08;最最新版&#xff09;_mysql下载安装-CSDN博客https://blog.csdn.net/weixin_39289696/article/details/128850498首先是遇到了starting the server红色叉号显示 按照上面文章的介绍…

《机器学习》【项目】 爬虫爬取数据、数据分词、贝叶斯算法、判断分类 <完整实战详解> (全篇完结)

目录 一、回顾爬虫 1、什么是爬虫 2、实操爬虫 1&#xff09;寻找标签位置 2&#xff09;爬取苏某某购产品好评数据 运行代码&#xff1a; 3&#xff09;爬取差评内容 二、数据分词 1、将获取到的好评和差评数据进行初步分词 1&#xff09;初步分词 2&#xff09;内…