已阅读5页,还剩27页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
LED点阵书写显示屏设计方案32第一章 设计任务及要求1.1、任务设计并制作一个基于32x32点阵LED模块的书写显示屏,其系统结构如图1所示。在控制器的管理下,LED点阵模块显示屏工作在人眼不易觉察的扫描微亮和人眼可见的显示点亮模式下;当光笔触及LED点阵模块表面时,先由光笔检测触及位置处LED点的扫描微亮以获取其行列坐标,再依据功能需求决定该坐标处的LED是否点亮至人眼可见的显示状态(如下图中光笔接触处的深色LED点已被点亮),从而在屏上实现“点亮、划亮、反显、整屏擦除、笔画擦除、连写多字、对象拖移”等书写显示功能。 控制器32x32 LED 点阵模块 光笔 图1.1 LED点阵书写显示屏系统结构示意图1.2、要求(1)在“点亮”功能下,当光笔接触屏上某点LED时,能即时点亮该点LED,并在控制器上同步显示该点LED的行列坐标值(左上角定为行列坐标原点)。(2)在“划亮”功能下,当光笔在屏上快速划过时,能同步点亮划过的各点LED,其速度要求2s内能划过并点亮40点LED。(3)在“反显”功能下,能对屏上显示的信息实现反相显示(即:字体笔画处不亮,无笔画处高亮)。(4)在“整屏擦除”功能下,能实现对屏上所显示信息的整屏擦除。第二章 系统整体框架系统整体框架图如图一所示,分为控制模块、显示模块、光笔模块、LED点阵模块和辅助模块(包括键盘、数据存储等)。电源模块辅助模块LED点阵模块光笔模块显示模块控制模块图2.1 系统整体框架图第三章 方案论证与比较3.1、控制模块在数字信号处理中,常用的控制器有FPGA、DSP及嵌入式51单片机。FPGA可以直接用硬件扫描、编码、解码、纠错,速度快、稳定性高,但其价格昂贵,很多的功能在本设计难以使用到。DSP都有较快的数据处理速度,能实时地、快速地监测信号量的变化,但其受采样频率的限制,处理频率范围有限。AT89S52 是一种低功耗、高性能CMOS 8位微控制器,具有8K 在系统可编程Flash 存储器。使用Atmel 公司高密度非易失性存储器技术制造,与工业80C51 产品指令和引脚完全兼容。片上Flash允许程序存储器在系统可编程,亦适于常规编程器。在单芯片上,拥有灵巧的8位CPU 和在系统可编程Flash,使得AT89S52为众多嵌入式控制应用系统提供高灵活、超有效的解决方案,具有硬件的设计十分简单,软件开发周期短等特点。考虑到价格、功耗及系统的要求,最终选用AT89S52单片机为控制系统。3.2、光笔模块光笔设计的关键是选择合适的传感器件,只有具有很高的灵敏度和一定的响应时间的传感器才能完成系统的要求及功能。方案一:采用核心部件为光敏电阻制成的光笔检测系统。光敏电阻是将光能转换为电能的一种传感器件,它是构成光电式传感器的主要部件。光敏电阻结构简单、使用方便、价格便宜,但其响应时间长,不易检测。方案二:采用光敏二极管,与光敏电阻相比有较好的高频特性,具有较好的可靠性,功耗低,且同样价格低廉,使用方便。比较两种器件,系统设计中选用光敏二极管制作光笔模块。3.3、LED点阵模块LED点阵的显示方式有以下几种:1)在LED点阵上贴上一层触摸屏,形成压膜式LED点阵。把触摸屏的信息通过微处理器处理来控制LED点阵显示。这种显示方式准确,反应速度快,光笔制作简单,但造价高。2)用普通的LED点阵,在LED点阵的边上加上红外线传感接收器,构成3232的红外线网,同样光笔制作简单,但硬件复杂,造价也比较高。3)用普通的LED点阵,通过自制的光笔传递信息送入89S52单片机,由AT89S52单片机编程确定LED点阵坐标。虽然编程复杂,但硬件简单,而且造价最低。综合各方面的因素,选择了第三个方案。第四章 系统硬件设计4.1、系统的总体设计本设计以AT89S52为核心部件结合按键、数码管显示、光笔检测及LED点阵驱动显示等部分组成。系统框图如图4.1所示:电源处理键盘处理32x32LED点阵数码管显示AT89S52数据存储光电感应笔图4.1 系统结构框图4.2、光笔的选取与参数设计系统要求2秒内能点亮40点LED,每个灯的定位时间为50ms。一共有1024盏灯,图4.2 光电笔电路图采用C语言2分法查寻需要10次,每查寻一次的时间为5ms。普通的光敏二极管反应时间在30s左右,完全可以满足设计要求。电路见图4.2。4.3、点阵屏驱动参数设计本系统采用共阳极型低态扫描高态显示信号驱动电路和74LS373锁存器。系统的锁存器低态输出,其IOL可达24mA,足以驱动一个LED。我们把3232LED点阵,等分为四个1616的LED点阵来驱动,设定驱动每列LED的电流为15mA,则流过驱动三极管的总电流为240mA,8550三极管最大的工作电流可达500mA,因此选择8550三极管驱动。电路图见图4.3和4.4。图4.3 由74LS373锁存器组成的驱动电路图4.4 驱动原理图4.5、电源电路12P1Header 2HDS1100uFC100.1uFC11+5V1kR21R1滤波电路电源输入231S1SW-SPDTVCC0.1uFC40.1uFC50.1uFC60.1uFC70.1uFC80.1uFC90.1uFC10.1uFC20.1uFC3+5V图4.5 电源部分电源部分采用采用体积小,效率高的开关电源,为系统提供稳定的5V直流电压。其电路图如图4.5所示。4.6、单片机人机界面电路图4.6.1、键盘电路键盘是使用比较简单的独立式键盘,而且具有发光二极管指示功能模块。在程序中采用中断扫描的方式,在没有键操作时CPU执行正常程序,只在有键操作时才处理键盘程序。其电路如图4.6所示:图4.6 键盘输入4.6.2、LED显示电路为了满足系统在工作时能准确显示光笔对应亮点所处的行列坐标值,本设计中采用型号为LCM103的液晶显示器显示。LCM103为10位多功能通用型8段式液晶显示模块,内含看门狗时钟发生器2种频率的蜂鸣驱动电路内置显示RAM,可显示任意字段笔画划3-4线串行接口可与任何单片机接口。其电路图如图4.7所示。图4.7 LED显示电路第五章 程序设计5.1、系统程序流程图本设计中,要实现的功能基本都要通过单片机程序来实现。由于采用的是普通的光敏二极管,在一定程度上限制了反应速度,因此编程采用了多路信号同时输入和数学中的二分法思想编程,提高了系统的执行效率。系统的程序流程图如图5.1所示:开始硬件初始化等待按键进入是否触屏扫描LED是否有光信号返回坐标点亮反 显 整屏擦除图5.1 系统的程序流程图5.2、程序源码/x轴显示#include reg51.h#define ucunsigned char#define uiunsigned int#define uliunsigned long int/T0定时时间设定#define T0_time_init 1124 /1.25ms#define d_ray2#define time0_H (65535-T0_time_init)/256)#define time0_L (65535-T0_time_init)%256)#define address_hP2#define data_ioP0#define code_addP1#define y_one 0x8f#define y_ten 0xaf#define y_hun 0xcf#define y_kilo 0xef#define y_5 0xbf#define y_4 0x9f#define y_6key 0xdf#define y_7key 0xff#define y_no 0x0f uccode show_code=0xc0,0xcf,0x64,0x46,0x4b,0x52,0x50,0xc7,0x40,0x42,0x41,0x58,0xf0,0x4c,0x70,0x71,0xff,;/*uc xdata data_q0x7fff _at_ 0x0000;/uc xdata y_6key _at_ 0xdf00;/uc xdata y_7key _at_ 0xff00;data_q=0xc0,0xcf,0x64,0x46,0x4b,0x52,0x50,0xc7,0x40,0x42,0x41,0x58,0xf0,0x4c,0x70,0x71,0xff, ;*/uc xdata data_x18128 _at_ 0x0000;uli xdata data_xt32 _at_ 0x0800;uli xdata data_xn32 _at_ 0x0a00;uli xdata data_xm32 _at_ 0x0c00;/uli data_xt32=0;sbit black_ray=P35;sbit black_louch=P34;sbit await_con=P32;sbit clssed_screen=P33;bitflag_key_read=0;bitflag_time_manage=0;bitflag_screen_out=0;bitflag_bf_clr=0;bit flag_open_await=0;bitflag_fast_xy=1;bitflag_fast_move=1;bitflag_count_fre=0;bitflag_fre_first=0;uckey_reg;ucindata;uc coo_x=32;uccoo_y=32;ucawait=5;uc show_page=0;uiawait_count=0;ucmove_jraw=0;ucx0;ucx1;ucx2;ucy0;ucy1;ucy2;ucmove_y;uc move_x;ucmove_x0;ucmove_x1;ucmove_x2;ucmove_y0;ucmove_y1;ucmove_y2;init(); /初始化工作/key_read(); /键盘读入/data_out_manage();/数据输出处理/time_manage();/定时处理/number_show(ui,bit); /数码显示/key_code(uc,uc);/按键译码/led_scon(); /LED扫描/led_scon_y(uc);/扫描Y轴/number_show_two(uc,uc);/二个单字节delay_1ms(uc);delay_10us(uc);screen_out(); /屏幕输出coo_manage();/坐标处理/choose_draw();move_draw_mamage();restore_mamage();/*/主程序/*/main()data_xt32=11; init(); /初始化工作/ while(1) if(flag_key_read=1) flag_key_read=0;key_read(); /键盘读入/if(key_reg!=0)data_out_manage(); /数据输出处理/if(black_louch=0)led_scon(); /LED扫描if(coo_y32) if(flag_count_fre=0) number_show_two(coo_x,coo_y);coo_manage();/坐标处理/await_count=0;coo_y=99;/防止多次进入if(flag_time_manage=1)flag_time_manage=0;time_manage();if(flag_screen_out=1) flag_screen_out=0;screen_out(); /屏幕输出 /*/主程序_end/*/*/初始化工作 /*/init()ucc;/定时器设置(5点) TMOD=0x51; /T0计时器设置 /TMOD: GATE C/!T M1 M0 GATE C/!T M1 M0 / T1 外内双控 =1计数 工作方式01:16位| T0EA=1;ET0=1;TH0=time0_H;TL0=time0_L;TR0=1;/id口处理address_h=y_no;data_io=0xff;/内存数据处理/调试口number_show_two(0,0);/*key_reg=11;delay_1ms(250);data_out_manage();move_jraw=1;coo_x=8;coo_y=8;delay_1ms(250); coo_manage();coo_x=16;coo_y=16; coo_manage();delay_1ms(250);move_jraw=2;coo_x=16;coo_y=16;delay_1ms(250); coo_manage();coo_x=16;coo_y=16;delay_1ms(250); coo_manage();coo_x=20;coo_y=20;delay_1ms(250); coo_manage(); */ /*/*/初始化工作 _end/*/*/键盘读入/*/key_read()staticn=0;/0一直无按键 1上次进入按键 2一直有按键 3上次退出按键uca,b;bitpoint;data_io=0xff;address_h=y_6key;a=data_io;address_h=y_7key;b=data_io;address_h=y_no;/number_show(a*0x100+b,1);if(a=0xff&b=0xff)point=0; /无按键elsepoint=1; /有按键/number_show(6666,0);switch (n)case0:if(point=1)n=1;elsen=0;break;case1:if(point=1)n=2; key_code(a,b);elsen=0;break;case2:if(point=1)n=2;elsen=3;break;case3:if(point=1)n=2;elsen=0;break;default:break;key_code(uc a,uc b)/按键译码/number_show(5555,0);switch (b)case0xfe: key_reg=1;break;case0xfd: key_reg=2;break;case0xfb:key_reg=3;break;case0xf7:key_reg=4;break;default:key_reg=0xff;/错误信号break;/*/键盘读入_end/*/*/输出处理 /*/data_out_manage()ucc,n;ulidata_long,t;/number_show(key_reg,0);switch (key_reg)case1:/反选for(c=0;c128;c+)t=data_x1show_pagec;t=t;data_x1show_pagec=t;break;case2:/整屏清除for(c=0;c128;c+)data_x1show_pagec=0xff;break;case3:flag_bf_clr=1;number_show(10,0);break;case4:flag_bf_clr=0;number_show(0,0);break;key_reg=0;/*/输出处理_end/*/*/数码显示/*/number_show(uidatas,bit point)uca;if(point=0)a=datas%10;/个位address_h=y_one;data_io=show_codea;a=datas/10%10; /十位address_h=y_ten;data_io=show_codea;a=datas/100%10; /百位address_h=y_hun;data_io=show_codea;a=datas/1000; /千位address_h=y_kilo;data_io=show_codea;else a=datas%0x10;/个位address_h=y_one;data_io=show_codea;a=datas/0x10%0x10; /十位address_h=y_ten;data_io=show_codea;a=datas/0x100%0x10; /百位address_h=y_hun;data_io=show_codea;a=datas/0x1000; /千位address_h=y_kilo;data_io=show_codea;address_h=y_no;data_io=0xff;/二个单字节 100number_show_two(ucc,uc b) uca;a=b%10;address_h=y_one;data_io=show_codea;a=b/10;address_h=y_ten;data_io=show_codea;a=c%10;address_h=y_hun;data_io=show_codea;a=c/10;address_h=y_kilo;data_io=show_codea;address_h=y_no;data_io=0xff;/*/数码显示_end/*/*/LED扫描/*/led_scon()uci;data_io=0; /扫描0-15/code_add=8;code_add=10;code_add=12;code_add=14;code_add=6; /关闭373/while(1);data_io=0xff;code_add=9;code_add=11;code_add=13;code_add=15;code_add=7; /关闭373for(i=0;i16;i+)code_add=i4;clssed_screen=0;/开扫描delay_10us(d_ray);if(black_ray=0) /有光返回coo_x=i;i=i4;coo_y=led_scon_y(i);/扫描Y轴clssed_screen=1;/关扫描return;clssed_screen=1;/关扫描data_io=0xff; /扫描16-31/code_add=8;code_add=10;code_add=12;code_add=14;code_add=6; /关闭373data_io=0;code_add=9;code_add=11;code_add=13;code_add=15;code_add=7; /关闭373for(i=0;i16;i+)code_add=i4;clssed_screen=0;/开扫描delay_10us(d_ray);if(black_ray=0)coo_x=i+16;i=i4;coo_y=led_scon_y(i);/扫描Y轴clssed_screen=1;/关扫描return;clssed_screen=1;/关扫描coo_x=32;coo_y=32;/扫描Y轴led_scon_y(uc scon_x)uci;data_io=0; /第一排373code_add=8;code_add=9;code_add=1; /关闭373data_io=0xff;code_add=10;code_add=11;code_add=12;code_add=13;code_add=14;code_add=15;code_add=7; /关闭373code_add=scon_x;data_io=0xff;clssed_screen=0;/开扫描delay_10us(d_ray);if(black_ray=0) /有光返回clssed_screen=1;/关扫描for(i=0;i8;i+)data_io=1i; /第一排373code_add=8;code_add=9;code_add=1; /关闭373code_add=scon_x;clssed_screen=0;/开扫描delay_10us(d_ray);if(black_ray=0) /有光返回clssed_screen=1;/关扫描returni; clssed_screen=1;/关扫描clssed_screen=1;/关扫描data_io=0; /第二排373code_add=10;code_add=11;code_add=3; /关闭373data_io=0xff;code_add=8;code_add=9;code_add=12;code_add=13;code_add=14;code_add=15;code_add=7; /关闭373code_add=scon_x;clssed_screen=0;/开扫描delay_10us(d_ray);if(black_ray=0) /有光返回clssed_screen=1;/关扫描for(i=0;i8;i+)data_io=1i;code_add=10;code_add=11;code_add=3; /关闭373code_add=scon_x;clssed_screen=0;/开扫描delay_10us(d_ray);if(black_ray=0) /有光返回clssed_screen=1;/关扫描return(i+8);clssed_screen=1;/关扫描clssed_screen=1;/关扫描data_io=0; /第三排373code_add=12;code_add=13;code_add=5; /关闭373data_io=0xff;code_add=8;code_add=9;code_add=10;code_add=11;code_add=14;code_add=15;code_add=7; /关闭373code_add=scon_x;clssed_screen=0;/开扫描delay_10us(d_ray);if(black_ray=0) /有光返回clssed_screen=1;/关扫描for(i=0;i8;i+)data_io=1i;code_add=12;code_add=13;code_add=5; /关闭373code_add=scon_x;clssed_screen=0;/开扫描delay_10us(d_ray);if(black_ray=0) /有光返回clssed_screen=1;/关扫描return(i+16);clssed_screen=1;/关扫描data_io=0; /第四排373code_add=14;code_add=15;code_add=7; /关闭373data_io=0xff;code_add=8;code_add=9;code_add=10;code_add=11;code_add=12;code_add=13;code_add=5; /关闭373code_add=scon_x;clssed_screen=0;/开扫描delay_10us(d_ray);if(black_ray=0) /有光返回clssed_screen=1;/关扫描for(i=0;i8;i+)data_io=1i;code_add=14;code_add=15;code_add=7; /关闭373code_add=scon_x;clssed_screen=1;/关扫描delay_10us(d_ray);clssed_screen=0;/开扫描delay_10us(d_ray);if(black_ray=0) /有光返回 clssed_screen=1;/关扫描return(i+24);clssed_screen=1;/关扫描clssed_screen=1;/关扫描return 24;/*/LED扫描_end/*/*/坐标处理/*/coo_manage()ucxt,yt,a;clssed_screen=1; /关if(move_jraw=0)if(coo_y8) yt=coo_x;xt=coo_y%8;else if(coo_y16)yt=coo_x+32;xt=coo_y%8;else if(coo_y24)yt=coo_x+64;xt=coo_y%8;else if(coo_y32)yt=coo_x+96;xt=coo_y%8;a=data_x1show_pageyt;/第一位亮起11111110xt=1xt;if(flag_bf_clr=0)a=a;/00000001a=a|xt;a=a;else a=a|xt;data_x1show_pageyt=a;elseswitch (move_jraw)case1:choose_draw();break;case2:move_draw_mamage();break;default:break;restore_mamage();clssed_screen=1;/*/坐标处理_end/*/*/屏幕输出/*/screen_out()staticuca=0;ucc,t;clssed_screen=1;for(c=0;c8;c+) /8次 t=c4;c
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论