标题: 不知道为啥 用单片机+74hc595不会出问题 直接用端口就会出问题 求大佬帮忙看看 [打印本页]

作者: 雪峰1259    时间: 2020-5-25 10:06
标题: 不知道为啥 用单片机+74hc595不会出问题 直接用端口就会出问题 求大佬帮忙看看
  1. #include<reg52.h>
  2. #include<intrins.h>
  3. #define uchar unsigned char
  4. #define uint unsigned int

  5. uchar  hanzi[9][8]={
  6.                   { 0xC3,0xc3,0xc3,0xc3,0x42,0x42,0x24,0x24 },    //其他
  7.                   /*              {0xC0,0xBF,0x7D,0xBB,0x3E,0xA0,0xBF,0x9D},          //你
  8.                                    {0xF7,0xEF,0xDF,0xBF,0x00,0xBF,0xDF,0xEF},          //个
  9.                                    {0xC7,0xBB,0x2D,0xBC,0xBC,0x2D,0x9B,0xC7},          //符号1
  10.                                    {0x00,0x7E,0x7E,0x7E,0x7E,0x7E,0x7E,0x00},          //符号2
  11.                                    {0xFF,0x81,0xBD,0xBD,0xBD,0xBD,0x81,0xFF},          //符号3
  12.                                    {0xFF,0xFF,0xC3,0xDB,0xDB,0xC3,0xFF,0xFF},          //符号4
  13.                                    {0xFF,0xFF,0xFF,0xE7,0xE7,0xFF,0xFF,0xFF},          //符号5
  14.                                         {0x7E,0xBD,0xDB,0xE7,0xE7,0xDB,0xB9,0x7E}      //结束            */                                                                 
  15.                                    },
  16.                 lie[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};                  
  17. /*void delay( int c) //延迟函数

  18. int x,y;
  19. for(x=0;x<c;x++)
  20. {
  21.   for(y=110;y>0;y--);
  22. }
  23.   */
  24. void main()
  25. {           
  26. void delay( int c);
  27. int a,b,c,d;
  28. while(1){

  29.           P1=0x80;
  30.          for(a=0;a<9;a++)  

  31.         {for(c=0;c<2000;c++)        {
  32.          for(b=0;b<8;b++)
  33.          {           
  34.          
  35.          P0=hanzi[0][b];
  36.          P1=_cror_(P1,1);         
  37.         }         
  38.          }                          
  39.          }
  40.                    }
  41.           }
复制代码



                        不知道为啥 用595不会出问题 直接用端口就会出问题 求大佬看看
作者: man1234567    时间: 2020-5-25 10:19
74HC595是一个8位串行输入、并行输出的位移缓存器:并行输出为三态输出。在SCK 的上升沿,串行数据由SDL输入到内部的8位位移缓存器,并由Q7'输出,而并行输出则是在LCK的上升沿将在8位位移缓存器的数据存入到8位并行输出缓存器。当串行数据输入端OE的控制信号为低使能时,并行输出端的输出值等于并行输出缓存器所存储的值。
所以595在没有新的数据刷新时可以保持的
作者: wulin    时间: 2020-5-25 10:48
这是仿真软件的缺陷,不是程序问题,高速动态扫描无法得到预想效果。
作者: xuyaqi    时间: 2020-5-25 11:31
用 P0 P1 口点亮 8x8 led点阵
/* 用 P0 P1 口点亮 8x8 led点阵
   P1  位选
   P0  段选
*/
#include<reg52.h>

typedef unsigned char u8;
typedef unsigned int u16;

hanzi[]={0xC3,0xc3,0xc3,0xc3,0x42,0x42,0x24,0x24};    //
lie[]  ={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};

void main()
{           
       
        while(1)
        {
                u8 i;
               
                for(i=0;i<8;i++)
                {
                        P1=~lie[i];//位选
                        P0=hanzi[i];//段选
                }
        }
}
作者: 雪峰1259    时间: 2020-5-25 14:51
wulin 发表于 2020-5-25 10:48
这是仿真软件的缺陷,不是程序问题,高速动态扫描无法得到预想效果。

哦哦 我又对着书写一遍一摸一样的程序 还是有问题 就感觉很奇怪  现在知道了 多谢
作者: 雪峰1259    时间: 2020-5-25 14:59
xuyaqi 发表于 2020-5-25 11:31
用 P0 P1 口点亮 8x8 led点阵
/* 用 P0 P1 口点亮 8x8 led点阵
   P1  位选

                  #include<reg52.h>

typedef unsigned char u8;
typedef unsigned int u16;

hanzi[]={0xC3,0xc3,0xc3,0xc3,0x42,0x42,0x24,0x24};    //
lie[]  ={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};

void main()
{           
      
        while(1)
        {
                u8 i;
                                u16 j;
               
                for(i=0;i<8;i++)
                {        /*  for(j=0;j<500;j++)*/
                                
                        P1=~lie[ i];//位选
                        P0=hanzi[ i];//段选
               
        }                }
}
不行 用仿真直接全亮 我加个延迟循环 也是一闪一闪的 显示内容也不对 仿真不行




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