标题:
单片机驱动24*24点阵屏老是闪烁求大神帮忙
[打印本页]
作者:
鱼曦峯
时间:
2019-10-24 18:07
标题:
单片机驱动24*24点阵屏老是闪烁求大神帮忙
24*24点阵屏老是闪烁求大神帮忙,点阵屏采用三块128译码器和三块595
#include "kaijitu.h"
void InputTo595(u8 *displayBuff);
void OutputFrom595();
u8 code Math_1_1 [4][8]={{0x77,0xFF,0x07,0x0A,0x13,0x23,0x43,0x82},
{0x20,0x30,0x30,0x30,0x30,0x30,0x30,0xF0},
{0x00,0x00,0x00,0x00,0x00,0xC0,0xF0,0x30},
{0x00,0x00,0x00,0x80,0xC0,0xE0,0x70,0x98}
};
u8 code Math_1_2 [4][8]={{0x03,0x03,0x02,0x07,0x07,0x02,0x03,0x03},
{0xF0,0x60,0x00,0x00,0x80,0xC0,0x60,0x70},
{0x18,0x18,0x18,0x18,0x98,0x98,0x18,0x18},
{0xCC,0xC4,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0}
};
u8 code Math_1_3 [4][8]={{0x82,0x43,0x23,0x13,0x0A,0x07,0xFF,0x77},
{0x30,0x20,0x60,0xC0,0x80,0x00,0x00,0x00},
{0x18,0x18,0xF8,0xF8,0x00,0x00,0x00,0x00},
{0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x00}
};
u8 code Math_2_1 [4][8]={{0xDB,0xFF,0x18,0x00,0x00,0x00,0x00,0x00},
{0x00,0x00,0x00,0xC0,0xF0,0x7C,0x1F,0x07},
{0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0x00},
{0x0C,0x0E,0x47,0xC3,0xF1,0xF8,0xCC,0xCC}
};
u8 code Math_2_2 [4][8]={{0x81,0x42,0x24,0x18,0x18,0x24,0x42,0x81},
{0x03,0x78,0xFE,0x87,0x01,0x00,0x00,0x00},
{0x00,0x00,0x89,0x49,0x4F,0x4F,0x49,0x89},
{0xCC,0xCC,0xFF,0xFF,0xCE,0xCC,0xCC,0xCC}
};
u8 code Math_2_3 [4][8]={{0x00,0x00,0x00,0x00,0x00,0x18,0xFF,0xDB},
{0x00,0x00,0x00,0x00,0x01,0x03,0x86,0x7C},
{0x00,0x00,0xFF,0xFF,0x00,0x00,0x00,0x00},
{0xC4,0xC0,0xC0,0x40,0x00,0x00,0x00,0x00}
};
u8 code Math_3_1 [4][8]={{0xEE,0xFF,0xE0,0x50,0xC8,0xC4,0xC2,0x41},
{0x00,0x0C,0x0F,0x07,0x01,0x00,0x00,0x00},
{0x00,0x00,0x00,0x00,0x08,0x1F,0x3F,0x00},
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}
};
u8 code Math_3_2 [4][8]={{0xC0,0xC0,0x40,0xE0,0xE0,0x40,0xC0,0xC0}, //
{0x00,0x00,0x00,0x01,0x03,0x06,0x0C,0x18},
{0x00,0x00,0x03,0x04,0x04,0x04,0x04,0x03},
{0x00,0x00,0x7F,0x7F,0x00,0x00,0x00,0x00}
};
u8 code Math_3_3 [4][8]={{0x41,0xC2,0xC4,0xC8,0x50,0xE0,0xFF,0xEE},
{0x10,0x10,0x18,0x0C,0x06,0x03,0x01,0x00},
{0x08,0x18,0x3F,0x1F,0x00,0x00,0x00,0x00},
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}
};
void delay (u16 i)
{
while(i--);
}
void Hc595SendByte(u8 *dat)
{
u8 a,i;
SRCLK=0;
RCLK=0;
for(i=3;i>0;i--)
{
for(a=0;a<8;a++)
{
SER=dat[i-1]>>7;
dat[i-1]<<=1;
SRCLK=1;
_nop_();
_nop_();
SRCLK=0;
}
}
}
void out595 ()
{
RCLK=1;
_nop_();
_nop_();
RCLK=0;
}
//void Hc595SendByte(u8 dat)
//{
// u8 a;
// SRCLK=0;
// RCLK=0;
// for(a=0;a<8;a++)
// {
// SER=dat>>7;
// dat<<=1;
//
// SRCLK=1;
// _nop_();
// _nop_();
// SRCLK=0;
// }
//
// RCLK=1;
// _nop_();
// _nop_();
// RCLK=0;
//}
//致敬祖国
//爱我中华 普天同庆
//成立七十年 奋进新时代
//我和我的祖国
//祖国万岁
u8 displayBuff[3]={0,0,0};
void DigDisplay(u8 len0[4][8],u8 len1[4][8],u8 len2[4][8],u8 n)
{
u8 a;
for(a=0;a<8;a++)
{
displayBuff[0]=len0[1][a];
displayBuff[1]=len1[1][a];
displayBuff[2]=len2[1][a];
switch(a) //位选,选择点亮的数码管,
{
case(0):
LSA=0;LSB=0;LSC=0; break;//显示第0位
case(1):
LSA=1;LSB=0;LSC=0; break;//显示第1位
case(2):
LSA=0;LSB=1;LSC=0; break;//显示第2位
case(3):
LSA=1;LSB=1;LSC=0; break;//显示第3位
case(4):
LSA=0;LSB=0;LSC=1; break;//显示第4位
case(5):
LSA=1;LSB=0;LSC=1; break;//显示第5位
case(6):
LSA=0;LSB=1;LSC=1; break;//显示第6位
case(7):
LSA=1;LSB=1;LSC=1; break;//显示第7位
}
nun=1;
Hc595SendByte(displayBuff);//发送段码
out595 ();
nun=0;
delay(100);
out595 ();
// displayBuff[0]=0x00;
// displayBuff[1]=0x00;
// displayBuff[2]=0x00;
// Hc595SendByte(displayBuff);//发送段码
// out595 ();
// InputTo595(displayBuff);
// OutputFrom595();
// Hc595SendByte(len[n][i]);//发送段码
// delay(100); //间隔一段时间扫描
// Hc595SendByte(0x00);//消隐
}
}
void InputTo595(u8 *displayBuff)
{
u8 i, j;
for (j = 3; j > 0; j--)
{
for (i = 0; i < 8; i++)
{
SER = displayBuff[j - 1] & 0x01 ; //先输入最低位
displayBuff[j - 1] >>= 1;
SRCLK = 0;
_nop_();
SRCLK = 1; //上升沿,输入到移位寄存器
}
}
}
void OutputFrom595() //595输出
{
RCLK= 0;
_nop_();
RCLK= 1;
RCLK= 0;
}
//void In_1_1 (u8 php)
//{
// k1=1;
// k2=0;
// k3=0;
//
// k4=0;
// k5=1;
// k6=1;
// DigDisplay(Math_1_1,php);
//}
//
//void In_1_2 (u8 php)
//{
// k1=0;
// k2=1;
// k3=0;
//
// k4=0;
// k5=1;
// k6=1;
// DigDisplay(Math_1_2,php);
//
//}
//
//void In_1_3 (u8 php)
//{
// k1=0;
// k2=0;
// k3=1;
//
// k4=0;
// k5=1;
// k6=1;
// DigDisplay(Math_1_3,php);
//}
//void In_2_1 (u8 php)
//{
// k1=1;
// k2=0;
// k3=0;
//
// k4=1;
// k5=0;
// k6=1;
// DigDisplay(Math_2_1,php);
//}
//
//void In_2_2 (u8 php)
//{
// k1=0;
// k2=1;
// k3=0;
//
// k4=1;
// k5=0;
// k6=1;
// DigDisplay(Math_2_2,php);
//}
//
//void In_2_3 (u8 php)
//{
// k1=0;
// k2=0;
// k3=1;
//
// k4=1;
// k5=0;
// k6=1;
// DigDisplay(Math_2_3,php);
//}
//
//void In_3_1 (u8 php)
//{
// k1=1;
// k2=0;
// k3=0;
//
// k4=1;
// k5=1;
// k6=0;
// DigDisplay(Math_3_1,php);
//}
//
//void In_3_2 (u8 php)
//{
// k1=0;
// k2=1;
// k3=0;
//
// k4=1;
// k5=1;
// k6=0;
// DigDisplay(Math_3_2,php);
//}
//
//void In_3_3 (u8 php)
//{
// k1=0;
// k2=0;
// k3=1;
//
// k4=1;
// k5=1;
// k6=0;
// DigDisplay(Math_3_3,php);
//}
//
//void xiaoyin ()
//{
// k1=0;
// k2=0;
// k3=0;
// k4=1;
// k5=1;
// k6=1;
//}
void kaijidonghua()
{
u8 lat,x;
u16 i;
while(1)
{
// In_1_1 (lat);
//
//
// In_2_1 (lat);
//
// In_3_1 (lat);
//
//
//
// In_1_2 (lat);
//
// In_2_2 (lat);
//
// In_3_2 (lat);
//
//
//
//
//
// In_1_3 (lat);
//
// In_2_3 (lat);
//
// In_3_3 (lat);
for(x=0;i<3;x++)
{
switch(x)
{
case(0): k1=1;k2=0;k3=0;DigDisplay(Math_1_1,Math_2_1,Math_3_1,0); break;
case(1): k1=0;k2=1;k3=0;DigDisplay(Math_1_2,Math_2_2,Math_3_2,0); break;
case(2): k1=0;k2=0;k3=1;DigDisplay(Math_1_3,Math_2_3,Math_3_3,0); break;
}
}
// DigDisplay(Math_1_1,Math_2_1,Math_3_1,0);
// i++;
// if(i>50)
// {
// i=0;
// lat++;
// if(lat>3)
// {
// lat=0;
// }
//
// }
}
}
复制代码
作者:
Laplacey
时间:
2019-10-25 10:47
什么叫闪烁?
是一直闪着不进main函数吗
还是说你这个开机动画是三次闪烁就过了
请把问题描述清楚
作者:
yzwzfyz
时间:
2019-10-25 16:38
是你对扫描显示的时序构思不合理。
作者:
cphnkj188
时间:
2019-10-26 14:32
可能有两方面:1,供电不足
2,动态扫描时间不对或者没有消隐
作者:
hulilanyua
时间:
2019-10-26 21:18
刚好在研究16*48点阵屏,显示3个汉字,24*24点阵屏有什么特别用途
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1