微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 关于8X8点阵的多字符移动。下面是我的protel和静态字符代...

关于8X8点阵的多字符移动。下面是我的protel和静态字符代...

时间:10-02 整理:3721RD 点击:
求来个牛人帮我改改程序使我的8X8点阵能实现多字符移动显示。比如由“1”到“9”依次循环从点阵的右边移动到左边。求大神帮我改程序将“木”和“夕”这两个字一次从右边到左边循环移动显示。
静态显示代码如下:
#include <reg52.H>
#include<intrins.h>
#define uint unsigned int
#define uchar unsigned char
//  "木"                 
   //unsigned char code tabP0[]={0x40,0x24,0x14,0xff,0x14,0x24,0x40,0x00};
  //unsigned char code tabP2[]={0x7F,0xBF,0x0DF,0x0EF,0x0F7,0x0FB,0x0FD,0x0FE};
  //"夕''
   //unsigned char code tabP0[]={0x0c,0x14,0x25,0x56,0x8c,0x88,0x90,0x80};
  // unsigned char code tabP2[]={0x7F,0xBF,0x0DF,0x0EF,0x0F7,0x0FB,0x0FD,0x0FE};
/********************************************************************
* 名称 : Delay_1ms()
* 功能 : 延时子程序,延时时间为 1ms * x
* 输入 : x (延时一毫秒的个数)
* 输出 : 无
***********************************************************************/
void Delay_1ms(uchar i)//1ms延时
{
uchar x,j;
for(j=0;j<i;j++)
for(x=0;x<=148;x++);
}
void main()
{
int i;
while(1)
{
  for(i=0;i<8;i++)
  {
  P0=0;
   P2=tabP2[i];
   P0=tabP0[i];
   Delay_1ms(2);
  }  
}
}

原理图




我有汇编的程序,要不要嘛

你的程序太简单了

表示我也在看8*8点阵,也是迷糊在滚动这里。不过我知道如何单个字符滚动,此时此刻这来论坛找资料看到了你的帖子,来发表一下看法啦。
这是正在写的程序:
#include<reg51.h>
#include<intrins.h>
unsigned char code tab[]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe,};  //列选通控制                         
unsigned char code digittab[1][8]={
{0x1C,0x22,0x40,0x40,0x40,0x40,0x22,0x1C},//字母C
};
unsigned int timecount1 , timecount2;  //定义的变量
unsigned int i=0;
unsigned char cnt_lie , cnt_hang ;         //cnt_lie列控制数的变量   cnt_hang用来控制 字符与字符之间的切换
unsigned char count=0;
void delay()
{
        int x,y;
        for(x=0 ; x<5 ; x++)
                for(y=0 ; y<10 ; y++);
}
void Display(void)
{
  

                  
                P1=0xFF;  //红色的列选通都关闭掉
               
                P1=tab[cnt_lie];   // 列线
                P0= _crol_(digittab[cnt_hang][cnt_lie],i) ;         // 行线
                delay();
       
                 //用于控制动态扫描的速度
        if(++timecount1>=20)
        {
                timecount1=0;
                if(++cnt_lie==8) cnt_lie=0;
        }  
}
void InitTimer1(void)                   //50毫秒定时器
{
    TMOD = 0x10;
    TH1 = 0x3C;
    TL1 = 0x0B0;
    EA = 1;
    ET1 = 1;
    TR1 = 1;
}
void main(void)
{        InitTimer1();
        while(1)
        {  
                Display();
        }
}
void Timer1Interrupt(void) interrupt 3
{
    TH1 = 0x3C;
    TL1 = 0x0B0;
    //add your code here!
        if(++count>=5)
        {
                count=0;
                i++;
                if(i>=8)        i=0;
        }
}

不错的资料,值得分享

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

网站地图

Top