关于8X8点阵的多字符移动。下面是我的protel和静态字符代...
静态显示代码如下:
#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;
}
}
不错的资料,值得分享