本文主要介绍基于C51单片机,设计8*8晶阵显示“孙”“金”“云”“加”“油”“I”“L”“O”“V”“E”“U”“笑脸颜文字”。
首先让我们先来了解一下C51单片机晶阵显示屏的原理吧!
前期知识储备
1.对于共阴极数码管来说,当某个发光二极管的阳极为高电平时,发光二极管点亮,相应的段被显示。共阳极相反。
2.8X8点阵LED工作原理说明 :8X8点阵共需要64个发光二极管组成,且每个发光二极管是放置在行线和列线的交叉点上,当对应的某一列置0电平,某一行置1电平,则相应的二极管就亮。原理图如图所示:
那么想让8*8的晶阵显示需要位选信号以及段选信号。先进行位选,再进行段选。也就是先给行送信号,再给列送信号。
(1)位选信号
基于C51中单片机中,本次实验位选信号通过P0端口。
位选信号为横着写的,利用位选信号选中一列显示;位选信号选中值为0的那一列。
位选信号为:0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe。
(2)段选信号
基于C51单片机中,本次实验段选信号通过P3端口。由下图可知,段选信号竖着写,是给列发送,选中高电平的那一行显示。(74HC595是反向的,有待继续深入研究。)
接下来我们确定字符的段选信号,方法有如下两种:
a:手动画图,写出十六进制的代码,如下图所示:
b:利用软件子模生成软件:PCtoLCD2002软件。点击百度云链接即可下载使用。
https://pan.baidu.com/s/1KFXI1MWZBEmrqWpTl4iHig
具体教程请看文章二。
通过以上两种方法我得出的段选信号为:
0x92,0x9F,0xB2,0xD4,0x0A,0xFF,0x08,0x04, //孙
0x11,0x2D,0x6B,0xBF,0xAB,0x6D,0x29,0x11,//金
0x00,0xA2,0xA6,0xAA,0xB2,0xA6,0xA2,0x01, //云
0x22,0xFC,0x22,0x3F,0x00,0x1C,0x14,0x1C, //加
0x91,0x4A,0x00,0x3E,0x2A,0xFE,0x2A,0x3E, //油
0x00,0x42,0x42,0x42,0x7E,0x42,0x42,0x42,//I
0x00,0x00,0x7E,0x02,0x02,0x02,0x02,0x00,//L
0x00,0x00,0x7E,0x42,0x42,0x42,0x7E,0x00,//O
0x00,0xF8,0x04,0x02,0x02,0x04,0xF8,0x00,//V
0x00,0xFE,0x92,0x92,0x92,0x92,0x92,0x00,//E
0x00,0xFE,0x02,0x02,0x02,0x02,0xFE,0x00,//U
0x60,0x48,0x64,0x02,0x02,0x64,0x48,0x60,//笑脸颜文字
实验部分
一、打开Keil uVision5软件,进行编程。
新建项目
打开软件之后,鼠标点击Project后,单击红色选中栏目。
如图所示,完善名字点击保存
选择Atmel
选择AT89C52
点击否
右键单击Source group1
接下来写代码
初始定义与赋值
延时函数:
向74HC595发送段选信号
主函数部分:
代码链接:https://pan.baidu.com/s/1tIWj_jG5W9GRDRNRFEPRag
Rebuild
注意进行如下操作:
打开普中科技软件
下载成功后的实验结果:
重点
消隐现象的解释:
单片机的LED数码动态显示需要消隐。因为动态显示是利用 人眼的暂留效应来多位显示的。原理是其多位数码管的每位段码控制只由一个IO口8 位输出,先位选 ,送段码,延时(1~3ms),关位选
(这个就是消隐作用,如果没关,下一位的段码送出时,这一位也显示下一位的段码,这样就乱了)再下一位,重复上述过程。
例子解释
当位选选中最右边一列时,段选信号表示全部不选中(全部不亮)
tab++后,进入下一位位选
由于刷新时间较显示时间快,在第二个位选信号来临时第一个位选信号还在亮,这时没有给一个全部熄灭的段选(即0xff),会导致新的段选来临时,上一个位选尚未结束,就导致最右边第一列会亮第二列的段选信号,但是由于第一次位选已经持续了一段时间,其熄灭的快,颜色较浅。
(此现象我跟陈磊同学经过苦苦钻研终于得出结论,还有待考证)
个人编程心路
1.在之前的学习中,有些知识掌握的不是很扎实,当实践操作时才发现要想独立完成一个实验,前后联系很多,对于C51单片机的基础知识必须掌握透彻。
2.最开始的时候,我没有想到有代码可以参考(对云盘资料研究不够),自己照着课本写代码,没有成功,后来得知有参考代码,瞬间有了方向,自己写代码的话还是很难的。
3.单片机的跳线帽少一个,借用同学的,同时我还发现手指也能当跳线帽。
4.我总觉得手绘写出十六进制挺麻烦的,有点强迫症,找了小半天的字模生成软件。
5.感谢石雅文对于段选以及位选的指正!
5.实验不易,且做且心记。