【51单片机】【protues仿真】基于51单片机点阵屏系统

发布于:2025-09-01 ⋅ 阅读:(19) ⋅ 点赞:(0)

目录

一、主要功能

二、使用步骤

三、硬件资源

四、软件设计

五、实验现象

一、主要功能

1、16*16点阵屏幕显示
2、138芯片和595芯片
3、按键切换左右移动,暂停

二、使用步骤

LED点阵屏是51单片机项目中常用的显示设备,通过控制LED的亮灭组合实现文字、图形和动画显示。

三、硬件资源

1、51单片机核心模块
2、按键模块
3、16*16点阵屏
 

四、软件设计

#include<reg51.h>//头文件

sbit shcp=P1^2;//数据输入时钟线 595的11脚
sbit stcp=P1^1;//输出存储器锁存时钟线 595的12脚
sbit ds=P1^0;//数据线  595的14脚

sbit s1=P3^1;//按下暂停再暂按继续
sbit s2=P3^2;//按下方向取反
bit fx;//方向切换
sbit    IR    = P3^2;         

unsigned char    N[4];                 //识别码,操作码存放
unsigned char   X1,X2,X3,X4;

unsigned char alt;//数据移动定时时间
unsigned int net;//控制显示的字符
unsigned char zi=8;//显示字数
unsigned int zong;//总字符  (所有的字数+1)*32   字数指的是汉字,字母、数字两个算一个数字
unsigned char code tab[]={
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,0x01,0x02,0x02,0x42,0x04,0x42,0x08,0x42,0x30,0x43,0xC0,0x7E,0x00,0x42,0x00,
0x43,0xFC,0x42,0x02,0x42,0x02,0x42,0x02,0x02,0x02,0x02,0x0E,0x00,0x00,0x00,0x00,/*"无",0*/

0x00,0x80,0x07,0x00,0x00,0x00,0xFF,0xFF,0x08,0x00,0x04,0x01,0x08,0x06,0x08,0x38,
0xFF,0xC0,0x08,0x00,0x0F,0xFC,0x88,0x02,0x68,0x02,0x08,0x02,0x08,0x1E,0x00,0x00,/*"忧",1*/

0x00,0x08,0x00,0x08,0x1F,0xC8,0x92,0x48,0x52,0x48,0x32,0x48,0x12,0x48,0x1F,0xFF,
0x12,0x48,0x32,0x48,0x52,0x48,0x92,0x48,0x1F,0xC8,0x00,0x08,0x00,0x08,0x00,0x00,/*"单",2*/

0x00,0x00,0x00,0x01,0x00,0x06,0x7F,0xF8,0x04,0x40,0x04,0x40,0x04,0x40,0x04,0x40,
0x04,0x40,0xFC,0x40,0x04,0x7F,0x04,0x00,0x04,0x00,0x04,0x00,0x00,0x00,0x00,0x00,/*"片",3*/

0x08,0x20,0x08,0xC0,0x0B,0x00,0xFF,0xFF,0x09,0x00,0x08,0xC1,0x00,0x06,0x7F,0xF8,
0x40,0x00,0x40,0x00,0x40,0x00,0x7F,0xFC,0x00,0x02,0x00,0x02,0x00,0x1E,0x00,0x00,/*"机",4*/

0x00,0x00,0x00,0x00,0x00,0x6C,0x00,0x6C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*":",5*/

0x08,0x04,0x0F,0xFC,0x00,0x24,0x00,0x60,0x01,0x94,0x01,0x0C,0x01,0x04,0x00,0x00,/*"k",6*/

0x00,0x00,0x01,0x04,0x19,0x04,0x19,0xFC,0x00,0x04,0x00,0x04,0x00,0x00,0x00,0x00,/*"i",7*/

0x00,0x00,0x00,0xF8,0x01,0x04,0x01,0x04,0x01,0x04,0x09,0x08,0x0F,0xFC,0x00,0x04,/*"d",8*/

0x01,0x01,0x01,0xFF,0x00,0x89,0x01,0x04,0x01,0x04,0x00,0x88,0x00,0x70,0x00,0x00,/*"p",9*/

0x00,0x00,0x00,0x98,0x01,0x24,0x01,0x24,0x01,0x48,0x00,0xFC,0x00,0x04,0x00,0x00,/*"a",10*/

0x01,0x04,0x01,0x04,0x01,0xFC,0x00,0x84,0x01,0x04,0x01,0x00,0x01,0x80,0x00,0x00,/*"r",11*/


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,
};
unsigned char code tab1[]={
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,

0x01,0x04,0x01,0x04,0x01,0xFC,0x00,0x84,0x01,0x04,0x01,0x00,0x01,0x80,0x00,0x00,/*"r",0*/

0x00,0x00,0x00,0x98,0x01,0x24,0x01,0x24,0x01,0x48,0x00,0xFC,0x00,0x04,0x00,0x00,/*"a",1*/

0x01,0x01,0x01,0xFF,0x00,0x89,0x01,0x04,0x01,0x04,0x00,0x88,0x00,0x70,0x00,0x00,/*"p",2*/

0x00,0x00,0x00,0xF8,0x01,0x04,0x01,0x04,0x01,0x04,0x09,0x08,0x0F,0xFC,0x00,0x04,/*"d",3*/

0x00,0x00,0x01,0x04,0x19,0x04,0x19,0xFC,0x00,0x04,0x00,0x04,0x00,0x00,0x00,0x00,/*"i",4*/

0x08,0x04,0x0F,0xFC,0x00,0x24,0x00,0x60,0x01,0x94,0x01,0x0C,0x01,0x04,0x00,0x00,/*"k",5*/

0x00,0x00,0x00,0x00,0x00,0x6C,0x00,0x6C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*":",6*/

0x08,0x20,0x08,0xC0,0x0B,0x00,0xFF,0xFF,0x09,0x00,0x08,0xC1,0x00,0x06,0x7F,0xF8,
0x40,0x00,0x40,0x00,0x40,0x00,0x7F,0xFC,0x00,0x02,0x00,0x02,0x00,0x1E,0x00,0x00,/*"机",7*/

0x00,0x00,0x00,0x01,0x00,0x06,0x7F,0xF8,0x04,0x40,0x04,0x40,0x04,0x40,0x04,0x40,
0x04,0x40,0xFC,0x40,0x04,0x7F,0x04,0x00,0x04,0x00,0x04,0x00,0x00,0x00,0x00,0x00,/*"片",8*/

0x00,0x08,0x00,0x08,0x1F,0xC8,0x92,0x48,0x52,0x48,0x32,0x48,0x12,0x48,0x1F,0xFF,
0x12,0x48,0x32,0x48,0x52,0x48,0x92,0x48,0x1F,0xC8,0x00,0x08,0x00,0x08,0x00,0x00,/*"单",9*/

0x00,0x80,0x07,0x00,0x00,0x00,0xFF,0xFF,0x08,0x00,0x04,0x01,0x08,0x06,0x08,0x38,
0xFF,0xC0,0x08,0x00,0x0F,0xFC,0x88,0x02,0x68,0x02,0x08,0x02,0x08,0x1E,0x00,0x00,/*"忧",10*/

0x00,0x01,0x02,0x02,0x42,0x04,0x42,0x08,0x42,0x30,0x43,0xC0,0x7E,0x00,0x42,0x00,
0x43,0xFC,0x42,0x02,0x42,0x02,0x42,0x02,0x02,0x02,0x02,0x0E,0x00,0x00,0x00,0x00,/*"无",11*/

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(unsigned int z)//延时子函数
{
   unsigned char x;
   for(;z>0;z--)
   for(x=110;x>0;x--);
}

void main() //主函数

{

char i,aa;

TMOD=0x01;//定时器0  模式1  16位定时模式

TH0=(65536-10000)/256;//定时10.000ms

TL0=(65536-10000)%256;

ET0=1;//使能定时器0

EA=1;//开启总中断

TR0=1;//开始计数

zong=(zi+1)*32;

while(1) //无限循环

{

if(s1==0)//检测按键

{

delay(30);//延时消除按键抖动

if(s1==0)

{

TR0=~TR0;//按下暂停  暂按继续

while(s1==0);//等待按键松手

}

}

if(s2==0)//检测按键

{

delay(30);//延时消除按键抖动

if(s2==0)

{

fx=~fx;//方向取反

aa=0;

if(fx==0)net=0;//正向移动

if(fx==1)net=zong;//反向移动

while(s2==0);//等待按键松手

}

}

for(i=0;i<16;i++)//循环移位

{   

//两片138组成的4-16线译码器

P2=i;//列数据驱动,138的驱动端口

if(fx==0)writedata(tab[net+aa],tab[net+aa+1]);//写入需要显示的数据

if(fx==1)writedata(tab1[net+aa],tab1[net+aa+1]);//写入需要显示的数据

delay(3);//延时

writedata(0,0);//清屏

aa+=2;//数据加 实现扫描

if(aa>30)aa=0;//循环16次 清零

}

}

}

五、实验现象

演示视频: