标题:
Proteus仿真单片机16*16点阵显示程序 74HC154+74HC595芯片实现
[打印本页]
作者:
梦不虚存
时间:
2022-4-5 20:45
标题:
Proteus仿真单片机16*16点阵显示程序 74HC154+74HC595芯片实现
仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)
51hei.gif
(121.49 KB, 下载次数: 46)
下载附件
2022-4-6 22:19 上传
单片机源程序如下:
#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char
sbit E1=P1^7;
sbit DS=P2^0;
sbit SRCK=P2^1;
sbit RCK=P2^2;
sbit s1=P1^0;
sbit s2=P1^1;
uchar speed=20;
uchar flag=0;
uchar code bless[][32]={
/*-- 文字: 四 --*/
/*-- 楷体_GB231212; 此字体下对应的点阵为:宽x高=16x16 --*/
//{0x02,0x00,0x02,0x00,0x12,0x08,0x0A,0x18,0x03,0x60,0x4E,0x40,0x22,0x7E,0x03,0x50,
//0x16,0x50,0x1A,0x50,0x22,0x90,0x27,0x10,0x42,0x10,0x00,0x10,0x00,0x10,0x00,0x00},
{ 0x00,0x00,0x00,0x00,0x1F,0xFC,0x11,0x44,0x11,0x44,0x11,0x44,0x11,0x44,0x11,0x44,
0x11,0x54,0x13,0x64,0x10,0x04,0x10,0x04,0x1F,0xFC,0x00,0x00,0x00,0x00,0x00,0x00},
/*-- 文字: 川 --*/
/*-- 楷体_GB231212; 此字体下对应的点阵为:宽x高=16x16 --*/
//{0x00,0x00,0x10,0x00,0x08,0x00,0x00,0x38,0x03,0xC0,0x40,0x40,0x20,0x40,0x08,0x40,
//0x08,0x40,0x10,0x40,0x20,0x7E,0x6F,0x80,0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x00},
{0x00,0x00,0x08,0x88,0x08,0x88,0x08,0x88,0x08,0x88,0x08,0x88,0x08,0x88,0x08,0x88,
0x08,0x88,0x08,0x88,0x08,0x88,0x08,0x88,0x08,0x88,0x10,0x08,0x20,0x08,0x00,0x00},
/*-- 文字: 工 --*/
/*-- 楷体_GB231212; 此字体下对应的点阵为:宽x高=16x16 --*/
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xE0,0x0F,0x00,0x01,0x00,0x01,0x00,0x01,0x00,
0x01,0x00,0x01,0x00,0x01,0xFC,0x7E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},
/*-- 文字: 业 --*/
/*-- 楷体_GB231212; 此字体下对应的点阵为:宽x高=16x16 --*/
{0x00,0x00,0x00,0x80,0x04,0x80,0x04,0x80,0x04,0x80,0x04,0x88,0x24,0x98,0x14,0xA0,
0x14,0xC0,0x04,0x80,0x04,0x80,0x07,0xFC,0x7C,0x00,0x00,0x00,0x00,0x00,0x00,0x00},
/*-- 文字: 大 --*/
/*-- 楷体_GB231212; 此字体下对应的点阵为:宽x高=16x16 --*/
{0x02,0x00,0x02,0x00,0x02,0x00,0x02,0x00,0x02,0x00,0x03,0xF0,0x3E,0x00,0x02,0x00,
0x05,0x00,0x04,0x80,0x08,0x40,0x10,0x20,0x20,0x18,0x40,0x0E,0x00,0x00,0x00,0x00},
/*-- 文字: 学 --*/
/*-- 楷体_GB231212; 此字体下对应的点阵为:宽x高=16x16 --*/
{0x00,0x20,0x12,0x20,0x09,0x20,0x00,0x40,0x23,0xFC,0x3C,0x08,0x63,0xC0,0x44,0x80,
0x01,0x00,0x01,0xF8,0x7E,0x80,0x00,0x80,0x00,0x80,0x02,0x80,0x01,0x00,0x00,0x00},
/*-- 文字: 欢 --*/
/*-- 楷体_GB231212; 此字体下对应的点阵为:宽x高=16x16 --*/
{0x00,0x80,0x00,0x80,0x00,0x80,0x01,0x00,0x19,0x78,0x69,0x90,0x0A,0x20,0x48,0x80,
0x28,0x80,0x10,0x80,0x29,0x40,0x41,0x20,0x82,0x18,0x04,0x0E,0x00,0x00,0x00,0x00},
/*-- 文字: 迎 --*/
/*-- 楷体_GB231212; 此字体下对应的点阵为:宽x高=16x16 --*/
{0x00,0x00,0x00,0x80,0x21,0x80,0x16,0x38,0x04,0x48,0x04,0x48,0xF4,0x48,0x15,0x58,
0x26,0x40,0x10,0x40,0x10,0x40,0xFF,0x00,0x00,0xFE,0x00,0x18,0x00,0x00,0x00,0x00},
/*-- 文字: 您 --*/
/*-- 楷体_GB231212; 此字体下对应的点阵为:宽x高=16x16 --*/
{0x00,0x80,0x08,0x80,0x09,0x38,0x11,0xC8,0x32,0x50,0x54,0x40,0x12,0x50,0x12,0x48,
0x10,0xC0,0x00,0x08,0x09,0x04,0x28,0xA0,0x64,0x10,0x03,0xF8,0x00,0x00,0x00,0x00},
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}
};
void delay()
{
uint i;
for(i=0;i<150;i++);
}
void delay1(uint z) //延时函数
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
void write_byte(uchar a)
{
uchar i,num;
num=~a;
for(i=0;i<8;i++)
{
RCK=0;
SRCK=0;
if((num&0x01)==0) DS=0;
else DS=1;
SRCK=1;
RCK=1;
num>>=1;
}
}
void write_null()
{ uchar i;
for(i=0;i<7;i++)
{
RCK=0;
SRCK=0;
DS=1;
SRCK=1;
RCK=1;
}
}
void main()
{
uchar i,j,k,scan;
TMOD=0x01;//定时器T0设为方式1
TH0=(65536-50000)/256;//给T0装入初值 50ms中断1次
TL0=(65536-50000)%256;
EA=1;//开总中断
ET0=1;//允许T0中断
TR0=1;//启动定时器
DS=1;
E1=0;
while(1)
{
scan=0;
for(k=0;k<2*speed;k++)
{
for(i=0;i<31;i=i+2)
{
write_null();
P3=scan;
E1=0;
delay();
E1=1;
scan++;
}
}
for(j=0;j<6;j=j+1)
{
for(k=0;k<speed/2;k++)
{
scan=0;
for(i=0;i<31;i=i+2)
{
if(flag==1)
{
write_byte(bless[j+3][i+1]);
write_byte(bless[j+3][i]);
write_byte(bless[j+2][i+1]);
write_byte(bless[j+2][i]);
write_byte(bless[j+1][i+1]);
write_byte(bless[j+1][i]);
write_byte(bless[j][i+1]);
write_byte(bless[j][i]);
}
if(flag==0)
{
write_byte(bless[j][i+1]);
write_byte(bless[j][i]);
write_byte(bless[j+1][i+1]);
write_byte(bless[j+1][i]);
write_byte(bless[j+2][i+1]);
write_byte(bless[j+2][i]);
write_byte(bless[j+3][i+1]);
write_byte(bless[j+3][i]);
}
P3=scan;
E1=0;
delay();
E1=1;
if(i%2==0)
scan++;
}
}
for(k=0;k<speed/2;k++)
{
scan=0;
{
if(flag==1)
{
for(i=1;i<31;i=i+2)
{
write_byte(bless[j+4][i+1]);
write_byte(bless[j+3][i]);
write_byte(bless[j+3][i+1]);
write_byte(bless[j+2][i]);
write_byte(bless[j+2][i+1]);
write_byte(bless[j+1][i]);
write_byte(bless[j+1][i+1]);
write_byte(bless[j][i]);
P3=scan;
E1=0;
delay();
E1=1;
if(i%2==1)
scan++;
}
}
if(flag==0)
{
for(i=0;i<31;i=i+2)
{
write_byte(bless[j][i]);
write_byte(bless[j+1][i+1]);
write_byte(bless[j+1][i]);
write_byte(bless[j+2][i+1]);
write_byte(bless[j+2][i]);
write_byte(bless[j+3][i+1]);
write_byte(bless[j+3][i]);
write_byte(bless[j+4][i+1]);
P3=scan;
E1=0;
delay();
E1=1;
if(i%2==0)
scan++;
}
}
}
}
}
}
}
void T0_interserve(void) interrupt 1 using 1//定时器T0中断函数方式1
{
TH0=(65536-50000)/256;//重新赋值
TL0=(65536-50000)%256;
if(s1==0)
{
delay1(5);
{
if(s1==0)
flag=0;
}
while(!s1);
}
if(s2==0)
{
delay1(5);
{
if(s2==0)
flag=1;
}
while(!s2);
}
}
复制代码
Keil代码与Proteus仿真51hei下载::
点阵滚动显示.7z
(81.69 KB, 下载次数: 80)
2022-4-6 22:20 上传
点击文件名下载附件
16816点阵滚动显示
下载积分: 黑币 -5
作者:
sonique0371
时间:
2022-4-7 11:34
想多显示几个字该在哪里改,楼主的程序只能显示9个字。
作者:
梦不虚存
时间:
2022-4-7 17:31
这个稍微改下也可以显示啊
作者:
zhaij
时间:
2022-4-7 19:24
这种程序很有意思
作者:
sonique0371
时间:
2022-4-8 08:52
梦不虚存 发表于 2022-4-7 17:31
这个稍微改下也可以显示啊
没找到在哪里修改可以扩充字数,试着修改了几次,显示错乱
作者:
fade@zds
时间:
2022-4-24 14:56
程序几乎没有可读性
作者:
南书DB
时间:
2022-4-26 17:27
154驱动行的话不需要加三极管放大电流嘛,这个数量有点多了呦
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1