#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int
#define outdat P2
sbit ld=P3^0
sbit lw=P3^1
//数码管显示代码
unsigned char code tab[]={
0x01,0x02,0x03,0x04,0xFF,0xFF,0xFF,0xFF}
void delay1ms(unsigned int count) //延时1ms
{
unsigned char j
for(count>0count--)
for(j=0j<120j++)
}
void display(unsigned char num)
{
outdat=tab[num]
ld=0ld=1ld=0
outdat=0x01<<num
lw=0lw=1lw=0
delay1ms(2)
}
void main()
{
unsigned char i
while(1)
{
for(i=0i<8i++)
{
display(i)
}
}
}
由程序看来p2口是用来控制点阵行扫描的,p1口负责送显示的数据p2=0x01
//起始行高电平
for(i=0i<8i++)
//循环点亮8行,循环送8次数据
{
p1=tab[i]
delay(100)
//每行点亮时送上相应的显示数据(即tab[i]里的数据)
p2=p2<<1|p2>>7
//
点亮下一行
其实点阵显示就是:(针对16*16点阵显示一个汉字)
静止的显示就是扫第一行时送汉字的第一行,扫第二行时送汉字的第二行...扫第16行时送汉字的第16行,这叫第一帧扫完。如果想让字动那么扫第二帧时,行扫描第一行时,送汉字的第二行数据,行扫描第二行时,送汉字的第三行数据...就这样错开一行,再下一帧时再错开一行,直至错开16次一个完整的字就上移至上面了。
总的说来就是一帧一帧的显示,每帧显示汉字的一个画面,重叠在一起就看见字在动了。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)