51单片机点阵,问题在于为什么date必须是char型?

2019-07-15 15:37发布

#include<reg51.h>
#include<intrins.h>
#defineuintunsignedint
#defineucharunsignedchar
sbitRCLK=P3^5;
sbitSRCLK=P3^6;
sbitSER=P3^4;
ucharledduan[]={0x00,0x00,0x7E,0x81,0x81,0x81,0x7E,0x00};
ucharledwei[]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe};
voiddelay(uintz);
voidHC595(uchardate)  //date必须是char型
{
  uinta;
SRCLK=0;
  RCLK=0;   
  for(a=0;a<8;a++)
  {
    SER=date>>7;
    date<<=1;              
    SRCLK=1;
    SRCLK=0;
  }
  RCLK=1;
  
  RCLK=0;
}
voidmain()
{
    P0=0x7f;
  while(1)
  {    uchari=0;
  
    for(i=0;i<8;i++)
    {        
      P0=ledwei;
      HC595(ledduan);
      delay(1);
      HC595(0x00);
      }
    }
  
  }
                        
voiddelay(uintz)
{
    uintx,y;
    for(x=z;x>0;x--)
          for(y=100;y>0;y--);
}
问题在于为什么date必须是char型?是int型的话点阵就无法成功显示0
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
11条回答
CKEAI
2019-07-16 20:10
人中狼 发表于 2018-7-19 14:23
移位方面8位和16位或者再多位也是一样的,只要这些数据的低8位是一样的就没有区别,SER是引脚,是一个位,C里面会把数据里的最低位赋值给SER,所以只要是移位位数范围内的数据是一样的,就没有问题。
调用函数时的参数数据类型如果与函数定义时的参数类型不一致的话,编译时应该会报错或报警告的 ...

调试是没有出现警告的
刚开始移7位 8位 32位是没区别的 但是带上for循环和后面的左移 8位和32 位是有区别的 可以找个数在for循环里试一下

一周热门 更多>