本帖最后由 xzf586 于 2017-9-21 19:48 编辑
什么地方问题?:lo
#include <REG51.H>
//--重定义函数变量--//
#define uchar unsigned char
//--定义SPI要使用的 IO--//
sbit MOSIO = P3^4;
sbit R_CLK = P3^5;
sbit S_CLK = P3^6;
//点阵显示数组
uchar code tab0[] = {
0x00, 0x01, 0x00, 0x02, 0x00, 0x04, 0x00, 0x08, 0x00, 0x10, 0x00, 0x20, 0x00, 0x40, 0x00, 0x80,//1-8行
0x01, 0x00, 0x02, 0x00, 0x04, 0x00, 0x08, 0x00, 0x10, 0x00, 0x20, 0x00, 0x40, 0x00, 0x80, 0x00 //9-16行
};
uchar code tab[] =
{
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,8,254,31,16,2,16,2,16,2,16,18,255,63,16,2,16,2,16,2,16,2,8,2,4,2,3,2,0,0,0,0, //开
32,2,36,4,36,4,34,16,254,63,32,0,224,15,80,8,80,4,136,2,8,1,132,2,98,60,29,16,0,0,0,0, //发
4,8,4,30,196,1,95,0,196,15,68,8,78,9,86,9,69,5,69,5,68,2,36,5,164,56,84,16,0,0,0,0, //板
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
};
uchar distab[32];
uchar index=0;
void HC595MoveData(uchar dat)
{
uchar i;
for(i=0;i<8;i++)
{
MOSIO = dat >> 7 ;
dat <<= 1;
S_CLK = 0;
S_CLK = 1;
}
}
void HC595SendData(uchar DuanU17, uchar DuanU16,uchar WeiU5,uchar WeiU4)
{
HC595MoveData(DuanU17);
HC595MoveData(DuanU16);
HC595MoveData(WeiU5);
HC595MoveData(WeiU4);
R_CLK = 0;
R_CLK = 1; //--输出--//
R_CLK = 0;
}
void DisplayOneChar(uchar TAB[32])
{
int k, i, ms;
i =40; //显示时间
for(ms = i; ms > 0; ms--)
{
for(k = 0; k < 16; k++)
{
HC595SendData(~TAB[2*k +1],~TAB[2*k],tab0[2*k],tab0[2*k + 1];
}
}
HC595SendData(0xff,0xff,0,0); //清屏
}
void MoveUp()
{
uchar i;
for(i=0;i<32;i++)
{
distab=tab[(i+2*index)];
}
DisplayOneChar(distab);
}
void MoveDown()
{
uchar i;
for(i=0;i<32;i++)
{
distab=tab[(128+i-2*index)];
}
DisplayOneChar(distab);
}
/*************主函数*****************************/
void main(void)
{
while(1)
{
HC595SendData(0xff,0xff,0,0); //清屏
for(index=0;index<64;index++)
MoveUp();
for(index=0;index<64;index++)
MoveDown();
}
}
设计思想还是删除,请自己考虑,适用于开发板HC6800-EM3
|