标题:
单片机16*64的点阵屏程序 为什么滚动显示的时候会有重影 求帮助
[打印本页]
作者:
835750102
时间:
2021-4-13 06:12
标题:
单片机16*64的点阵屏程序 为什么滚动显示的时候会有重影 求帮助
#include<reg51.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
uchar code num[4][32]={ {0xFE,0xFF,0xFE,0xFB,0x00,0x01,0xFE,0xFF,0xFD,0xFF,0xC0,0x03,0xDB,0xDB,0xDD,0xBB,0xD0,0x0B,0xDE,0xFB,0xC0, 0x03,0xDE,0xFB,0xDE,0xFB,0xDE,0xEB,0xDE,0xF7,0xFF,0xFF},/*"南",0*/
{0xFD,0xFF,0xFE,0xF7,0x80,0x03,0xFF,0xFF,0xFF,0xFF,0xE0,0x0F,0xEF,0xEF,0xEF,0xEF,0xE0,0x0F,0xFE,0xFF,0xF6, 0xCF,0xE6,0xE7,0xCE,0xF3,0xBE,0xF7,0xFA,0xFF,0xFD,0xFF},/*"京",1*/
{0xFF,0xFF,0xC0,0x03,0xFE,0xFF,0xFE,0xFF,0xFE,0xFF,0xFE,0xFF,0xFE,0xFF,0xFE,0xFF,0xFE,0xFF,0xFE,0xFF,0xFE, 0xFF,0xFE,0xFF,0xFE,0xFF,0x00,0x01,0xFF,0xFF,0xFF,0xFF},/*"工",2*/
{0xF2,0x07,0x8E,0xF7,0xEE,0xF7,0xEE,0xF7,0x02,0xF7,0xEE,0x07,0xCF,0xFF,0xC4,0x03,0xAB,0xBF,0xAF,0xBF,0x6C, 0x03,0xEF,0xBF,0xEF,0xBF,0xEF,0xBF,0xE8,0x01,0xEF,0xFF}/*"程",3*/
};
uchar idatanum_temp[16][8]; //数据缓存,用于移位
uchar b[8]; //16*16点阵,每次发送1个字节。用b[8]保存
int n1=0;
uchar zuoyou=0;
uchar hanzi;
sbit EN=P1^0; //74hc154的使能端
sbit A_R=P2^0; //A B C D每位数据对应于74hc154的4个数据口
sbit B_R=P2^1;
sbit C_R=P2^2;
sbit D_R=P2^3;
sbit RST_C=P1^1; //74hc595的复位口
sbit DATA_C=P3^2; //串行数据口
sbit SRC_C=P3^3; //74hc595的寄存器时钟线
sbit SLC_C=P3^4; //74hc595的锁存器的时钟线
/*************************************
函数功能:延时程序
**************************************/
void delay(int i)
{
int a;
for(a=0;a<i;a++);
}
/**************************************************************
函数功能: 595在SLC上升沿的时候并行输出到寄存器下的8位数据
入口参数:无
返回值 :无
**************************************************************/
void SLC_595()
{
SLC_C=0;
SLC_C=1;
SLC_C=0;
}
/**************************************************************
函数功能:往num_temp[16][8]暂存器下存储数据 16对应着16个字节
*************************************************************/
void hanziku()
{
int i,j=0,k;
for(i=0;i<16;i++){
b[0]=num[0][j];b[2]=num[1][j];b[4]=num[2][j];b[6]=num[3][j];
j++;
b[1]=num[0][j];b[3]=num[1][j];b[5]=num[2][j];b[7]=num[3][j];
j++;
for(k=7;k>=0;k--){
num_temp[i][k]=b[k]; [/i][i]
}
}
}
/*******************************************************************
函数功能: 595输出列向的数据64个(8位为一字节,那就是8字节的数据)
入口参数: 无
返回值 :无
*******************************************************************/
//右移
void column_zuoyi(int n)
{
int i,j,e=0,f;
uchar a1,b1;
for(i=7;i>=0;i--){
f=e;
e=num_temp[n][i]&0x80;[/i][i]
num_temp[n][i]<<=1;[/i][i]
if(f){
num_temp[n][i]=num_temp[n][i]+0x01;[/i][/i][i][i]
}
b1=num_temp[n][i];[/i][i]
for(j=0;j<8;j++){
a1=0x01;
SRC_C=0;
DATA_C=b1&a1;
b1>>=1;
SRC_C=1;
}
}
}
//左移
void column_youyi(int n)
{
int i,j,e=0,f;
uchar a1,b1;
for(i=7;i>=0;i--){
if(i!=0)
{
f=num_temp[n][i-1]&0x01;
}
else
{
f=0;
}
num_temp[n][i]>>=1;[/i][i]
if(f)
{
num_temp[n][i]=num_temp[n][i]+0x80;[/i][/i][i][i]
}
b1=num_temp[n][i];[/i][i]
for(j=0;j<8;j++){
a1=0x01;
SRC_C=0;
DATA_C=b1&a1;
b1>>=1;
SRC_C=1;
}
}
}
//静止
void column_stop(int n)
{
int i,j;
uchar a1,b1;
for(i=7;i>=0;i--){
b1=num_temp[n][i];[/i][i]
for(j=0;j<8;j++){
a1=0x01;
SRC_C=0;
DATA_C=b1&a1;
b1>>=1;
SRC_C=1;
}
}
}
/**********************************************
函数功能:行扫描程序,16次为1个周期,利用154的译码器
入口参数:无
返回值: 无
***********************************************/
void column_16()
{
int i,j=0;
char temp=0x00;
//这里输入行数据en打开
n1++;
//对应16行数据
for(i=0;i<16;i++)
{
switch(zuoyou)
{
case 0:
if(hanzi==0)
{
hanziku();
}
hanzi++;
column_stop(i);
break;
case 1:
column_zuoyi(i);
hanzi=0;
break;
case 2:
if(hanzi==0)
{
hanziku();
}
hanzi++;
column_stop(i);
break;
case 3:
column_youyi(i);
hanzi=0;
break;
}
if(n1==70)
{
n1=0;
zuoyou++;
if(zuoyou==4)
{
zuoyou=0;
}
}
EN=0;
//每一行的数据
P2=temp++; //P2从0000开始到1111
SLC_595();
}
}
int main()
{
int i=0;
EN=1; //154使能端关上
SRC_C=0; //595初始化
SLC_C=0;
hanziku(); //初始化汉字库
while(1){
column_16();
delay(5);
EN=1;
}
}
复制代码
作者:
xianfajushi
时间:
2021-4-13 08:16
需要消隐处理,同数码管需要消隐一样道理。
作者:
人人学会单片机
时间:
2021-4-13 09:16
数据发送到595后,先关闭ABCD,然后再让595输出数据到点阵LED。其实单独用595也可以驱动,可以参考我的贴子
作者:
蓝色弹珠
时间:
2021-4-13 09:30
在显示下一次数据前,把数据口清空
作者:
835750102
时间:
2021-4-13 15:58
人人学会单片机 发表于 2021-4-13 09:16
数据发送到595后,先关闭ABCD,然后再让595输出数据到点阵LED。其实单独用595也可以驱动,可以参考我的贴子
大佬 参考你哪个帖子
作者:
835750102
时间:
2021-4-13 17:32
具体应该怎么改代码 求帮助
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1