内容正文:
工作模块4---LED点阵屏显示控制
同学们,大家好!上一讲我们学习了矩阵键盘识别原理,并绘制了接口电路,今天我们利用矩阵键盘实现数字键盘的功能
1
情境导入
每当走进商场、超市、银行、酒店时,都会看到广告类的电子大屏幕,显示文字或者图片,非常显眼,这就是LED点阵屏,简称LED屏。随着科技的发展,LED屏成为信息传播、新闻发布、广告宣传等领域最为常见的显示媒体。
我们先看矩阵键盘接口电路。P30-P33接行线,P34-P37接列线。
内容图谱
矩阵键盘程序设计总体思路:单片机采用编程扫描法来监视键盘的输入,采用反转法获取键值。
具体编程步骤如下:
任务描述
某电子科技有限公司接到一批订单,使用LED屏显示数字、字母和几个简单的汉字。现经过开发团队决策,考虑安装尺寸和物料成本,决定使用8×8LED屏,通过单片机控制其显示,调试阶段先显示汉字“正”,请设计电路原理图,编写程序,并仿真功能。
初级能力:实现单片机控制8×8 LED屏显示一个字符的功能。
高级能力:能够实现8×8 LED屏的滚动显示字符的功能。
我们先看矩阵键盘接口电路。P30-P33接行线,P34-P37接列线。
执行思路
矩阵键盘程序设计总体思路:单片机采用编程扫描法来监视键盘的输入,采用反转法获取键值。
具体编程步骤如下:
实施过程
(1)判别有无键按下;
(2)软件延时消抖;
(3)再次确认有无键按下;
(4)取得键值:反转法或键盘扫描取得闭合键的行、列号,并计算法或
查表法得到键值;
(5)松手检测:判断闭合键是否释放,如没释放则继续等待;
(6)键盘处理:将闭合键的键值保存,同时转去执行该闭合键的功能。
下面我们来编程!
实施过程
Proteus ISIS设计电路原理图
表4-1 仿真电路元件明细
序号 元件名称 元件型号 元件参数
1 LED屏 MATRIX-8x8-RED
2 双向总线驱动器 74LS245
(1)判别有无键按下;
(2)软件延时消抖;
(3)再次确认有无键按下;
(4)取得键值:反转法或键盘扫描取得闭合键的行、列号,并计算法或
查表法得到键值;
(5)松手检测:判断闭合键是否释放,如没释放则继续等待;
(6)键盘处理:将闭合键的键值保存,同时转去执行该闭合键的功能。
下面我们来编程!
实施过程
4-1-1 绘制原理图重点——绘制总线及分支
(1)判别有无键按下;
(2)软件延时消抖;
(3)再次确认有无键按下;
(4)取得键值:反转法或键盘扫描取得闭合键的行、列号,并计算法或
查表法得到键值;
(5)松手检测:判断闭合键是否释放,如没释放则继续等待;
(6)键盘处理:将闭合键的键值保存,同时转去执行该闭合键的功能。
下面我们来编程!
74HC245数字芯片引脚图
实施过程
第1脚DIR(T/R),为输入输出端口转换用,DIR=“1”高电平时信号由“A”端输入“B”端输出,DIR=“0”低电平时信号由“B”端输入“A”端输出。
第2~9脚,第11~18脚“A”信号输入输出端,如果IR=“1”OE=“0”则A1输入B1输出,如果DIR=“0”OE=“0”则B1输入A1输出。
第19脚OE,使能端,若该脚为“1”A/B端的信号将不导通,只有为“0”时A/B端才被启用,该脚也就是起到开关的作用。
我们总结一下今天的学习内容:学习了1. 矩阵键盘的编程扫描法
2.采用反转法进行矩阵键盘键值识别
3.编写了矩阵键盘实现数字键盘的程序
课后作业:1. 请采用定时中断扫描实现数字键盘;
2.请编写获得键值采用扫描法的程序。
知识链接
4-1 LED屏结构
LED显示屏最常见的是8×8(8行8列)的。内部的每一个点都是一个发光二极管。LED点阵屏有两个类型,一类为共阴极如图,在共阴极端输入有效电平0时某个点位的LED灯就具备了点亮的条件。
我们先看矩阵键盘接口电路。P30-P33接行线,P34-P37接列线。
知识链接
4-1LED屏结构
另一类则为共阳极,如图4.11(b),在共阳极端输入有效电平1时,某个点位的LED灯就具备了点亮的条件。
我们先看矩阵键盘接口电路。P30-P33接行线,P34-P37接列线。
知识链接
LED显示屏的基本工作原理是动态扫描。显示方式是按显示编码的顺序,一行一行地显示。每一行的显示时间大约为4ms,由于人类的视觉暂留现象,将感觉到8行LED灯是在同时显示的。若显示的时间太短,则亮度不够,若显示的时间太长,将会感觉到闪烁。任务4-1采用低电平逐行(P1)扫描,高电平(P2)输出显示信号。即轮流给行信号输出低电平,在任意时刻只有一行发光二极管是处于可以被点亮的状态 ,其它行都处于熄灭状态。
我们先看矩阵键盘接口电路。P30-P33接行线,P34-P37接列线。
知识链接
我们先看矩阵键盘接口电路。P30-P33接行线,P34-P37接列线。
实施过程
LED屏的显示控制
//任务4-1 LED屏8x8显示“正”字程序
#include<reg51.h> //头文件,含51单片机的专用寄存器
#include<intrins.h> //头文件,含循环位移函数
#define uchar unsigned char //定义常量uchar
#define uint unsigned int //定义常量uint
uchar code disled[]={0x00,0x7e,0x08,0x08,0x7a,0x0a,0x0a,0x7e}; //“正”字模
void delay(unsigned int i)// 具体语句见任务2-2
void main() //主函数
{ uchar i,w;
while(1)
{w=0xfe;
for(i=0;i<8;i++) //变量i,循环10次
{ P2=disled[i]; //P2高电平有效,P27在右边
P1=w; //P1低电平有效,P17在下边
delay(2); //延时2ms
w=_crol_(w,1); //循环左移函数
P1=0xff; //关显示
delay(2);}}}
(1)判别有无键按下;
(2)软件延时消抖;
(3)再次确认有无键按下;
(4)取得键值:反转法或键盘扫描取得闭合键的行、列号,并计算法或
查表法得到键值;
(5)松手检测:判断闭合键是否释放,如没释放则继续等待;
(6)键盘处理:将闭合键的键值保存,同时转去执行该闭合键的功能。
下面我们来编程!
任务4-2 16×16LED屏显示控制
某届电子设计大赛有这样一个题目,设计并制作一个LED线阵显示装置,利用视觉暂留现象,在某个区域内显示不少于3个16×16LED屏点阵的图形或文字。分析题目,其中一块基础知识和技能是16×16LED屏的显示。现通过单片机控制16×16LED屏的显示,调试阶段先显示汉字“单”,请设计电路原理图,编写程序,并仿真功能。
初级能力:实现单片机控制16×16 LED屏显示汉字的功能。
高级能力:能够实现16×16 LED屏的交替显示汉字的功能。
任务描述
我们先看矩阵键盘接口电路。P30-P33接行线,P34-P37接列线。
任务4-2 16×16LED屏显示控制
单片机
MCU
16×16
LED模块
电源电路
时钟电路
复位电路
列驱动电路
行驱动电路
执行思路
任务4-2 16×16LED屏电路图
(1)判别有无键按下;
(2)软件延时消抖;
(3)再次确认有无键按下;
(4)取得键值:反转法或键盘扫描取得闭合键的行、列号,并计算法或
查表法得到键值;
(5)松手检测:判断闭合键是否释放,如没释放则继续等待;
(6)键盘处理:将闭合键的键值保存,同时转去执行该闭合键的功能。
下面我们来编程!
任务4-2 16×16LED屏电路图
序号 元件名称 元件型号 元件参数
1 LED屏 MATRIX-8x8-RED
2 双向总线驱动器 74HC595
(1)判别有无键按下;
(2)软件延时消抖;
(3)再次确认有无键按下;
(4)取得键值:反转法或键盘扫描取得闭合键的行、列号,并计算法或
查表法得到键值;
(5)松手检测:判断闭合键是否释放,如没释放则继续等待;
(6)键盘处理:将闭合键的键值保存,同时转去执行该闭合键的功能。
下面我们来编程!
实施过程
4-2-2 “单”显示程序
//16×16LED屏显示控制参考程序
#include "reg51.h" //头文件,定义51的专用寄存器
#include <intrins.h> //头文件,包含_nop_空操作指令
/************定义可寻址位********************/
sbit LED138_D = P1^3; //定义可寻址位,串行数据高位
sbit LED138_C = P1^2;
sbit LED138_B = P1^1;
sbit LED138_A = P1^0; //定义可寻址位,串行数据低位
sbit LED138_G = P1^4; //低电平有效的使能控制端
sbit LED595_DAT= P2^1; //595芯片的DS段,传输数据
sbit LED595_CLK= P2^0; //移位寄存器时钟信号SH_CP
sbit LED595_LCK= P2^2; //存储寄存器时钟信号ST_CP
sbit wei=P2^3; //位处理信号
(1)判别有无键按下;
(2)软件延时消抖;
(3)再次确认有无键按下;
(4)取得键值:反转法或键盘扫描取得闭合键的行、列号,并计算法或
查表法得到键值;
(5)松手检测:判断闭合键是否释放,如没释放则继续等待;
(6)键盘处理:将闭合键的键值保存,同时转去执行该闭合键的功能。
下面我们来编程!
实施过程
/************函数声明********************/
void send( unsigned char dat); //发送数据函数
void scan_Line( unsigned char m); //行扫描函数
void delay(unsigned int n); //延时函数
void scan_Key(); //键扫描函数
void display(unsigned char dat[][32]); //字模数组
unsigned char display_buffer[2]; //缓冲数组
unsigned char code Word1[1][32]=
{0x10,0x10,0x08,0x20,0x04,0x40,0x3F,0xF8,0x21,0x08,0x21,0x08,0x3F,0xF8,0x21,0x08,0x21,0x08,0x3F,0xF8,0x01,0x00,0x01,0x00,0xFF,0xFE,0x01,0x00,0x01,0x00,0x01,0x00};
//*"单"
void main()
{ while(1)
{ display(Word1); //显示汉字
}
}
(1)判别有无键按下;
(2)软件延时消抖;
(3)再次确认有无键按下;
(4)取得键值:反转法或键盘扫描取得闭合键的行、列号,并计算法或
查表法得到键值;
(5)松手检测:判断闭合键是否释放,如没释放则继续等待;
(6)键盘处理:将闭合键的键值保存,同时转去执行该闭合键的功能。
下面我们来编程!
实施过程
void delay(unsigned int n) //延时函数,时基是1ms
{ unsigned int j,k; for(j=0;j<n;j++) for(k=0;k<125;k++);}
void display(unsigned char dat[][32])//16x16汉字显示函数
{ unsigned char i=0;
for(i=0;i<16;i++) //循环16次
{ scan_Line(i); //扫描16行
display_buffer[0] = dat[0][i*2]; //送第一个字模字节到缓冲数组
display_buffer[1] = dat[0][i*2+1]; //送第二个字模字节到缓冲数组
send(display_buffer[1]); //发送字模数据
send(display_buffer[0]) ; //发送字模数据,完成第一行显示
if((display_buffer[0]&0x80)==0x80){wei=1;}
else {wei=0;} //提高显示效果
LED595_LCK = 0; //产生上升沿时序
_nop_( );
LED595_LCK = 1; //发送存储数据到LED屏
_nop_( ); LED138_G=1; //更新数据时候关闭显示
_nop_( ); LED138_G = 0; //开启数据传输
delay(2); }}
(1)判别有无键按下;
(2)软件延时消抖;
(3)再次确认有无键按下;
(4)取得键值:反转法或键盘扫描取得闭合键的行、列号,并计算法或
查表法得到键值;
(5)松手检测:判断闭合键是否释放,如没释放则继续等待;
(6)键盘处理:将闭合键的键值保存,同时转去执行该闭合键的功能。
下面我们来编程!
实施过程
void Scan_Line( unsigned char m)//行扫描函数,m为行号
{ switch(m)
{case 0:LED138_D = 0;LED138_C = 0;LED138_B = 0;LED138_A = 0; break;
case 1:LED138_D = 0;LED138_C = 0;LED138_B = 0;LED138_A = 1; break;
case 2:LED138_D = 0;LED138_C = 0;LED138_B = 1;LED138_A = 0; break;
case 3:LED138_D = 0;LED138_C = 0;LED138_B = 1;LED138_A = 1; break;
case 4:LED138_D = 0;LED138_C = 1;LED138_B = 0;LED138_A = 0; break;
case 5:LED138_D = 0;LED138_C = 1;LED138_B = 0;LED138_A = 1; break;
case 6:LED138_D = 0;LED138_C = 1;LED138_B = 1;LED138_A = 0; break;
case 7:LED138_D = 0;LED138_C = 1;LED138_B = 1;LED138_A = 1; break;
case 8:LED138_D = 1;LED138_C = 0;LED138_B = 0;LED138_A = 0;break;
case 9:LED138_D = 1;LED138_C = 0;LED138_B = 0;LED138_A = 1; break;
case 10:LED138_D = 1;LED138_C = 0;LED138_B = 1;LED138_A = 0; break;
case 11:LED138_D = 1;LED138_C = 0;LED138_B = 1;LED138_A = 1; break;
case 12:LED138_D = 1;LED138_C = 1;LED138_B = 0;LED138_A = 0;break;
case 13:LED138_D = 1;LED138_C = 1;LED138_B = 0;LED138_A = 1; break;
case 14:LED138_D = 1;LED138_C = 1;LED138_B = 1;LED138_A = 0; break;
case 15:LED138_D = 1;LED138_C = 1;LED138_B = 1;LED138_A = 1; break;
default : break; }}
(1)判别有无键按下;
(2)软件延时消抖;
(3)再次确认有无键按下;
(4)取得键值:反转法或键盘扫描取得闭合键的行、列号,并计算法或
查表法得到键值;
(5)松手检测:判断闭合键是否释放,如没释放则继续等待;
(6)键盘处理:将闭合键的键值保存,同时转去执行该闭合键的功能。
下面我们来编程!
实施过程
void send( unsigned char dat)//发送数据
{
unsigned char i;
for(i=0;i<8;i++)
{ if(dat&0x01) //移位最低一位数据
{ LED595_DAT = 1;} //接受到1
else
{ LED595_DAT = 0;} //接受到0
LED595_CLK = 1;//上升沿数据移位
_nop_( );
LED595_CLK = 0;//下降沿数据不变
_nop_( );
dat >>= 1; //数据循环右移1位
}}
实施过程
(1)判别有无键按下;
(2)软件延时消抖;
(3)再次确认有无键按下;
(4)取得键值:反转法或键盘扫描取得闭合键的行、列号,并计算法或
查表法得到键值;
(5)松手检测:判断闭合键是否释放,如没释放则继续等待;
(6)键盘处理:将闭合键的键值保存,同时转去执行该闭合键的功能。
下面我们来编程!
实施过程
知识链接
(1)判别有无键按下;
(2)软件延时消抖;
(3)再次确认有无键按下;
(4)取得键值:反转法或键盘扫描取得闭合键的行、列号,并计算法或
查表法得到键值;
(5)松手检测:判断闭合键是否释放,如没释放则继续等待;
(6)键盘处理:将闭合键的键值保存,同时转去执行该闭合键的功能。
下面我们来编程!
实施过程
知识链接
(1)判别有无键按下;
(2)软件延时消抖;
(3)再次确认有无键按下;
(4)取得键值:反转法或键盘扫描取得闭合键的行、列号,并计算法或
查表法得到键值;
(5)松手检测:判断闭合键是否释放,如没释放则继续等待;
(6)键盘处理:将闭合键的键值保存,同时转去执行该闭合键的功能。
下面我们来编程!
实施过程
知识链接
74HC595芯片是一种串入并出的芯片,在电子显示屏制作当中有广泛的应用。74HC595是8位串行输入/输出或者并行输出移位寄存器,具有高阻、1、0状态移位寄存器和存储器是分别的时钟。数据在SH_cp的上升沿输入,在ST_cp的上升沿进入的存储寄存器中去。移位寄存器有一个串行移位输入(Ds),和一个串行输出(Q7’),和一个异步的低电平复位,存储寄存器有一个并行8位的,具备三态的总线输出,当使能OE时(为低电平),存储寄存器的数据输出到总线。
SH_CP(11脚):上升沿时数据寄存器的数据移位。Q0-->Q1-->Q2-->...-->Q7;下降沿移位寄存器数据不变;ST_CP(12脚):上升沿时移位寄存器的数据进入数据存储寄存器,下降沿时存储寄存器数据不变。
(1)判别有无键按下;
(2)软件延时消抖;
(3)再次确认有无键按下;
(4)取得键值:反转法或键盘扫描取得闭合键的行、列号,并计算法或
查表法得到键值;
(5)松手检测:判断闭合键是否释放,如没释放则继续等待;
(6)键盘处理:将闭合键的键值保存,同时转去执行该闭合键的功能。
下面我们来编程!
内容梳理与总结
本工作模块完成了2个任务,介绍了LED显示屏的结构和工作原理。要掌握的重点内容是8×8LED屏的工作原理:列扫描和行扫描。了解在Proteus ISIS软件中8×8LED、16×16LED屏的仿真方法。
我们先看矩阵键盘接口电路。P30-P33接行线,P34-P37接列线。
再 见
同学们,大家好!我是主讲教师杨敬娜。上一讲我们学习了矩阵键盘识别原理,并绘制了接口电路,今天我们利用矩阵键盘实现数字键盘的功能
28
$$