报告LED 点阵书写显示屏.docx
《报告LED 点阵书写显示屏.docx》由会员分享,可在线阅读,更多相关《报告LED 点阵书写显示屏.docx(19页珍藏版)》请在冰豆网上搜索。
报告LED点阵书写显示屏
LED点阵书写显示屏
【摘要】:
LED点阵显示屏是由多个独立的LED发光二极管封装而成。
LED点阵显示屏可以显示文字、数字或符号,通常用来显示时间、速度、系统状态等,显示屏内容随时可以更新,能够实时显示,并具有自动亮度调节功能。
LED点阵显示屏采用单片机的普通I/O模拟SPI通信,静态显示控制。
触摸屏选择了一款4线制电阻式触摸屏,控制器采用XPT2046,它能通过执行两次A/D转换查出被按的屏幕位置,并发还给单片机。
报告给出了一种基于PIC16F877A单片机的32×32点阵LED显示屏的设计方案,包括系统具体的硬件设计方案,软件流程图和部分C语言程序等方面。
【关键词】:
PIC16F877A单片机;LED;电阻式触摸屏
第一章设计任务与技术指标
1.1设计任务
设计并制作一个基于32×32点阵LED模块的书写显示屏,在屏上实现“点亮、划亮、反显、整屏擦除、笔画擦除、连写多字、对象拖移”等书写显示功能。
1.2技术指标
(1)基本要求
1)在“点亮”功能下,当光笔接触屏上某点LED时,能即时点亮该点LED,并在控制器上同步显示该点LED的行列坐标值(左上角定为行列坐标原点)。
2)在“划亮”功能下,当光笔在屏上快速划过时,能同步点亮划过的各点LED,其速度要求2s内能划过并点亮40点LED。
3)在“反显”功能下,能对屏上显示的信息实现反相显示(即:
字体笔画处不亮,无笔画处高亮)。
4)在“整屏擦除”功能下,能实现对屏上所显示信息的整屏擦除。
(2)发挥部分
1)在“笔画擦除”功能下,能用光笔擦除屏上所显汉字的笔画。
2)在“连写多字”功能下,能结合自选的擦除方式,在30s内在屏上以“划亮”方式逐个写出四个汉字(总笔画数不大于30)且存入机内,写完后再将所存四字在屏上逐个轮流显示。
3)在“对象拖移”功能下,能用光笔将选定显示内容在屏上进行拖移。
先用光笔以“划亮”方式在屏上圈定欲拖移显示对象,再用光笔将该对象拖移到屏上另一位置。
4)当环境光强改变时,能自动连续调节屏上显示亮度。
5)当光笔连续未接触屏面的时间超过1~5min时(此时间可由控制器设定),能自动关闭屏上显示,并使整个系统进入休眠状态,此时系统工作电流应不大于5mA。
6)其他。
第二章方案论证与比较
2.1方案论证
(1)点阵显示屏部分
串行方式显示。
这种方式可同时显示16个8×8点阵汉字的汉字、字符或数字。
点阵显示屏每个单元由16个8×8点阵LED显示模块、行信号选择译码器8个74LS164、和组成,如图1所示。
单元显示屏可以接收控制器(主控制电路板)或上一级显示单元模块传输下来的数据信息和命令信息,并可将这些数据信息和命令信息不经任何变化地再传送到下一级显示模块单元中,因此显示屏可扩展至更多的显示单元,用于显示更多的内容。
此方案为点阵显示屏系统中比较常用的。
图1串行方式显示逻辑结构框图
(2)显示屏控制部分
方案一:
主从工作模式。
采用主从单片机工作方式来控制整个系统。
其中一个单片机用于控制LED点阵显示,另外一个单片机用于扩展键盘、串口与上位机通信、温度测量、时间读取等工作,此方案对硬件电路以及软件设计方面要求非常高,更涉及到主从单片机通信问题。
方案二:
单机工作模式。
采用一个单片机控制实现所有功能,其中包括LED点阵显示屏的刷新显示、模式设定、时间读取、温度检测,以及与上位机的通信等。
只用一个单片机控制点阵显示屏可以使电路大大减化,软件设计方面也容易实现。
本设计采用了这种方案。
(3)触摸屏部分
XPT2046是一种典型的逐次逼近型模数转换器(SARADC),包含了采样/保持、模数转换、串口数据输出等功能。
同时芯片集成有一个2.5V的内部参考电压源、温度检测电路,工作时使用外部时钟。
XPT2046可以单电源供电,电源电压范围为2.7V~5.5V。
参考电压值直接决定ADC的输入范围,参考电压可以使用内部参考电压,也可以从外部直接输入1V~VCC范围内的参考电压(要求外部参考电压源输出阻抗低)。
X、Y、Z、VBAT、Temp和AUX模拟信号经过片内的控制寄存器选择后进入ADC,ADC可以配置为单端或差分模式。
选择VBAT、Temp和AUX时应该配置为单端模式;作为触摸屏应用时,应该配置为差分模式,这可有效消除由于驱动开关的寄生电阻及外部的干扰带来的测量误差,提高转换精度。
图2XPT2046应用电路
第三章系统硬件设计
3.1系统总体设计
从理论上说,不论显示图形还是文字,只要控制与组成这些图形或文字的各个点所在的位置相对应的LED器件发光,就可以得到我们想要的显示结果,这种同时控制各个发光点亮灭的方法称为静态驱动显示方式。
32x32的点阵共有1024个发光二极管,显然单片机没有这么多的端口,如果我采用锁存器来扩展端口,按8位的锁存器来计算,32x32的点阵需要1024/8=128个锁存器。
这个数字很庞大,因为我们仅仅是32x32的点阵,在实际应用中的显示屏往往要大得多,这样在锁存器上花的成本将是一个很庞大的数字。
因此在实际应用中的显示屏几乎都不采用这种设计,而采用另外一种称为动态扫描的显示方法。
采用扫描方式进行显示时,每一行有一个行驱动器,各行的同名列共用一个驱动器。
显示数据通常存储在单片机的存储器中,按8位一个字节的形式顺序排放。
显示时要把一行中各列的数据都传送到相应的列驱动器上去,这就存在一个显示数据传输的问题。
从控制电路到列驱动器的数据传输可以采用并列方式或串行方式。
显然,采用并行方式时,从控制电路到列驱动器的线路数量大,相应的硬件数目多。
当列数很多时,并列传输的方案是不可取的。
采用串行传输的方法,控制电路可以只用一根信号线,将列数据一位一位传往列驱动器,在硬件方面无疑是十分经济的。
图3显示屏电路实现的结构框图
3.2单元模块设计
3.2.1单片机控制部分
图1系统总原理图
3.2.2点阵控制部分
串转并部分
第四章系统软件设计
4.1软件总体流程图。
软件主要是单片机部分。
全部用C语言编写,模块化设计,数据收发,数据显示,并提供相应的操作提示。
单片机总流程图
系统简单可靠,稳定性好。
2)、显示功能模块流程图:
根据系统要求,显示相应的信息。
程序流程图
4.3总程序清单(见附录一)
第五章系统组装
5.1整机结构图及工艺说明
作为完整的电子仪器除了需要好的电路和软件设计外,还需要良好的装配工艺和美观的外壳,即有好的人机界面。
这些问题我们也做了相应的考虑。
第七章总结
本文设计的一个32x32的点阵LED书写显示屏,在屏上实现“点亮、划亮、反显、整屏擦除、笔画擦除、连写多字、对象拖移”等书写显示功能。
图形或文字显示有静止、移入移出等显示方式。
本系统具有硬件少,结构简单,容易实现,性能稳定可靠,成本低等特点。
附录
附录一总程序:
include
#definePORTBIT(adr,bit)((unsigned)(&adr)*8+(bit))/*绝对寻址位操作指令*/
staticbitPORTB_0@PORTBIT(PORTB,0);
staticbitPORTB_1@PORTBIT(PORTB,1);
staticbitPORTB_2@PORTBIT(PORTB,2);
staticbitPORTB_3@PORTBIT(PORTB,3);
staticbitPORTB_4@PORTBIT(PORTB,4);
staticbitPORTB_5@PORTBIT(PORTB,5);
staticbitPORTB_6@PORTBIT(PORTB,6);
staticbitPORTB_7@PORTBIT(PORTB,7);
staticbitPORTC_0@PORTBIT(PORTC,0);
staticbitPORTC_1@PORTBIT(PORTC,1);
staticbitPORTC_2@PORTBIT(PORTC,2);
staticbitPORTC_3@PORTBIT(PORTC,3);
staticbitPORTC_4@PORTBIT(PORTC,4);
staticbitPORTC_5@PORTBIT(PORTC,5);
staticbitPORTC_6@PORTBIT(PORTC,6);
staticbitPORTC_7@PORTBIT(PORTC,7);
voiddelay_50ms(unsignedintt)
{
unsignedintj;
for(;t>0;t--)
for(j=6245;j>0;j--)
{;}
}
voidSPIsend(void)
{
TRISB=0b00000000;
TRISC=0B00000000;
PORTB=0b00000000;
PORTC=0b00000000;
//number174LS164
PORTB_1=0;//NOP();NOP();NOP();NOP();NOP();NOP();
PORTB_0=0;
PORTB_1=1;//NOP();NOP();NOP();NOP();NOP();NOP();
PORTB_1=0;//NOP();NOP();NOP();NOP();NOP();NOP();
PORTB_0=0;
PORTB_1=1;//NOP();NOP();NOP();NOP();NOP();NOP();
PORTB_1=0;//NOP();NOP();NOP();NOP();NOP();NOP();
PORTB_0=0;
PORTB_1=1;//NOP();NOP();NOP();NOP();NOP();NOP();
PORTB_1=0;//NOP();NOP();NOP();NOP();NOP();NOP();
PORTB_0=0;
PORTB_1=1;//NOP();NOP();NOP();NOP();NOP();NOP();
PORTB_1=0;//NOP();NOP();NOP();NOP();NOP();NOP();
PORTB_0=0;
PORTB_1=1;//NOP();NOP();NOP();NOP();NOP();NOP();
PORTB_1=0;//NOP();NOP();NOP();NOP();NOP();NOP();
PORTB_0=0;
PORTB_1=1;//NOP();NOP();NOP();NOP();NOP();NOP();
PORTB_1=0;//NOP();NOP();NOP();NOP();NOP();NOP();
PORTB_0=0;
PORTB_1=1;//NOP();NOP();NOP();NOP();NOP();NOP();
PORTB_1=0;//NOP();NOP();NOP();NOP();NOP();NOP();
PORTB_0=0;//LIGHTHERE
PORTB_1=1;//NOP();NOP();NOP();NOP();NOP();NOP();
//number274LS164
PORTB_3=0;//NOP();NOP();NOP();NOP();NOP();NOP();
PORTB_2=0;
PORTB_3=1;//NOP();NOP();NOP();NOP();NOP();NOP();
PORTB_3=0;//NOP();NOP();NOP();NOP();NOP();NOP();
PORTB_2=0;
PORTB_3=1;//NOP();NOP();NOP();NOP();NOP();NOP();
PORTB_3=0;//NOP();NOP();NOP();NOP();NOP();NOP();
PORTB_2=0;
PORTB_3=1;//NOP();NOP();NOP();NOP();NOP();NOP();
PORTB_3=0;//NOP();NOP();NOP();NOP();NOP();NOP();
PORTB_2=0;
PORTB_3=1;//NOP();NOP();NOP();NOP();NOP();NOP();
PORTB_3=0;//NOP();NOP();NOP();NOP();NOP();NOP();
PORTB_2=0;
PORTB_3=1;//NOP();NOP();NOP();NOP();NOP();NOP();
PORTB_3=0;//NOP();NOP();NOP();NOP();NOP();NOP();
PORTB_2=0;
PORTB_3=1;//NOP();NOP();NOP();NOP();NOP();NOP();
PORTB_3=0;//NOP();NOP();NOP();NOP();NOP();NOP();
PORTB_2=0;
PORTB_3=1;//NOP();NOP();NOP();NOP();NOP();NOP();
PORTB_3=0;//NOP();NOP();NOP();NOP();NOP();NOP();
PORTB_2=0;
PORTB_3=1;//NOP();NOP();NOP();NOP();NOP();NOP();
//number374ls164
PORTB_5=0;//NOP();NOP();NOP();NOP();NOP();NOP();
PORTB_4=0;
PORTB_5=1;//NOP();NOP();NOP();NOP();NOP();NOP();
PORTB_5=0;//NOP();NOP();NOP();NOP();NOP();NOP();
PORTB_4=0;
PORTB_5=1;//NOP();NOP();NOP();NOP();NOP();NOP();
PORTB_5=0;//NOP();NOP();NOP();NOP();NOP();NOP();
PORTB_4=0;
PORTB_5=1;//NOP();NOP();NOP();NOP();NOP();NOP();
PORTB_5=0;//NOP();NOP();NOP();NOP();NOP();NOP();
PORTB_4=0;
PORTB_5=1;//NOP();NOP();NOP();NOP();NOP();NOP();
PORTB_5=0;//NOP();NOP();NOP();NOP();NOP();NOP();
PORTB_4=0;
PORTB_5=1;//NOP();NOP();NOP();NOP();NOP();NOP();
PORTB_5=0;//NOP();NOP();NOP();NOP();NOP();NOP();
PORTB_4=0;
PORTB_5=1;//NOP();NOP();NOP();NOP();NOP();NOP();
PORTB_5=0;//NOP();NOP();NOP();NOP();NOP();NOP();
PORTB_4=0;
PORTB_5=1;//NOP();NOP();NOP();NOP();NOP();NOP();
PORTB_5=0;//NOP();NOP();NOP();NOP();NOP();NOP();
PORTB_4=0;
PORTB_5=1;//NOP();NOP();NOP();NOP();NOP();NOP();
//no4
PORTB_7=0;//NOP();NOP();NOP();NOP();NOP();NOP();
PORTB_6=0;
PORTB_7=1;//NOP();NOP();NOP();NOP();NOP();NOP();
PORTB_7=0;//NOP();NOP();NOP();NOP();NOP();NOP();
PORTB_6=0;
PORTB_7=1;//NOP();NOP();NOP();NOP();NOP();NOP();
PORTB_7=0;//NOP();NOP();NOP();NOP();NOP();NOP();
PORTB_6=0;
PORTB_7=1;//NOP();NOP();NOP();NOP();NOP();NOP();
PORTB_7=0;//NOP();NOP();NOP();NOP();NOP();NOP();
PORTB_6=0;
PORTB_7=1;//NOP();NOP();NOP();NOP();NOP();NOP();
PORTB_7=0;//NOP();NOP();NOP();NOP();NOP();NOP();
PORTB_6=0;
PORTB_7=1;//NOP();NOP();NOP();NOP();NOP();NOP();
PORTB_7=0;//NOP();NOP();NOP();NOP();NOP();NOP();
PORTB_6=0;
PORTB_7=1;//NOP();NOP();NOP();NOP();NOP();NOP();
PORTB_7=0;//NOP();NOP();NOP();NOP();NOP();NOP();
PORTB_6=0;
PORTB_7=1;//NOP();NOP();NOP();NOP();NOP();NOP();
PORTB_7=0;//NOP();NOP();NOP();NOP();NOP();NOP();
PORTB_6=0;
PORTB_7=1;//NOP();NOP();NOP();NOP();NOP();NOP();
//no5
PORTC_1=0;//NOP();NOP();NOP();NOP();NOP();NOP();
PORTC_0=0;
PORTC_1=1;//NOP();NOP();NOP();NOP();NOP();NOP();
PORTC_1=0;//NOP();NOP();NOP();NOP();NOP();NOP();
PORTC_0=0;
PORTC_1=1;//NOP();NOP();NOP();NOP();NOP();NOP();
PORTC_1=0;//NOP();NOP();NOP();NOP();NOP();NOP();
PORTC_0=0;
PORTC_1=1;//NOP();NOP();NOP();NOP();NOP();NOP();
PORTC_1=0;//NOP();NOP();NOP();NOP();NOP();NOP();
PORTC_0=0;
PORTC_1=1;//NOP();NOP();NOP();NOP();NOP();NOP();
PORTC_1=0;//NOP();NOP();NOP();NOP();NOP();NOP();
PORTC_0=0;
PORTC_1=1;//NOP();NOP();NOP();NOP();NOP();NOP();
PORTC_1=0;//NOP();NOP();NOP();NOP();NOP();NOP();
PORTC_0=0;
PORTC_1=1;//NOP();NOP();NOP();NOP();NOP();NOP();
PORTC_1=0;//NOP();NOP();NOP();NOP();NOP();NOP();
PORTC_0=0;
PORTC_1=1;//NOP();NOP();NOP();NOP();NOP();NOP();
PORTC_1=0;//NOP();NOP();NOP();NOP();NOP();NOP();
PORTC_0=0;//LIGHTHERE
PORTC_1=1;//NOP();NOP();NOP();NOP();NOP();NOP();
//NO6
PORTC_3=0;//NOP();NOP();NOP();NOP();NOP();NOP();
PORTC_2=0;
PORTC_3=1;//NOP();NOP();NOP();NOP();NOP();NOP();
PORTC_3=0;//NOP();NOP();NOP();NOP();NOP();NOP();
PORTC_2=0;
PORTC_3=1;//NOP();NOP();NOP();NOP();NOP();NOP();
PORTC_3=0;//NOP();NOP();NOP();NOP();NOP();NOP();
PORTC_2=0;
PORTC_3=1;//NOP();NOP();NOP();NOP();NOP();NOP();
PORTC_3=0;//NOP();NOP();NOP();NOP();NOP();NOP();
PORTC_2=0;
PORTC_3=1;//NOP();NOP();NOP();NOP();NOP();NOP();
PORTC_3=0;//NOP();NOP();NOP();NOP();NOP();NOP();
PORTC_2=0;
PORTC_3=1;//NOP();NOP();NOP();NOP();NOP();NOP();
PORTC_3=0;//NOP();NOP();NOP();NOP();NOP();NOP();
PORTC_2=0;
PORTC_3=1;//NOP();NOP();NOP();NOP();NOP();NOP();
PORTC_3=0;//NOP();NOP();NOP();NOP();NOP();NOP();
PORTC_2=0;
PORTC_3=1;//NOP();NOP();NOP();NOP();NOP();NOP();
PORTC_3=0;//NOP();NOP();NOP();NOP();NOP();NOP();
PORTC_2=0;
PORTC_3=1;//NOP();NOP();NOP();NOP();NOP();NOP();
//NO7
PORTC_5=0;//NOP();NOP();NOP();NOP();NOP();NOP();
PORTC_4=0;
PORTC_5=1;//NOP();NOP();NOP();NOP();N