找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2661|回复: 3
收起左侧

单片机新手,关于74HC595串行输出点亮LED灯的程序问题

[复制链接]
ID:365235 发表于 2020-3-30 22:04 | 显示全部楼层 |阅读模式
我想用两块74HC595级联输出电平来控制数码管的亮灭,上面的程序我想把0xfffe送给两片级联的74HC595芯片输出1111111111111110使得最后一个LED点亮,程序调试不出来,是不是程序有问题,仿真图在下面,不知道接法有没有问题,麻烦各位大神帮忙看一下,万分感谢!
74hc595.jpg

单片机源程序如下:
  1. #include<reg51.h>
  2. #include<intrins.h>

  3. typedef unsigned char uchar;
  4. typedef unsigned int uint;

  5. void hc595(uchar byteData);

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

  9. void main()
  10. {         
  11.         while(1)
  12.         {
  13.                    hc595(0xfffe);
  14.         }                  
  15. }



  16. /*功能:发送一个字节的数据给595,再并行输出*/
  17. void hc595(char byteData)
  18. {
  19.     char i=0;   
  20.     for(i=0;i<16;i++)
  21.     {
  22.         SER = byteData>>15;        //送出15位数据
  23.         byteData= byteData<<1;      

  24.         SCK = 0;          //上升沿,让串行输入时钟变为高电平,并延时2个时钟周期
  25.         _nop_();
  26.         _nop_();
  27.         SCK = 1;          //变为低电平,为下次准备
  28.     }  

  29.    //位移寄存器数据准备完毕,转移到存储寄存器
  30.    RCK = 0;         //上升沿,让存储寄存器时钟变为高电平,并延时2个时钟周期
  31.    _nop_();
  32.    _nop_();
  33.    RCK = 1;

  34. }
复制代码






回复

使用道具 举报

ID:235200 发表于 2020-3-31 01:17 | 显示全部楼层
你这程序的for循环不应该是一次送16位后才右移,应该是送出8位后再右移至下一个芯片
回复

使用道具 举报

ID:213173 发表于 2020-3-31 06:54 | 显示全部楼层

程序没有大问题,就是数据类型用错,传递不了16位数据
错误:void hc595(char byteData)
正确:void hc595(unsigned int byteData);
回复

使用道具 举报

ID:365235 发表于 2020-3-31 11:55 | 显示全部楼层
wulin 发表于 2020-3-31 06:54
程序没有大问题,就是数据类型用错,传递不了16位数据
错误:void hc595(char byteData)
正确:void hc ...

已解决,谢谢大神
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表