基于51单片机点阵汉字显示程序设计
文章目录
- 基于51单片机点阵汉字显示程序设计
- 一、实践目的
- 二、实践依托的实验设备与软件
- 1、设备
- 2、软件
- 二、 系统或装置的设计
- 1、 硬件原理图设计
- 2、印制板图绘制
- 三、程序框架及主要算法流程图及描述
- 四、系统或装置的实现
- 1、系统或装置实物安装调试
- 2、代码及其调试
- 五、系统的运行与结果分析
- 1、系统运行测试过程
- 2、功能总结
基于51单片机点阵汉字显示程序设计
一、实践目的
本次实践是用51单片机最小系统为核心,并使用4块8×8LED点阵组成的16×16LED点阵、2块74HC595位移寄存器芯片作为16×16LED点阵的行驱动、2块74HC138译码器芯片作为16×16LED点阵的列驱动、和8个独立按键组成的51单片机系统,实现汉字在LED点阵屏幕上进行多种功能的显示:实现静态显示、动态显示包括向上移动、向下移动、向左移动、向右移动、移动显示暂停与继续、移动加速和减速的功能。
二、实践依托的实验设备与软件
1、设备
51单片机、74HC595芯片、74HC138芯片、独立按键、LED点阵屏幕、程序下载器等。
2、软件
编写51单片机代码的软件:Keil uVision4、绘制原理图与PCB的软件:立创EDA、进行仿真的软件:Proteus 8 Professional。
二、 系统或装置的设计
1、 硬件原理图设计
原理图包括了51单片机、晶振电路、复位电路、USB电源接口电路、74HC595寄存器串口转并口芯片电路、74HC138译码器芯片电路、4个8×8LED点阵组成的16×16点阵汉字显示电路和独立按键电路组成。绘制的原理图如图2.1到图2.5所示。
图2.1:51单片机、晶振电路和复位电路组成51单片机最小系统
51单片机为整个系统的核心,控制着595芯片与138芯片驱动LED点阵汉字显示等功能。晶振电路为51单片机LED点阵汉字显示系统提供时钟信号。
图2.2:独立按键与USB电源接口电路
USB电源接口电路为系统提供电源,独立按键电路实现LED点阵汉字显示的模式切换功能。其具体功能是按键key1~key4分别控制LED点阵显示汉字的向上移动、向下移动、向左移动、向右移动。按键key5控制LED点阵显示汉字的暂停移动与继续移动。Key7、key8分别控制LED点阵屏显示汉字移动的速度。
图2.3:两块595芯片电路
74HC595寄存器串口转并口芯片电路驱动16×16点阵屏的行选,当其输出端口为高电平时,对应的LED点阵的行被选中。即LED点阵的行为高电平有效。
图2.4:两块138芯片电路
74HC138译码器芯片电路驱动16×16点阵屏的列选,当其输出端口低电平时,对应LED点阵的列被选中。即LED点阵的列为低电平有效。
图2.5:16×16LED点阵电路
16×16点阵是由四块8×8点阵电路组成的,16×16点阵汉字显示电路可以实现汉字的静态显示效果以及向上、向下、向左和向右动态滚动显示的效果。
2、印制板图绘制
根据绘制的原理图,先将其转换成PCB图,然后对其各个元器件进行合理的布局,然后用软件自动布线的功能进行布线操作。绘制的印制板图如图2.6所示
图2.6:51单片机LED点阵汉字显示系统PCB图
三、程序框架及主要算法流程图及描述
图2.7:程序的基本框架流程图
程序的基本框架是从主函数开始的,先进行相关变量的初始化操作,然后进行定时中断初始化的操作,打开51单片机的定时器对LED点阵屏显示汉字的滚动进行速度的控制。相关变量初始化操作后,进入while(1)循环里面,根据变量modeSelect的值进行显示模式的选择。最后,在循环的最后调用按键处理的函数keyProcess()判断是否有按键按下,如果有按键按键更新modeSelect变量的值,进行LED点阵汉字显示模式是更新。
图2.8:按键处理流程图
按键处理采用if语句判断方式,判断是否有按键按键。当有按键按下时,会进行相关变量值的设置。例如当按键key1按下时,进行如下变量的设置
TR0 = 1; // 定时器开
modeSelect = 1; // 显示模式变量
speed = 10; // 汉字移动速度变量
moveBitNum = 0;
net = zong1; // 上下移动相关控制变量
以上是按键key1按下时对应的相关变量值的设定,其它按键的相关变量值的设置见附录: 完整代码处。
四、系统或装置的实现
1、系统或装置实物安装调试
图3.1:51单片机LED点阵汉字显示系统实物图
2、代码及其调试
1、用keil4软件建立ledData.h头文件,用汉字获取软件获取点阵汉字的字符数据,将其写到ledData.h头文件中。在ledData.h头文件中定义控制138译码器哪个输出管脚有效,如下代码所示
/*38译码器的输出端口的选择
*/
uchar code columnSlect[] = // 行选
{0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F,
};
2、然后建立一个main.h头文件,在main.h头文件中,定义51单片机驱动芯片的管脚如下所示
sbit ds = P1^0; // 数据端口sbit shcp = P1^2; // 数据输入时钟线sbit stcp = P1^1; // 输出存储器锁存时钟线sbit key1 = P3^4; // 向上移动控制按钮sbit key2 = P3^5; // 向下移动控制按钮sbit key3 = P3^6; // 向左移动控制按钮sbit key4 = P3^7; // 向右移动控制按钮sbit key5 = P3^3; // 静态显示显示的控制按钮sbit key6 = P3^2; // 闪烁显示的控制按钮sbit key7 = P1^6; // 控制汉字移动速度增加的控制按钮sbit key8 = P1^7; // 控制汉字移动速度减小的控制按钮
然后定义一些变量如下所示
uchar speed = 30; // 汉字移动速度控制的标志uchar alt;
uint net, index;
uint zong, zong1;
uchar modeSelect; // 汉字显示的模式方式选择uchar buff[4];
uchar moveBitNum;
uchar moveBitNumTemp;uchar IncNum; // 上下左右移动的相关控制变量
其中主要的变量modeSelect控制汉字在LED点阵屏上显示模式方式的选择。
在声明一些函数,实现相关的功能,如下所示
void timerInit(); // 定时器初始化函数void writedata(uchar); // 向595芯片写入数据函数void clearScreen(); // led点阵显示与清屏void keyProcess(); // 按键处理的函数void delay(uint); // 延时函数
timerInit();要实现的是51单片机定时器初始操作,将51单片机的定时器打开,产生定时控制汉字在LED点阵屏上移动的速度;writedata(uchar);是将ledData.h头文件中定义的有关汉字字符数据写入595芯片中,使其控制LED点阵的哪一些行为有效。clearScreen();实现LED点阵清屏以及将595寄存器中的数据从并口输出以控制LED的显示。keyProcess();是实现按键处理的相关操作,按键按下时,对相应的变量进行赋值操作,从而控制LED点阵屏上汉字显示的方式。
3、建立一个main.c源文件编写主函数,以及编写main.h头文件中声明函数的定义,实现相应函数的具体功能。具体详细的代码在附录中。
4、用keil4软件编好程序以后,进行编译生产.hex文件。51单片机LED点阵汉字显示程序编译信息如图3.2所示
图3.2:程序编译的结果
从编译的结果可以看出,程序是零错误, 领警告。然后对程序编译生产的.hex文件在Proteus软件中进行仿真,仿真的结果如图3.3、3.4所示
图3.3:程序开始仿真结果
图3.4:按下按键一的仿真结果:向上移动
从仿真的结果来看,编写的程序符合51单片机LED点阵汉字显示设计功能的要求,及系统实现了LED点阵系统的静态显示,动态显示:向上下移动、左右移动、闪烁显示和移动的速度控制。
五、系统的运行与结果分析
1、系统运行测试过程
用keil4软件将写好的程序进行编译生产.hex文件,将其通过下载器下载程序于单片机中。写入程序的51单片机初始状态是处于静态显示的状态,即显示第一个汉字:“电”。然后分别通过按键key1~key4的按下,分别实现LED点阵屏显示汉字的向上移动、向下移动、向左移动,向右移动。按下按键key5实现LED点阵屏上移动的汉字变为静止,当再按一下时,静止的汉字字符变为移动的汉字字符。按下按键key6实现LED点阵屏闪烁显示汉字字符的功能。按下key7、key8分别实现汉字移动速度的增加与减少。单片机按下RST复位按键时,使51单片机运行于显示静态汉字字符的初始状态。
2、功能总结
从硬件的运行结果来看,由51单片机、16×16LED点阵屏、独立按键、595芯片、138芯片组成的单片机点阵汉字显示系统基本上实现了实践中所要求的功能:从软件获取相应的点阵显示汉字的相关信息;实现了51单片机与LED点阵屏的驱动功能;通过kei4软件编写LED点阵汉字显示的程序实现了汉字在LED点阵屏上向上移动、向下移动、向左移动、向右移动以及具有特效的闪烁显示等功能。
基于51单片机点阵汉字显示程序设计相关推荐
- 51单片机 外部时钟_基于51单片机的LCD12864显示模拟时钟
今天要分享的仿真和程序是基于51单片机的LCD12864显示模拟时钟.公众号之前也分享过数字时钟,但是那些时钟都是采用数字显示的形式来显示时间,而今天分享一个采用LCD12864显示的模拟指针式时钟. ...
- 基于51单片机的LCD1602显示温湿度
51单片机基础难点知识理解后,直接通过下面3个小项目可以更好理解51单片机.中断 定时器 串口甚至是基础的IO输入输出都有结合,再加上一些外设模块的学习(如1602显示屏,L298N电机驱动等) 项目 ...
- c语言 字体点阵取模,[汉字取模软件怎么用]单片机点阵汉字显示需要用
[汉字取模软件怎么用]单片机点阵汉字显示需要用汉字取模软件吗 通常,用汉字取模软件生成工程所需所有汉字点阵信息.也可利用字库芯片,根据汉字内码计算字模地址,并从字库芯片中导出相关汉字的点阵信息.前者容 ...
- 基于51单片机数码管显示
基于51单片机数码管显示 ## 数码管显示原理 数码管(LED Segment Displays)由多个发光二极管封装在一起组成"8"字型的器件,引线已在内部连接完成,只需引出它们 ...
- 基于51单片机1602温度显示时钟
基于51单片机LCD1602温度显示时钟 要在1602上显示时间和温度先要了解1602是如何显示的.详情可以参考我之前的文章基于51单片机1602显示 :时间显示可以用时钟芯片DS1302,但是此次我 ...
- 基于51单片机LCD1602温度显示(DS18B20测温)
基于51单片机DS18B20测温 要在1602上显示温度先要了解1602是如何显示的.详情可以参考我之前的文章基于51单片机1602显示 DS18B20是美国DALLAS半导体公司推出的第一片支持&q ...
- 基于51单片机实现时间显示及闹钟设置
文章目录 一.介绍 二.原理 三.步骤 四.结果 五.结果分析 六.总结 一.介绍 本次为大学中的一次创新实验,当时老师叫我自己拿个单片机去玩,为了赶时间就做了个简单的时间显示和闹钟设置,因为比较简单 ...
- 51单片机 点阵显示器显示设计 点阵控制器 16*16点阵 广告牌 proteus 仿真
课程设计题二十二:点阵显示器显示设计 (1)上电后滚动显示学校名称. (2)按键1按下,滚动显示班级. (3)按键2按下,滚动显示姓名及学号. (4)一键开关. 首先找一个差不多的设计 这个设计网上找 ...
- 40、基于51单片机收音机 LCD1602显示系统设计
摘要 本文在具体分析了STC89C52单片机的技术特点与数字FM收音机的基础上,提出了采用单片机控制收音机实现数字调频的方法,并给出了具体的软硬件设计.该系统利主要由STC89C52单片机.液晶显示器 ...
最新文章
- mobx使用数组提示越界_Mobx-State-Tree-分配给数组类型
- python绘制3d图形-万万没想到,Python 竟能绘制出如此酷炫的三维图
- APUE读书笔记-12线程控制-04同步属性
- Java 强引用与软引用以及弱引用,虚引用
- Android 面试 - 有关Service的面试题
- linux 路由指向策略,Linux 路由 学习笔记 之六 策略规则的添加
- SANTENDO的大脑训练计划
- 使用数据增强技术提升模型泛化能力
- Diango博客--9.归档、分类和标签页
- 二、搭建Apache服务器 模板引擎
- java防止重复启动bat_java调用exe,及调用bat不成功的解决办法
- Flutter State生命周期 Flutter Widget生命周期 Flutter 应用程序生命周期
- Shell脚本之七 选择、循环结构
- python模拟登陆 验证码el_8-python模拟登入(无验证码)
- java ftpclient quit_一步一步android(6):关于FtpClient类的学习
- eclipse配置文件
- Codeforces Round #318 [RussianCodeCup Thanks-Round] (Div. 1) B. Bear and Blocks 水题
- 去掉WORD文档中首页的页眉及页眉的横线
- PID为0的系统空闲进程连接状态为TIME_WAIT
- linux25g网卡设定,工程师笔记|刷新Mellnaox 25G网卡固件的方法,你get了吗