STC15F104W控制3个74HC595芯片输出数码管显示

news2024/11/19 21:30:24

一、74HC595脚位图及说明

管脚说明:

14脚:DS(SER),串行数据输入引脚
13脚:OE,输出使能控制脚,它是低电才使能输出,所以接GND
12脚:RCK(STCP),存储寄存器时钟输入引脚。上升沿时,数据从移位寄存器转存到存储寄存器。
11脚:SCK(SHCP),移位寄存器时钟引脚,上升沿时,移位寄存器中的bit 数据整体后移,并接受新的bit(从SER输入)。
10脚:MR,低电平时,清空移位寄存器中已有的bit数据,一般不用,接 高电平即可。
9 脚 :串行数据出口引脚。当移位寄存器中的数据多于8bit时,会把已有的bit“挤出去”,就是从这里出去的。用于595的级联。
Q0~Q7:并行输出引脚
使用参数:

VCC:2V~6V,5V最好
IQn:± 35mA

工作流程:

DS收到一位,SCK来一个上升沿,将这位数据放入队列中,然后重复前面的步骤,等第8次时RCK来一个上升沿,将收到的8为数据存储到存储寄存器中。如果级联n个74HC595的话,需要8n次后再控制RCK来一个上升沿。

实验例程

#include<reg51.h>
#include<intrins.h>

typedef unsigned char uchar;
typedef unsigned int uint;

/**********函数声明********************/
void SendTo595(uchar byteData);
/***********************************/

sbit SER = P3^4;    //p3.4脚控制串行数据输入
sbit SCK = P3^6;    //串行输入时钟
sbit RCK = P3^5;    //存储寄存器时钟


void main()
{

       SendTo595(85);  //85的二进制:0101 0101
       
       while(1);


}

//功能:发送一个字节的数据给595,再并行输出
void SendTo595(uchar byteData)
{
   char i=0;
    for(;i<8;i++)
   {
           SER = byteData>>7;         //大家自己考量这2句
        byteData= byteData<<1;      

          SCK = 1;          //上升沿,让串行输入时钟变为高电平,并延时2个时钟周期
        _nop_();
        _nop_();

        SCK = 0;          //变为低电平,为下次准备
   }  
   
   /*位移寄存器数据准备完毕,转移到存储寄存器*/
   RCK = 1;         //上升沿,让存储寄存器时钟变为高电平,并延时2个时钟周期
   _nop_();
   _nop_();
   RCK = 0; 

}
遇到问题:

问题1:串口无法下载

问题解决:用另一个项目的板子就可以下载,所以将可能影响串口TTL电平的电阻和三极管去掉后就可以下载了,因为这里是将3.3V的TTL电平转换成了5V的。

问题2:配置io口输出,io口电平只有0.15V

问题解决:对照另一个项目的板子发现另一块板子的io电平是5V,这块板子的IO口下拉了,最终通过设置IO口推挽输出模式解决了下拉的问题。

经验总结:

数码管显示0-9:

uchar num0_9[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x00};//分别显示0 1 2 3 4 5 6 7 8 9 和 暗

级联代码:

//向数码管写入要显示的数据

void digit_display(unsigned char dat1,unsigned char dat2,unsigned char dat3)

{

   char i=0;

   for(i=0;i<8;i++)

   {

      SH_CP = 0;

   

      DS=0x80&dat3;//&为按位运算符,即全1为1,有0为0,上式也就是 (1000 0000)&(1111 1111)=1000 0000,若高位为1则是1高位为0则这个式子为0

   

      dat3=_crol_(dat3,1); //左移一位 将高位补给低位,如果二进制数为01010101 那么_crol_(1) 为10101010

      SH_CP = 1;          //上升沿让串行输入时钟变成高电平 并延时一个时钟周期

      _nop_();

      _nop_();

   }  

   for(i=0;i<8;i++)

   {

      SH_CP = 0;

   

      DS=0x80&dat2;//&为按位运算符,即全1为1,有0为0,上式也就是 (1000 0000)&(1111 1111)=1000 0000,若高位为1则是1高位为0则这个式子为0

   

      dat2=_crol_(dat2,1); //左移一位 将高位补给低位,如果二进制数为01010101 那么_crol_(1) 为10101010

      SH_CP = 1;          //上升沿让串行输入时钟变成高电平 并延时一个时钟周期

      _nop_();

      _nop_();

   }

   for(i=0;i<8;i++)

   {

      SH_CP = 0;

   

      DS=0x80&dat1;//&为按位运算符,即全1为1,有0为0,上式也就是 (1000 0000)&(1111 1111)=1000 0000,若高位为1则是1高位为0则这个式子为0

   

      dat1=_crol_(dat1,1); //左移一位 将高位补给低位,如果二进制数为01010101 那么_crol_(1) 为10101010

      SH_CP = 1;          //上升沿让串行输入时钟变成高电平 并延时一个时钟周期

      _nop_();

      _nop_();

   }  

   /*位移寄存器完毕,转移到存储寄存器*/

   ST_CP = 0;         //上升沿,存储寄存器变为高电平 延迟两个时钟周期

   _nop_();

   _nop_();

   ST_CP = 1;

}

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

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

相关文章

C语言每日一题(10):无人生还

文章主题&#xff1a;无人生还&#x1f525;所属专栏&#xff1a;C语言每日一题&#x1f4d7;作者简介&#xff1a;每天不定时更新C语言的小白一枚&#xff0c;记录分享自己每天的所思所想&#x1f604;&#x1f3b6;个人主页&#xff1a;[₽]的个人主页&#x1f3c4;&#x1f…

Mojo编程语言是AI人工智能的新的编程语言

Mojo是Chris Lattner的创业公司Modular开发的一种新的编程语言&#xff0c;旨在统一AI基建和异构计算。Mojo被认为是Python的超集&#xff0c;兼容Python生态&#xff0c;但添加了系统编程和编译期优化的特性&#xff0c;以提高性能和部署效率。Mojo基于MLIR&#xff0c;可以支…

RockTree TOKEN2049 Party爆火,一场千亿规模的“超级聚会”

今年 9 月 11 日至 17 日期间&#xff0c;在新加坡举办的 TOKEN2049 大会&#xff0c;成为了今年同类活动中规模最大、最火爆的一次 Web3 行业盛会。据悉&#xff0c;本届 TOKEN2049 迎来了来自 3,500 多个组织超 10,000 名与会者&#xff0c;并有一众重磅加密行业嘉宾出席会议…

Android 混淆使用及其字典混淆(Proguard)

1.使用背景 ProGuard能够通过压缩、优化、混淆、预检等操作&#xff0c;检测并删除未使用的类,字段,方法和属性&#xff0c;分析和优化字节码&#xff0c;使用简短无意义的名称来重命名类&#xff0c;字段和方法。从而使代码更小、更高效、更难进行逆向工程。 Android代码混淆…

实时数仓混沌演练实践

一、背景介绍 目前实时数仓提供的投放实时指标优先级别越来越重要&#xff0c;不再是单独的报表展示等功能&#xff0c;特别是提供给下游规则引擎的相关数据&#xff0c;直接对投放运营的广告投放产生直接影响&#xff0c;数据延迟或者异常均可能产生直接或者间接的资产损失。…

【项目总结】C++ 云盘

项目介绍 本项目是一款分布式云存储软件&#xff0c;旨在提供强大的文件存储和共享功能。 因为要运行高并发量的访问&#xff0c;所以进行了服务器的集群&#xff0c;也就是要有多台web服务器&#xff0c;每台web服务器中部署相同的程序&#xff0c;为了让这几台web服务器的负…

【VSCode 插件商城无法搜索到插件的解决方法】

背景 因为本地电脑安装的开发软件较多&#xff0c;导致电脑变得很卡&#xff0c;所有申请一个虚拟机作为开发机&#xff0c;安装完VScode之后发现无法搜索到插件&#xff0c;于是便想把本地电脑上VScode装好的插件复制到虚拟机上。 实现 VSCode 的插件存在 【C/用户/用户名/…

关于ubuntu设置sh文件开机自启动python3和sudo python3问题

关于ubuntu设置sh文件开机自启动python3和sudo python3问题 说明系统为 ubuntu22.04python是python3.10.12ros系统为ros2 humble 背景解决方法补充 说明 系统为 ubuntu22.04 python是python3.10.12 ros系统为ros2 humble 背景 将一个py文件设置为开机自启动&#xff0c;服…

如何对pdf文件进行压缩?

如何对pdf文件进行压缩&#xff1f;一般来说&#xff0c;PDF文件里面一般会包含大量的图像、文本和其他类型的独裁&#xff0c;这使得它们的文件大小相对于其他文档要大得多&#xff08;其实主要是pdf文件里面包含的大量图片&#xff0c;尤其是高清拖&#xff09;。由于pdf文件…

Tiny11:极限精简的Windows 11系统镜像,老旧电脑的福音(移除Windows11安装要求限制,且支持苹果ARM架构CPU,全版本资源下载)

文章目录 优点和适用场景系统下载系统版本说明系统安装Tiny11 设置安装简体中文语言方法Windows 11,作为微软最新一代操作系统,固然有其强大的功能和卓越的性能,但有时,更轻、更小、更快速的需求也在用户的考虑范围之内。这就是Tiny11存在的理由。Tiny11是基于Windows 11的…

【收藏】如何最快取得NISP二级和CISP

【收藏】如何最快取得NISP二级和CISP &#x1f449;今天小编来给大家讲解一下如何最快的取得NISP二级和CISP证书 ✅我们从如下几个方面为大家讲解&#xff1a; &#x1f53a;报名条件 &#x1f53a;考试形式 &#x1f53a;考试题型 &#x1f53a;如何备考 &#x1f53a;证书用途…

Wish下单支付教程,测评养号需要满足哪些技术要点?

Wish是2011年成立的一家高科技独角兽公司&#xff0c;有90%的卖家来自中国&#xff0c;也是北美和欧洲最大的移动电商平台。 它使用一种优化算法大规模获取数据&#xff0c;并快速了解如何为每个客户提供最相关的商品&#xff0c;让消费者在移动端便捷购物的同时享受购物的乐趣…

C# VS CS1752解决办法

代码报错&#xff1a; Severity Code Description Project File Line Suppression State Error CS1752 项目文件行抑制状态 错误cs1752无法嵌入互操作类型“ActUtlTypeClass”。 将引用的dll打开其属性 选择属性&#xff0c;将嵌入互操作类型改为false即可。

Java多线程篇(4)——wait/notify和park/unPark

文章目录 Object - wait/notifyobject.wait()object.notify() LockSupport - park/unparkLockSupport.park()LockSupport.unPark() Object - wait/notify object.wait() ObjectSynchronizer::wait 从这段代码可以得到两个信息 1&#xff1a;wait() 底层是对象锁&#xff08;就…

You must install .NET Desktop Runtime to run this application

使用.Net6 写了个小程序&#xff0c;放到另一台机器上报这个错。 安装 x64的Desktop Runtime 安装 x86的Desktop Runtime 安装 x64的 .Net6 SDK 安装 x86的 .Net6 SDK 均无效&#xff0c;还是报这个错。 最后发现问题是因为生成目录里有一个 xxx.runtimeconfig.json 的文…

23年下考前须知-软考中级信息安全工程师

信息安全工程师主要涉及计算机信息安全方面&#xff0c;在计算机软硬件、网络、应用相关领域从事安全系统设计、安全产品开发、产品集成、信息系统安全检测与审计等方面工作&#xff0c;服务单位可以是国家机关、企事业单位及科研教学单位等。 一、考试报名时间 信安考试一年…

‘Xcode Unable to execute command: Segmentation fault: 11‘

概述, Xcode Unable to execute command: Segmentation fault: 11 解决方案, 添加: Build Setting -> Other Linker Flags -> -ld64 延伸, -ld64是什么, 在 Xcode 的 Build Setting 中&#xff0c;Other Linker Flags&#xff08;其他链接器标志&#xff09;用于向链…

c++ 多态的

#include <iostream> #include <string.h> using namespace std;//含有纯虚函数为抽象类&#xff0c;无法实例化 class AbstractDrinking { public://煮水virtual void Boil() 0;//冲泡virtual void Brew() 0;//导入杯子中virtual void PourInCup() 0;//加入辅料…

doxygen c++ 语法

c基本语法模板 以 /*! 开头, */ 结尾 /*!\关键字1\关键字2 */1 文件头部信息 /*! \file ClassA.h* \brief 文件说明 定义了类fatherA* \details This class is used to demonstrate a number of section commands.* \author John Doe* \author Jan Doe* \v…

C++11的一些新特性|右值引用|STL中的一些变化

文章目录 1、{}初始化 2、声明 2.1auto 2.2、decltype 2.3、nullptr 2.4.范围for循环 3、STL中的一些新变化 3.1.新容器 3.2容器中的一些新方法 4.右值引用和移动语义 左值引用和右值引用 左值引用的短板&#xff1a; 右值引用使用场景和意义&#xff1a; move的作…