51单片机加74hc595驱动多个数码管静态显示的程序设计

这是原理图请各位高手指点一下。我想可以任意控制一个数码管显示数值... 这是原理图请各位高手指点一下。我想可以任意控制一个数码管显示数值 展开
 我来答
意法半导体(中国)投资有限公司 2020-01-15
展开全部
单片机(Microcontrollers)是一种集成电路芯片,是采用超大规模集成电路技术把具有数据处理能力的中央处理器CPU、随机存储器RAM、只读存储器ROM、多种I/O口和中断系统、定时器/计数器等功能(可能还包括显示驱动电路、脉宽调制电路、模拟多路转换器、A/D转换器等电路)集成到一块硅片上构成的一个小而完善的微型计算机系统,在工业控制领域广泛应用。从上世纪80年代,由当时的4位、8位单片机,发展到现在的300M的高速单片机。
旅游路上小知识
高粉答主

2020-04-24 · 我是旅行小达人,专注解决旅行中遇到的问题
旅游路上小知识
采纳数:2 获赞数:83103

向TA提问 私信TA
展开全部

1、首先数码管分为1位,4位,8位,4位和8位的又分为共阴和共阳数码管。

2、共阳数码管,即阳极全部连接在一起,单片机接口给低电位即可点亮对应的段位。

3、可利用MCS-51系列单片机的芯片AT89C52的P3.4,P3.5,P3.6,P3.7进行计时并在数码管上显示时间,作为按键的入口。

4、共阴数码管,即阴极全部连接在一起,单片机接口给高电位即可点亮对应的段位。

5、其中“开始”按键当开关由上向下拨时开始计时,此时若再拨“开始”按键则数码管暂停;“清零”按键当开关由上向下拨时数码管清零,此时若再拨“开始”按键则又可重新开始计时。

意法半导体(中国)投资有限公司
2020-01-15 广告
单片机(Microcontrollers)是一种集成电路芯片,是采用超大规模集成电路技术把具有数据处理能力的中央处理器CPU、随机存储器RAM、只读存储器ROM、多种I/O口和中断系统、定时器/计数器等功能(可能还包括显示驱动电路、脉宽调制... 点击进入详情页
本回答由意法半导体(中国)投资有限公司提供
lycdl
高粉答主

推荐于2017-09-24 · 醉心答题,欢迎关注
知道大有可为答主
回答量:2万
采纳率:94%
帮助的人:4917万
展开全部
每一片74HC595都需要串行输入8位数的段码,数码管才能显示,而且4片595是串联使用的,所以,想控制任意一个数码管的显示,都必须一次串行输入4个数码管的段码才行,即串行输入4X8=32位数,而且是DIS4的段码在前,DIS1的段码在后,每个段码的8位数要求是高位在前,低位在后,即先输出最高位,后输出最低位。
更多追问追答
追问
本人是菜鸟级别的,能否帮忙提供一个程序示例。
追答

给一个仿真图,给出的程序是在这个仿真图上测试通过的,与你显示电路很相似,所以,显示子程序可以移植的,但是HC595的引脚需要重新定义的。

程序:

#include <reg52.h>
#include <INTRINS.H>
sbit sclk=P1^7;     //HC595第11脚,串行时钟输入端
sbit sdat=P1^6;     //HC595第14脚,串行数据输入端
sbit cpla=P1^5;     //HC595第12脚,输出锁存脉冲输入端
sbit ins1=P3^2;     //外接按钮
unsigned char dis[]={0,1,2,3,4};   //定义显示缓冲区4个单元
unsigned char code segment[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,
     0x27,0x7F,0x6F}; //定义共阴数码管段码

//*串行输出一个字节子函数
void hc595(unsigned char word)
{
  unsigned char i;
  for (i=8;i>0;i--) 

  {
  sclk=0;
  sdat=0x80&word;
  word=_crol_(word,1);
  sclk=1;
  _nop_();
  }
}
//**显示子函数**//
void display()
{
 unsigned char j;
 for (j=4;j>0;j--)
 {
 hc595(segment[dis[j]]);
 }
 cpla=1;
    _nop_(); 
 cpla=0;
 }
//****主函数****//
void main()
{
unsigned char j;
cpla=0;
while (1)
{
 display();              //调用显示子程序
 if(ins1==0)             //按一次键,每位显示数加1
 {
  for(j=1;j<4;j++)
  dis[j]=dis[j+1];
  dis[4]++;
  if(dis[4]>9)dis[4]=0;
  while(ins1==0);
 }
   }
}

其中的主函数你不用,其余两个子函数是可以移植的。

本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
做而论道
高能答主

2014-09-10 · 把复杂的事情简单说给你听
知道大有可为答主
回答量:3万
采纳率:80%
帮助的人:1.2亿
展开全部
想要让某一位亮、灭,而不影响其它位正常显示,可见:

http://hi.baidu.com/do_sermon/item/e799050b28e6b03df3eafc84
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
YD极女
2019-07-08 · 超过21用户采纳过TA的回答
知道答主
回答量:133
采纳率:35%
帮助的人:22万
展开全部
做完了没有?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式