#include<delay.h>//1MS延时
#define uchar unsigned char
#define uint unsigned int
#define hang P1 //行扫描接在P1口
sbit ds=P0^0
sbit clk=P0^1
sbit mr=P0^2
sbit g1=P0^3
sbit stcp=P0^4
uint counter
uchar flag
uchar code display[][32]={
/*-- 文字: 好 --*/
/*-- 宋体12此字体下对应的点阵为:宽x高=16x16 --*/
0x10,0x00,0x11,0xFC,0x10,0x08,0x10,0x10,0xFC,0x20,0x24,0x20,0x24,0x20,0x27,0xFE,
0x44,0x20,0x64,0x20,0x18,0x20,0x08,0x20,0x14,0x20,0x26,0x20,0x44,0xA0,0x80,0x40,
/*-- 文字: 好 --*/
/*-- 宋体12此字体下对应的点阵为:宽x高=16x16 --*/
0x10,0x00,0x11,0xFC,0x10,0x08,0x10,0x10,0xFC,0x20,0x24,0x20,0x24,0x20,0x27,0xFE,
0x44,0x20,0x64,0x20,0x18,0x20,0x08,0x20,0x14,0x20,0x26,0x20,0x44,0xA0,0x80,0x40,
/*-- 文字: 学 --*/
/*-- 宋体12此字体下对应的点阵为:宽x高=16x16 --*/
0x01,0x08,0x10,0x8C,0x0C,0xC8,0x08,0x90,0x7F,0xFE,0x40,0x04,0x8F,0xE8,0x00,0x40,
0x00,0x80,0x7F,0xFE,0x00,0x80,0x00,0x80,0x00,0x80,0x00,0x80,0x02,0x80,0x01,0x00,
/*-- 文字: 习 --*/
/*-- 宋体12此字体下对应的点阵为:宽x高=16x16 --*/
0x00,0x00,0x3F,0xFC,0x00,0x04,0x08,0x04,0x04,0x04,0x03,0x04,0x01,0x14,0x00,0x64,
0x01,0x84,0x06,0x04,0x38,0x04,0x10,0x04,0x00,0x04,0x00,0x24,0x00,0x14,0x00,0x00,
/*-- 文字: 天 --*/
/*-- 宋体12此字体下对应的点阵为:宽x高=16x16 --*/
0x00,0x08,0x7F,0xFC,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x04,0xFF,0xFE,0x01,0x00,
0x02,0x80,0x02,0x80,0x04,0x40,0x04,0x40,0x08,0x20,0x10,0x10,0x20,0x0E,0xC0,0x04,
/*-- 文字: 天 --*/
/*-- 宋体12此字体下对应的点阵为:宽x高=16x16 --*/
0x00,0x08,0x7F,0xFC,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x04,0xFF,0xFE,0x01,0x00,
0x02,0x80,0x02,0x80,0x04,0x40,0x04,0x40,0x08,0x20,0x10,0x10,0x20,0x0E,0xC0,0x04,
/*-- 文字: 向 --*/
/*-- 宋体12此字体下对应的点阵为:宽x高=16x16 --*/
0x02,0x00,0x04,0x00,0x08,0x04,0x7F,0xFE,0x40,0x04,0x40,0x24,0x4F,0xF4,0x48,0x24,
0x48,0x24,0x48,0x24,0x48,0x24,0x4F,0xE4,0x48,0x24,0x40,0x04,0x40,0x14,0x40,0x08,
/*-- 文字: 上 --*/
/*-- 宋体12此字体下对应的点阵为:宽x高=16x16 --*/
0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x10,0x01,0xF8,0x01,0x00,0x01,0x00,
0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x04,0xFF,0xFE,0x00,0x00}
void write_595(uchar shuju) //向595写一个字节的数据
{
uchar i
for(i=0i<8i++)
{
ds=(~shuju)&0x01
clk=1
clk=0
shuju=shuju>>1
}
}
void main() //主函数
{
uchar i,j,k
g1=0//154使能
EA=1//开总中断
TMOD=0x01//定时器0工作方式0
ET0=1//定时器0使能
TH0=(65535-50000)/256//定时器0设置初值
TL0=(65536-50000)%256
while(1)
{
for(i=0i<16i++) //字从下往上滚动出现
{
k=1
for(j=i+1j>0j--)
{
write_595(display[7][k])
write_595(display[7][k-1])
write_595(display[6][k])
write_595(display[6][k-1])
write_595(display[5][k])
write_595(display[5][k-1])
write_595(display[4][k])
write_595(display[4][k-1])
k+=2
hang=16-j
stcp=1stcp=0
}
delay_ms(20)
}
TR0=1flag=1
while(flag) //停留一秒
{
uchar j
for(j=0j<16j++)
{
write_595(display[7][j*2+1])
write_595(display[7][j*2])
write_595(display[6][j*2+1])
write_595(display[6][j*2])
write_595(display[5][j*2+1])
write_595(display[5][j*2])
write_595(display[4][j*2+1])
write_595(display[4][j*2])
hang=j
stcp=1stcp=0
}
}
TR0=0
for(i=16i>0i--) //字滚动出显示区
{
k=31
for(j=i-1j>0j--)
{
write_595(display[7][k])
write_595(display[7][k-1])
write_595(display[6][k])
write_595(display[6][k-1])
write_595(display[5][k])
write_595(display[5][k-1])
write_595(display[4][k])
write_595(display[4][k-1])
k-=2
hang=j
stcp=1stcp=0
}
delay_ms(20)
}
for(i=0i<16i++) //下四个字滚动出现在显示区
{
k=1
for(j=i+1j>0j--)
{
write_595(display[3][k])
write_595(display[3][k-1])
write_595(display[2][k])
write_595(display[2][k-1])
write_595(display[1][k])
write_595(display[1][k-1])
write_595(display[0][k])
write_595(display[0][k-1])
k+=2
hang=16-j
stcp=1stcp=0
}
delay_ms(20)
}
TR0=1flag=1
while(flag) //停留一秒
{
uchar j
for(j=0j<16j++)
{
write_595(display[3][j*2+1])
write_595(display[3][j*2])
write_595(display[2][j*2+1])
write_595(display[2][j*2])
write_595(display[1][j*2+1])
write_595(display[1][j*2])
write_595(display[0][j*2+1])
write_595(display[0][j*2])
hang=j
stcp=1stcp=0
}
}
TR0=0
for(i=16i>0i--) //滚出显示区
{
k=31
for(j=i-1j>0j--)
{
write_595(display[3][k])
write_595(display[3][k-1])
write_595(display[2][k])
write_595(display[2][k-1])
write_595(display[1][k])
write_595(display[1][k-1])
write_595(display[0][k])
write_595(display[0][k-1])
k-=2
hang=j
stcp=1stcp=0
}
delay_ms(20)
}
}
void timer0() interrupt 1 //中断函数
{
counter++
if(counter==20) //1秒设置
{
counter=0
flag=0
}
TH0=(65535-50000)/256
TL0=(65536-50000)%256
}
16*64点阵屏可以这样通过撰写代码让汉字和数字一起显示。代码如下所示:
#include <stdio.h>
#include <locale.h>
int main()
{
const char str[] = "这里全是中文"
printf("\n输出字符数:%d\n", printf(str))
puts(str)
return 0
}
显示原理:
以简单的8X8点阵为例,它共由64个发光二极管组成,且每个发光二极管是放置在行线和列线的交叉点上,当对应的某一行置1电平,某一列置0电平,则相应的二极管就亮;如要将第一个点点亮,则9脚接高电平13脚接低电平,则第一个点就亮了。
如果要将第一行点亮,则第9脚要接高电平,而(13、3、4、10、6、11、15、16)这些引脚接低电平,那么第一行就会点亮;如要将第一列点亮,则第13脚接低电平,而(9、14、8、12、1、7、2、5)接高电平,那么第一列就会点亮。
这不仅仅是简单的移位,我也做过,你生成字型码的时候是横着扫描吗?如果是,移位也会横向,如果不是,移位的话会乱码。存放字型码的最好是Uchar code,这样占用数据空间会减小。你移位的时候用中间变量和指针进行 *** 作。还有,你扫码方式,我做的是1/4行扫。你的如果是逐行扫描就不太一样 了。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)