标题:
基于单片机的16×32点阵屏字幕显示程序仿真原理图设计
[打印本页]
作者:
51xiaolu
时间:
2022-9-25 23:03
标题:
基于单片机的16×32点阵屏字幕显示程序仿真原理图设计
用了一个星期的时间,经过长时间打磨
有工程文件和仿真文件
原创加二次改编的
具体问题留帖
电路原理图如下:
51hei.png
(136.15 KB, 下载次数: 32)
下载附件
2022-9-26 02:22 上传
单片机源程序如下:
//宏定义
#define uchar unsigned char
#define uint unsigned int
//头函数
#include <reg51.h>
#include <intrins.h>
//管脚定义
//154
sbit A_=P0^0;
sbit B_=P0^1;
sbit C_=P0^2;
sbit D_=P0^3;
sbit G2=P0^7;//低电平使能
//595
sbit SI=P0^6;//数据脚
sbit SCK=P0^5;
sbit RCK=P0^4;
//管脚定义
//154
sbit A_1=P2^0;
sbit B_1=P2^1;
sbit C_1=P2^2;
sbit D_1=P2^3;
sbit G2_1=P2^7;//低电平使能
//595
sbit SI_1=P2^6;//数据脚
sbit SCK_1=P2^5;
sbit RCK_1=P2^4;
sbit K1=P1^0;
sbit K2=P1^1;
sbit K3=P1^2;
uchar flag1,flag2,X,Y;
uchar zishu=10; //字数
uint num;
bit ssflag;
uchar sscount;
//函数声明
void Init595();
void Init595_1();
void Write_byte595(uchar temp);
void Write_byte595_1(uchar temp);
void WriteS(uchar data1,uchar data2);
void WriteS_1(uchar data1,uchar data2);
void Wei_154(uchar W);
void Wei_154_1(uchar W);
void delay(uint z);
void scan();
//汉字数组
uchar code HanZi[]=
{
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,/*" ",0*/
省略
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,/*" ",18*/
};
void scan()
{
if(K1==0)
{
delay(70);
if(K1==0)
{
WriteS(0xff,0xff);//消影
while(K1==0);
ssflag=0;
flag1++;
if(flag1==2)
flag1=0;
Y=num;
X=0;
}
}
if(K2==0)
{
delay(70);
{
if(K2==0)
{
WriteS(0xff,0xff);//消影
while(K2==0);
ssflag=0;
// Y=num;
// X=0;
flag2++;
if(flag2==2)
flag2=0;
}
}
}
if(K3==0)
{
delay(70);
if(K3==0)
{
WriteS(0xff,0xff);//消影
while(!K3);
ssflag = ~ssflag;
flag1=0;
flag2=0;
Y=num;
X=0;
}
}
}
//主函数
void main()
{
uchar i=1,j=0;
flag1=0;
num=16*(zishu+3);
//595c初始化
Init595();
Init595_1();
//循环演示
while(1)
{
if(flag1==0)
{
if(ssflag==0){
for(j=0;j<4;j++)
{ scan();
for(i=1;i<17;i++)
{
WriteS(0xff,0xff);//消影
Wei_154(i);
{WriteS(HanZi[i*2-2+2*X],HanZi[i*2-1+2*X]);}//显示内容
delay(1);//显示
G2=0;//关闭
WriteS_1(0xff,0xff);//消影
Wei_154_1(i);
WriteS_1(HanZi[i*2-2+2*X+32],HanZi[i*2-1+2*X+32]);//显示内容
delay(1);//显示
G2_1=0;//关闭
}
}
if(flag2==0)
{
X++;
if(X>=num) //16*字数+2
{
X=0;
}
}
}else{
scan();
sscount++;
if(sscount>=50){
sscount=0;
X=X+2*16;
if(X>=num-16) //16*字数+2
{
X=32;
}
}
if(sscount<20){
for(i=1;i<17;i++)
{
WriteS(0xff,0xff);//消影
Wei_154(i);
{WriteS(HanZi[i*2-2+2*X],HanZi[i*2-1+2*X]);}//显示内容
delay(1);//显示
G2=0;//关闭
WriteS_1(0xff,0xff);//消影
Wei_154_1(i);
WriteS_1(HanZi[i*2-2+2*X+32],HanZi[i*2-1+2*X+32]);//显示内容
delay(1);//显示
G2_1=0;//关闭
}
}else{
for(i=1;i<17;i++)
{
WriteS(0xff,0xff);//消影
Wei_154(i);
{WriteS(HanZi[i*2-2+2*0],HanZi[i*2-1+2*0]);}//显示内容
delay(1);//显示
G2=0;//关闭
WriteS_1(0xff,0xff);//消影
Wei_154_1(i);
WriteS_1(HanZi[i*2-2+2*0+32],HanZi[i*2-1+2*0+32]);//显示内容
delay(1);//显示
G2_1=0;//关闭
}
}
}
}
if(flag1==1)
{
for(j=0;j<4;j++)
{ scan();
for(i=1;i<17;i++)
{
WriteS(0xff,0xff);//消影
Wei_154(i);
WriteS(HanZi1[i*2-2+2*Y-32],HanZi1[i*2-1+2*Y-32]);//显示内容
delay(1);//显示
G2=0;//关闭
WriteS_1(0xff,0xff);//消影
Wei_154_1(i);
WriteS_1(HanZi1[i*2-2+2*Y],HanZi1[i*2-1+2*Y]);//显示内容
delay(1);//显示
G2_1=0;//关闭
}
}
if(flag2==0)
{
Y--;
if(Y<=0)
Y=num;
}
}
}
}
//初始化
void Init595()
{
SI=1;
SCK=0;
RCK=0;
}
void Init595_1()
{
SI_1=1;
SCK_1=0;
RCK_1=0;
}
void Write_byte595(uchar temp)
{
uchar i,data_=temp;
G2=1;
for(i=0;i<8;i++)//传值8位
{
if(data_&0x01==0x01)//低位为1
{
SI=1;
}
else //低位为0
{
SI=0;
}
//产生一个上升沿
……………………
…………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码
Proteus8.10版本的仿真图(只支持此版本打开)与程序:
仿真程序.7z
(11.22 MB, 下载次数: 51)
2022-9-26 02:17 上传
点击文件名下载附件
下载积分: 黑币 -5
作者:
jbandtsgky
时间:
2023-3-1 20:43
非常齐全的资料,感谢分享!
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1