微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 16x64点阵 移动会闪烁

16x64点阵 移动会闪烁

时间:10-02 整理:3721RD 点击:
用了51单片机,买了个二手点阵屏,16*64的
在移动的过程中,字体会闪烁,觉得是扫描的问题,但我不知道我扫描速度是多少,不知道频率多大的
晶振用的是12MHz的,在网上看到资料说,对于51来说,22MHz的晶振正好扫描后不闪烁
不知道是不是这样的。怎么计算我的点阵扫描频率或者扫描一行的时间呢?

你可以用示波器查看一下,看脉冲的间隔时间。
当然也可以计算自己的程序分频的频率。
或者你在执行的过程中是不是有别的中断进入的呢?
防止太长时间的中断进入你的扫描程序。

我试着把晶振换大点

STC的51单片机如果是单倍速12M是会闪烁的。要调到 6T双倍速  ,然后就非常清晰了。因为这时候内部时钟频率是24MHZ  。倍频了》》》   下载软件STC-ISP那里设置的

小编,江湖救急啊 !    我的邮箱,519828247@qq.com
6*16点阵,现象是字移动到一半的点阵就消失了,到另一半点阵又出现了,而不是走完整个点阵?
还有点阵的移动函数怎么理解?希望能举个简单例子,然后详细地讲解,谢谢!
对了,k是第几个字,2个138和2个595
#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit r=P2^0;
sbit clk=P2^1;
sbit stb=P2^2;

uchar code table[3][32]={
{0x04,0x80,0x04,0x80,0x08,0x80,0x08,0x80,
0x10,0x84,0x20,0x84,0x40,0x7C,0x80,0x00,
0x00,0x00,0x3F,0xF0,0x02,0x00,0x02,0x00,
0x02,0x00,0x02,0x00,0x7F,0xFC,0x04,0x80,},  //无
{0x40,0x44,0xFC,0x48,0x40,0x30,0x00,0x22,
0x1C,0x52,0xE0,0x8A,0x43,0x06,0x00,0x02,
0x10,0x50,0x10,0x48,0x20,0x40,0x24,0x5C, //        线
0x45,0xE0,0xF8,0x40,0x10,0x5E,0x23,0xE0,},
{0x21,0x08,0x21,0x08,0x21,0x08,0x3F,0xF8,
0x21,0x0A,0x01,0x02,0x01,0x02,0x00,0xFE,
0x01,0x00,0x01,0x00,0x01,0x00,0x3F,0xF8,
0x21,0x08,0x21,0x08,0x21,0x08,0x3F,0xF8,}
};                                                                                                
void writebyte(uchar dat)
{
uchar i;
for(i=0;i<8;i++)
        {
        dat=dat>>1;
        r=CY;
        clk=0;
        clk=1;
        }
}
void senddata()
{
stb=0;
stb=1;
}
void main()
{
uchar num,i,j,k;
while(1)
        {
for(k=1;k<3;k++)
        {                  
        for(i=0;i<16;i++)                                //移动一个字
                {
                        for(j=0;j<20;j++)
                                {
                                                for(num=0;num<16;num++)         //移动一位
                                                {
                                                 if(i<8)
                                                   {
                                                        writebyte(((table[k][2*num]>>(8-i))|(table[k][2*num+1]<<i)));
                                                        writebyte(((table[k-1][2*num+1]>>(8-i))|(table[k-1][2*num]<<i)));
                                                        senddata();
                                                        }
                                                else
                                                        {
                                                        writebyte(((table[k][2*num+1]>>(16-i))|(table[k][2*num]<<(i-8))));
                                                        writebyte(((table[k-1][2*num]>>(16-i))|(table[k-1][2*num+1]<<(i-8))));
                                                        senddata();                                       
                                                        }
                                                P1=num;
                                                }
                                }                                
                }
                }                                 

        }
}

扫描频率不够高吧!

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top