求助啊,这个程序是为了滚动8*8的点阵,但是总是报警告。。。
真的找不到错误的地方了。。。
新手哭求帮助~~~~
这个是警告的显示:
#include "INTRINS.H"
#include "REG52.H"
typedef unsigned char u8;
sbit shuru=P3^4; //定义串型输入端口为shuru
sbit weiyi=P3^6; //定义时钟位移寄存器时钟输入为weiyi
sbit shuchu=P3^5; //定义储存寄存器时钟输入为shuchu
#define kongzhi P0 //定义P0口为kongzhi
u8 b[];
u8 c[];
char p0de[]={0xFF,0xF7,0xF7,0xF7,0xF7,0xF7,0xF7,0xFF,0xFF,0xC1,0xEF,0xF7,0xFB,0xFD,0xC1,0xFF,0xFF,0xC1,0xEF,0xF7,0xFB,0xF7,0xEF,0xC1}; //我是选择的横向取模,因为控制P0容易点,再其次就是P0口是需要低电平才能让二极管通,所以需要再反相一次
char d0de[]={0x80,0x40,0x20,0x10,0x08,0x04,0x02,0x01}; //这里只要让D0循环开始从上到下依次扫描就好
int f; //定义全局变量f,f是8位循环扫描和取模用的
int h; //定义全局变量h,h是延迟函数用的
int j;
int i;
void yanchi(int h) //延迟函数
{
for(;h--;){}
}
void hc595(u8 a) //595的储存和输出函数
{ int q;
for(q=0;q<8;q++) //循环8次,每次让1位存储到寄存器中
{
shuru=a>>7; //shuru=a向右位移7次,这对于a本身没影响
//比方:1001 1001向右位移7位就是0000 0001,下面的位移这个1到寄存器
a<<=1; //改变a的值,让a向左移动1位。比方:1001 1001向左位移1位就是0011 0010。下一次再位移7次就是输入次高位了。
weiyi=1; //位移开始,产生一个上升沿
_nop_(); //延迟函数
_nop_();
weiyi=0; //位移结束,归零,方便下一次产生上升沿
}
shuchu=1; //循环结束后,8位都位移到了寄存器中,这时就让储存寄存器时钟输入产生一个上升沿,开始把接收到的8位信号对外输出
_nop_(); //延迟函数
_nop_();
shuchu=0; //输出结束,归零,方便下一次产生上升沿
//调用P0口的函数
}
void yidong(int x,int y)
{
kongzhi=x<<i+y>>(8-i);
hc595(d0de[f]);
yanchi(100);
kongzhi=0xff;
}
void yunsuan()
{
for(j=0;1;j++)
{
for(f=0;f<8;f++)
{
b[f]=p0de[f+8*j];
c[f]=p0de[8+f+8*j];
}
for(i=0;i<8;i++)
{
for(f=0;f<8;f++)
{
yidong(b[f],c[f]);
}
}
}
}
void main()
{ weiyi=0; //归零
shuchu=0; //归零
for(;1;)
{
yunsuan();
}
}