当前位置: 首页 > article >正文

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

目录

一、实验目的

二、实验内容

三、实验步骤

四、记录与处理

五、思考

六、成果文件提取链接


一、实验目的

 学习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.kler.cn/a/289479.html

相关文章:

  • HTTP 客户端怎么向 Spring Cloud Sleuth 传输跟踪 ID
  • 基于微信小程序的乡村研学游平台设计与实现,LW+源码+讲解
  • 贪心算法day03(最长递增序列问题)
  • 微服务(二)
  • 《C++在金融领域的技术革命:高效、安全与创新的融合》
  • 「Py」Python基础篇 之 Python都可以做哪些自动化?
  • Win11 / Win10 系统极化工具,降低游戏延迟效果明显
  • Django Admin管理后台导入CSV
  • 中秋之美——html5+css+js制作中秋网页
  • 解释 CountDownLatch 和 CyclicBarrier 的作用,并给出一个实际的使用场景来说明如何使用这两个类来协调多线程任务?
  • PMP–一、二、三模、冲刺、必刷–分类–14.敏捷–技巧--累积流图
  • 探索英文字体设计的奥秘,解读风格与实用技巧
  • web api 文件上传下载帮助类
  • 生成模型之生成器
  • 使用 Rust 和 Bevy 创建你的第一个三维渲染应用程序
  • 阿尔茨海默病症识别+图像识别Python+人工智能+深度学习+TensorFlow+机器学习+卷积神经网络算法
  • 如何打造一个智能化的远程在线考试系统?
  • 《第二十七章 IO 流 - 字符流》
  • 使用 docker 部署 kvm 图形化管理工具 WebVirtMgr
  • 【鸿蒙HarmonyOS NEXT】List组件的使用
  • 集成电路学习:什么是ARM先进精简指令集计算机
  • Altium Designer爬虫工具/网页信息获取工具
  • 深度学习基础--模型拟合
  • 新版某数字壳脱壳,过frida检测,及重打包
  • uniapp 自定义微信小程序 tabBar 导航栏
  • P1045 麦森数