专注电子技术学习与研究
当前位置:单片机教程网 >> MCU设计实例 >> 浏览文章

16×16点阵滚动显示汉字c51程序

作者:佚名   来源:本站原创   点击数:  更新时间:2008年10月26日   【字体:


给大家共享一个51单片机驱动的16×16点阵滚动显示汉字的程序,是公车上用的。
 

下载源代码

#include < reg52.h>

#define int8 unsigned char
#define int16 unsigned int
#define int32 unsigned long

int8 flag;
int8 n;
int8 code table[][32]={

欢迎您乘坐广州三汽公司公共汽车大学城2线开往大学城请您坐好扶稳
具体的字码省略,请点此处下载本列16×16点阵汉字滚动显示源代码
                      };

void delay(void);
int16 offset;

void main(void)
{
    int8 i;
    int8 *p;
    flag=0x10;
    n=0;
    TMOD=0x01;
    TH0=0xb1;
    TL0=0xe0;
    ET0=1;
    EA=1;
    TR0=1;

    p=&table[0][0];

    while (1)
    {
        for (i=0;i<8;i++)    //显示左半边屏幕
        {
            P0=*(p+offset+2*i);
            P2=i|0x08;    //P2.4=0,P2.3=1 选中U2, 输出扫描码给U6
            delay();

            P0=*(p+offset+2*i+1);
              P2=i|0x10;   //P2.4=1,P2.3=0 选中U3, 输出扫描码给U7
            delay();
        }
        for (i=8;i<16;i++)     //显示右半边屏幕
        {
            P0=*(p+offset+2*i);
             P2=(i-8)|0x20;   //P2.5=1 P2.4=0, P2.3=0 选中U4,输出扫描码U8
            delay();

            P0=*(p+offset+2*i+1);
             P2=(i-8)|0x40;   //P2.6=1 P2.5=0, P2.4=0 选中U5,输出扫描码U9
            delay();
        }
    }
}


void delay(void)
{
    int16 i;
    for (i=0;i<50;i++)
        ;
}


void timer0() interrupt 1 using 3
{
    TF0=0;
    TH0=0xb1;
    TL0=0xe0;
    if (n<10)
    {
    n++;
    }
    else
    {
    offset+=2;
    if (offset>1100)
            offset=0;
        n=0;
    }
}

关闭窗口