单片机点阵移动怎么编

单片机点阵中比如说一个字向右移该怎么编码,不会是一个一个拼吧?还有为什么我一个一个拼出来之后右移过程中左边有阴影?谢谢,下边是程序,该怎么改?#include<reg51... 单片机点阵中比如说一个字向右移该怎么编码,不会是一个一个拼吧?还有为什么我一个一个拼出来之后右移过程中左边有阴影?谢谢,下边是程序,该怎么改?
#include<reg51.h>
unsigned char code tab[]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe,}; //列选通控制
unsigned char code digittab[9][8]={
{0x3e,0x41,0x41,0x41,0x3e,0x00,0x00,0x00}, //0 8行,
{0x00,0x3e,0x41,0x41,0x41,0x3e,0x00,0x00},
{0x00,0x00,0x3e,0x41,0x41,0x41,0x3e,0x00},
{0x00,0x00,0x00,0x3e,0x41,0x41,0x41,0x3e},
{0x00,0x00,0x00,0x00,0x3e,0x41,0x41,0x41},
{0x00,0x00,0x00,0x00,0x00,0x3e,0x41,0x41},
{0x00,0x00,0x00,0x00,0x00,0x00,0x3e,0x41},
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3e},
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}
};
unsigned char tt=0;
void delay()
{int m,n;
for(m=20;m>0;m--)
for(n=15;n>0;n--);}
void delay_50ms()
{
int m;
for(m=50000;m>0;m--);
}
unsigned char i,j=0; //i定义列,j定义行
void main(void)
{
while(1)
{
for(i=0;i<8;i++)
{

P1=0xFF; //绿列选通都关闭掉
P2=tab[i]; // 列线
P0=digittab[j][i]; // 行线
delay(); //扫描时间
}
i=0;
tt++;
delay_50ms();
if(tt==20) //间隔1s变化字符
{
tt=0;
j++;
if(j==9)
j=0;

}
}
}
主要是阴影怎么解决?谢谢
展开
 我来答
意法半导体(中国)投资有限公司 2020-01-15
展开全部
单片机(Microcontrollers)是一种集成电路芯片,是采用超大规模集成电路技术把具有数据处理能力的中央处理器CPU、随机存储器RAM、只读存储器ROM、多种I/O口和中断系统、定时器/计数器等功能(可能还包括显示驱动电路、脉宽调制电路、模拟多路转换器、A/D转换器等电路)集成到一块硅片上构成的一个小而完善的微型计算机系统,在工业控制领域广泛应用。从上世纪80年代,由当时的4位、8位单片机,发展到现在的300M的高速单片机。
做而论道
高能答主

推荐于2017-10-05 · 把复杂的事情简单说给你听
知道大有可为答主
回答量:3.1万
采纳率:82%
帮助的人:8426万
展开全部
试试如下修改:

#include<reg51.h>
unsigned char code tab[] = {0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe};//列选通控制
unsigned char code digittab[9][8] = {
{0x3e,0x41,0x41,0x41,0x3e,0x00,0x00,0x00}, //0 8行,
{0x00,0x3e,0x41,0x41,0x41,0x3e,0x00,0x00},
{0x00,0x00,0x3e,0x41,0x41,0x41,0x3e,0x00},
{0x00,0x00,0x00,0x3e,0x41,0x41,0x41,0x3e},
{0x00,0x00,0x00,0x00,0x3e,0x41,0x41,0x41},
{0x00,0x00,0x00,0x00,0x00,0x3e,0x41,0x41},
{0x00,0x00,0x00,0x00,0x00,0x00,0x3e,0x41},
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3e},
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}};

unsigned char tt=0;

void delay()
{
int m, n;
for(m = 20; m > 0; m--) for(n = 15; n > 0; n--);
}

void Disp(unsigned char j)
{
unsigned char i; //i定义列,j定义行
for(i = 0; i < 8; i++) {
P0 = digittab[j][i]; // 行线
P2 = tab[i]; delay(); P2 = 0xff; // 列线, 扫描时间
}
}

void main(void)
{
unsigned char i, j;
while(1) {
for(i = 0; i < 10; i++) Disp(j);
j++;
if(j == 9) j = 0;
}
}
意法半导体(中国)投资有限公司
2020-01-15 广告
单片机(Microcontrollers)是一种集成电路芯片,是采用超大规模集成电路技术把具有数据处理能力的中央处理器CPU、随机存储器RAM、只读存储器ROM、多种I/O口和中断系统、定时器/计数器等功能(可能还包括显示驱动电路、脉宽调制... 点击进入详情页
本回答由意法半导体(中国)投资有限公司提供
李德斌55
2013-10-11
知道答主
回答量:45
采纳率:0%
帮助的人:14.2万
展开全部
点阵不就是动态扫描吗?利用发光led余辉和人视觉的暂留作用!动态要比静态的要差一些!所以你应该修改一下你的间隔时间!if(t==20)把值改一下看下效果。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
没味鞋
2013-10-10 · 超过22用户采纳过TA的回答
知道答主
回答量:106
采纳率:0%
帮助的人:48.4万
展开全部
你的扫描时间有点长啊,搞小点试试
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式