标题: 单片机74HC595点阵数据传输有错误 [打印本页]

作者: ygdy1    时间: 2021-1-11 15:38
标题: 单片机74HC595点阵数据传输有错误

代码和仿真都发上了
显示1是正常的,其他的就开始乱了

这个是显示1、2、3
  1. #include<reg51.h>
  2. #include "intrins.h"
  3. #include "char.h"
  4. #define uint unsigned int
  5. #define uchar unsigned char
  6. sbit ser=P0^3;//ser 14
  7. sbit sck=P0^4;//sck 11
  8. sbit rck=P0^5;//rck 12
  9. sbit rst=P3^0;//复位信号
  10. //==============================================================
  11. void delay(uint ii){uint i;for(i=0;i<ii;i++);}
  12. //==============================================================
  13. void SendByte(uchar cc)         //发送
  14. {
  15.         uchar c=cc;
  16.         int i;
  17.   //=串行发送=
  18.   for(i=0;i<8;i++)
  19.   {            sck=0;
  20.                   ser=c>>7;
  21.                 c<<=1;
  22.                 sck=1;
  23.            }
  24.            //=并行发送=
  25.            rck=1;
  26.            _nop_();
  27.        _nop_();
  28.            rck=0;
  29.            //=复位=
  30.            rst=0;
  31.                 _nop_();
  32.        _nop_();
  33.            rst=1;
  34.            }

  35. //==============================================================
  36. void PutChar(char ci) //分解
  37. {
  38.         int i,j;
  39.   for(i=0;i<200;i++)
  40.   for(j=0;j<6;j++)
  41.   {
  42.           P1=j;         
  43.           SendByte(vc[ci-0x20][j]); //ASCII
  44.         _nop_();
  45.     _nop_();
  46.         SendByte(0);
  47.   }
  48. }
  49. //=============================================================
  50. void PutStr(char *str)
  51. {int i=0;
  52. while(str[i]!=0)
  53. {
  54.          PutChar(str[i]);
  55.          i++;
  56. }

  57. }
  58. //============================================================
  59. void main()
  60. {
  61.         rck=0;
  62.   while(1){
  63.           PutStr("123");
  64.         
  65.   }
  66. }

复制代码



1.zip (55.83 KB, 下载次数: 8)





作者: 人人学会单片机    时间: 2021-1-11 16:08
89单片机+四个74HC595的LED16x16点阵 程序源码原理图 你可以用我们的代码
http://www.51hei.com/bbs/dpj-200961-1.html
作者: xianfajushi    时间: 2021-1-11 16:28
  1. void PutChar(char ci) //分解
  2. {
  3.         int i,j;
  4.   for(i=0;i<200;i++)
  5.   for(j=0;j<=6;j++)
  6.   {
  7.           P1=j;         
  8.           SendByte(vc[ci-0x20][j]); //ASCII
  9.         _nop_();
  10.     _nop_();
  11.         SendByte(0);
  12.   }
  13. }
复制代码

作者: ygdy1    时间: 2021-1-11 17:03
xianfajushi 发表于 2021-1-11 16:28

谢谢大佬!
作者: 名字不是重点    时间: 2021-1-11 17:06
595数据输出口在上电后是随机的,所以,你在上电后要做清除动作,即,送出0x00,多少个595就送多少个0x00

作者: 名字不是重点    时间: 2021-1-11 17:18
595的MR脚要接阻容复位或直接电源,OE要受控。你这电路不强壮。




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1